Usuário com melhor resposta
Validar CPFCnpj via Javascript com MVC 5

Pergunta
-
Tenho essa função javascript para validar CPF/CNPJ no mesmo controle.
function isCpf(cpf) {
var soma;
var resto;
var i;
var msg = "Cpf Inválido!";
if ((cpf.length != 11) ||
(cpf == "00000000000") || (cpf == "11111111111") ||
(cpf == "22222222222") || (cpf == "33333333333") ||
(cpf == "44444444444") || (cpf == "55555555555") ||
(cpf == "66666666666") || (cpf == "77777777777") ||
(cpf == "88888888888") || (cpf == "99999999999")) {
return false;
}
soma = 0;
for (i = 1; i <= 9; i++) {
soma += Math.floor(cpf.charAt(i - 1)) * (11 - i);
}
resto = 11 - (soma - (Math.floor(soma / 11) * 11));
if ((resto == 10) || (resto == 11)) {
resto = 0;
}
if (resto != Math.floor(cpf.charAt(9))) {
return false;
}
soma = 0;
for (i = 1; i <= 10; i++) {
soma += cpf.charAt(i - 1) * (12 - i);
}
resto = 11 - (soma - (Math.floor(soma / 11) * 11));
if ((resto == 10) || (resto == 11)) {
resto = 0;
}
if (resto != Math.floor(cpf.charAt(10))) {
return false;
}
return true;
}
function isCnpj(s) {
var i;
var c = s.substr(0, 12);
var dv = s.substr(12, 2);
var d1 = 0;
var msg = "Cpf Inválido!";
for (i = 0; i < 12; i++) {
d1 += c.charAt(11 - i) * (2 + (i % 8));
}
if (d1 == 0) return false;
d1 = 11 - (d1 % 11);
if (d1 > 9) d1 = 0;
if (dv.charAt(0) != d1) {
return false;
}
d1 *= 2;
for (i = 0; i < 12; i++) {
d1 += c.charAt(11 - i) * (2 + ((i + 1) % 8));
}
d1 = 11 - (d1 % 11);
if (d1 > 9) d1 = 0;
if (dv.charAt(1) != d1) {
return false;
}
return true;
}
function isCpfCnpj(valor) {
var retorno = false;
var numero = valor;
numero = unformatNumber(numero);
if (numero.length > 11) {
if (isCnpj(numero)) {
retorno = true;
}
} else {
if (isCpf(numero)) {
retorno = true;
}
}
return retorno;
}No meu CSHTML eu tenho essa chamada, no onclick do botão:
<div>
<form id="formPesquisa" onsubmit="" method="post">
<label>CNPJ:</label>
<input type="text" id="txtCnpjPesquisa" name="txtCnpjPesquisa" onkeypress=" return SomenteNumero(event);"/>
<button id="btnPesquisarCnpj" name="btnPesquisarCnpj" class="btn-pesquisa" onclick="isCpfCnpj(formPesquisa.txtCnpjPesquisa);">Pesquisar</button>
</form>
</div>Acontece, que se eu digito um cpf ou cnpj inválido, o form é enviado assim mesmo. Gostaria de dar uma mensagem de CPF ou CNPJ inválido e o focus voltasse para o controle TextBox e não apagasse o Digitado, para que o usuário conferisse o que errou. Como eu faço isso?
Respostas
-
Tem como atualizar o codigo? E viu o meu exemplo?
E com a mask do jquery nem tem a necessidade dessa função com regex, pois a mascara ja não deixa o usuario digitar letras dentro do input, logo pode remover essa funcao.
Att.
- Marcado como Resposta pnet terça-feira, 29 de abril de 2014 20:56
Todas as Respostas
-
Você pode fazer assim com jquery:
$(document).ready(function() {
$("#btnPesquisarCnpj").click(function() {
if (isCpfCnpj(formPesquisa.txtCnpjPesquisa)) {
return true;
}
else {
alert('CPF ou CNPJ inválido');
$("#txtCnpjPesquisa").focus();
return false;
}
});
});
Elvis Rodrigues Analista Desenvolvedor .Net MCTS .Net Framework, SQL Server 2005, WPF, ASP NET foxelv@hotmail.com -
Elvis, realmente é isso mesmo. Agora, você tem algum código que valide o CNPJ/CPF com máscara ou uma forma de nessa função retirar a máscara que está no campo para validar?
Uso assim a máscara: $("#txtCnpjPesquisa").mask("99.999.999/9999-99");
Como eu retiro e valido o campo?
-
Olá pnet, existem duas formas de remover a mascara do inputmasked uma é usar a função "unmask", por exemplo:
$('#txtCnpjPesquisa').unmask();
Ou remover os "." e "-" com o replace do javascript, ficando assim:
CPF:
cpf= cpf.replace('.', '');
cpf= cpf.replace('.', '');
cpf= cpf.replace('-', '');CNPJ:
cnpj= cnpj.replace('.', '');
cnpj= cnpj.replace('.', '');
cnpj= cnpj.replace('/', '');
cnpj= cnpj.replace('-', '');Espero ter ajudado, qualquer coisa só chamar =)
Att.
Rodolfo Oliveira
- Editado Rodolfo Ferreira Oliveira terça-feira, 29 de abril de 2014 18:23 Desculpe, errei o replace do CNPJ, segue o correto
-
-
-
Estou usando replace, mas isso aqui não funciona:
formPesquisa.txtCnpjPesquisa
Não existe valor. Tente assim: $('#formPesquisa.txtCnpjPesquisa').val() também não resolveu. Tirei o val() e também continua não funcionando. Como eu pego o valor do textbox no jquery ou javascript?
-
executa vai na página pelo browser clica em cima do textbox com o botão direito do mouse, e clica em inspecionar elemento, então vc pega o ID dele e coloca na expressão jquery.
Elvis Rodrigues Analista Desenvolvedor .Net MCTS .Net Framework, SQL Server 2005, WPF, ASP NET foxelv@hotmail.com -
-
Pnet olha aqui como eu fiz no fiddler, a função está certinha é alguma coisa na hora de validar.
Att.
Rodolfo Oliveira
-
-
-
Tem como atualizar o codigo? E viu o meu exemplo?
E com a mask do jquery nem tem a necessidade dessa função com regex, pois a mascara ja não deixa o usuario digitar letras dentro do input, logo pode remover essa funcao.
Att.
- Marcado como Resposta pnet terça-feira, 29 de abril de 2014 20:56
-
-