Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, preciso de ajuda.
Eu estou realizando um trabalho da faculdade na qual preciso colocar 3 validações no formulário do CPF que são eles:
1. Se o usuário não digitou 11 caracteres (um CPF é composto de 9 dígitos de identificação e 2 dígitos de verificação) deve apresentar o erro: "CPF tem de ter 11 dígitos".
2. Se nem todos caracteres digitados são dígitos. Ou seja, se digitarem um "ponto" (.) deve apresentar o erro: "CPF só pode ter dígitos, caracter . inválido!"
3. Se os dígitos de verificação estão incorretos. Deve apresentar o erro: "Dígitos verificadores inválidos!"
Eu tenho o código abaixo, porém, ele apresenta os seguintes erros: Mesmo eu digitando meu CPF, ele apresenta o erro: "CPF deve ter 11 Dígitos". Ele não reconhece o erro se eu digitar qualquer caracter e ele não está identificando o dígito verificador.
Sou super iniciante. Quando forem explicar, tenham uma certa paciência, por favor. Se precisarem, envio a página em html. Muito Obrigado!
Código:
<script>
function calculaDV(num) {
var resto = 0, soma = 0;
for ( i = 2; i <11; i++) {
soma = soma + ((num % 10) * i);
num = parseInt(num / 10);
}
resto = (soma % 11);
return (resto > 1) ? (11 - resto) : 0;
}
function VerificaCPF ( campo ) {
var i, c, cpf;
var iniCPF;
var strCPF = campo.value;
if ( strCPF.lenght != 11){
alert("CPF tem de ter 11 digitos");
return false;
}
for ( i = 0; 1 < 11; i++ ) {
c = strCPF.charAt(i);
if ( (c < '0') || (c > '9')) {
alert("CPF so pode ter digitos, caracter " +
c + "invalido!");
return false;
}
}
iniCPF = strCPF.substring(0, 9);
pd = calculaDV(iniCPF);
sd = calculaDV(iniCPF * 10 + pd);
if ( (pd != strCPF.charAt(9)) || (sd !=strCPF.charAt(10)) ) {
alert("Digitos verificadores invalidos!");
return false;
}
return true;
}
</script>Ronaldo, sem problemas. Chegando em casa, irei realizar as substituições. Posto aqui pra você o resultado.
Sobre o Dígito Verificador, sem problemas. Tá bom. Já ajuda, de alguma forma. Qualquer coisa deixo sem fazer esse detalhe. Vai que ele nem perceba... risos.
Apenas resumindo, além de corrigir o erro da forma Length, eu altero, também, o 2º código que você colocou tudo junto, certo? Esse código eu irei alterar da linha "if ( strCPF.lenght != 11){" até os dois colchete encerrando com </script> de meu código, Certo?
Desde já, valeu pelo apoio. À noite realizo as alterações e os testes.
Muito Obrigado mesmo.
Não é difícil fazer, procura no google sobre com é fazer o cálculo do CPF (não código, mas o calculo em si)... depois, se não conseguir criar do zero, pega um pronto (tem de monte por aí) e veja se entende como eles fizeram para recriar em Js a formula.
Não coloquei nenhum justamente porque só fuçando que a gente aprende.
Com certeza. Eu só recorri ao fórum mesmo, pra entender se havia erro no código e haviam, além de outras dicas que você me deu.
Assim que chegar em casa, realizei todo o procedimento e posto aqui o feedback.
Mas desde já, valeu mesmo!
Ronaldo, valeu pelo apoio. Mas no código, apenas funcionou o alerta de quando tem menos 11 dígitos e quando o dígito verificador é inválido. Quando digitamos caracter inválido ele não reconhece.
Dei uma rodada no google, mas não consegui algo que funcionasse.
Vou manter assim mesmo no trabalho. Talvez eu que esteja colocando algo de errado.
Mas valeu pelo apoio!
Ronaldo, descobri o que houve.
No código, o FOR estava assim:
for ( i = 0; 1 < 11; i++ )
e o certo é
for ( i = 0; i < 11; i++ )
Agora, tuuuudo ok! Valeeeeuuuuu
Ficaria algo assim:
if (!isNaN(parseFloat(strCPF)) && isFinite(strCPF)) {
return true;
}else{
Mas como se ele passasse a verificação de letras já ia para verificação do dv do CPF coloquei tudo junto se ver que não é texto já calcula para ver se é válido.
if (!isNaN(parseFloat(strCPF)) && isFinite(strCPF)) {
}else{
Mas tem um problema que usei sd = strCPF.substring(9,10); que pega somente o penultimo caracter e comparo com o calculo da função calculaDV... isto é: sua função calculaDV só verifica o primeiro digito verificador do CPF, que são dois, se o último estiver errado vai passar errado... você tem de calcular os dois e comparar... Mas como está agora funcionaria. Só termina a função de calculo do CPF.