Vou compartilhar uma função para gerar e validar CPF.
pra questão de entendimento vamos exemplificar como que se faz isso no papel.
Primeiramente pegamos 9 números entre (0-9) aleatóriamente.
Para descobrir o primeiro digito verificador é só multiplicarmos o primeiro digito por 10 o segundo por 9 de forma constante e decrescente depois somamos os resultados e dividimos por 11 pegamos o resto e arredondamos caso o resultado seja 10 o digito verificador é 0 veja no exemplo abaixo.
|-----|-----|-----|-----|-----|-----|-----|-----|-----| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | | x | x | x | x | x | x | x | x | x | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |-----|-----|-----|-----|-----|-----|-----|-----|-----| 1 + 4 + 9 + 16 + 25 + 36 + 49 + 64 + 81 = 285 / 11 = 25,909090... arredondamos o resto da divisão e obtemos o 10 então o nosso primeiro digito é 0
para descobrir o segundo digito verificador é basicamente da mesma forma.
veja o exemplo abaixo.
|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | x | x | x | x | x | x | x | x | x | x | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |-----|-----|-----|-----|-----|-----|-----|-----|-----|-----| 0 + 2 + 6 + 12 + 20 + 30 + 42 + 56 + 72 + 0 = 240 / 11 = 81,818181... arredondamos o resto da divisão e obtemos o 9 nesse caso o nosso digito é 9
então nosso CPF é 123.456.789-09
segue nosso script comentado
<script> function CPF (acao){ var ResponseCpf = "cpf"; var ResponseVerifica = "status"; if(acao == "Gerar") { n=0; var cpf = ""; // gera os 9 digitos for(n==0; n<9; n++) { x = String(Math.round(Math.random()*9)); cpf += x; } // faz o calculo do primeiro digito dg1 = (cpf.slice(0,1)*1+cpf.slice(1,2)*2+cpf.slice(2,3)*3+cpf.slice(3,4)*4+cpf.slice(4,5)*5+cpf.slice(5,6)*6+cpf.slice(6,7)*7+cpf.slice(7,8)*8+cpf.slice(8)*9)%11; // se for 10 então é = 0 if(dg1==10) dg1=0; // acrescenta o digito no nosso cpf cpf +=eval(dg1); //faz o calculo do primeiro digito dg2 = (cpf.slice(0,1)*0+cpf.slice(1,2)*1+cpf.slice(2,3)*2+cpf.slice(3,4)*3+cpf.slice(4,5)*4+cpf.slice(5,6)*5+cpf.slice(6,7)*6+cpf.slice(7,8)*7+cpf.slice(8,9)*8+cpf.slice(9)*9)%11; // se for 10 então é = 0 if(dg2==10) dg2=0; // acrescenta o digito no nosso cpf cpf +=eval(dg2); document.getElementById(ResponseCpf).value = cpf; document.getElementById(ResponseCpf).focus(); } if(cpf == 00000000000 || cpf == 11111111111 || cpf == 22222222222 || cpf == 33333333333 || cpf == 44444444444 || cpf == 55555555555 || cpf == 66666666666 || cpf == 77777777777 || cpf == 88888888888 || cpf == 99999999999) { document.getElementById(ResponseVerifica).value = "Falso"; return false; } add = 0; for (i=0; i < 9; i ++) add += parseInt(cpf.charAt(i)) * (10 - i); rev = 11 - (add % 11); if (rev == 10 || rev == 11) rev = 0; if (rev != parseInt(cpf.charAt(9))) { document.getElementById(ResponseVerifica).value = "Falso"; return false; } add = 0; for (i = 0; i < 10; i ++) add += parseInt(cpf.charAt(i)) * (11 - i); rev = 11 - (add % 11); if (rev == 10 || rev == 11) rev = 0; if (rev != parseInt(cpf.charAt(10))) { document.getElementById(ResponseVerifica).value = "Falso"; return false; } document.getElementById(ResponseVerifica).value = "Verdadeiro"; return false; } </script>
Formulário para gerar e verificar CPF
<form name="cpf"> CPF:<input type="text" id="cpf" maxlength="11" onkeyup="CPF('Verificar');" /><br /> Status: <input size="6" type="text" disabled="disabled" id="status" /><Br /> <input type="button" onclick="CPF(this.value)" value="Gerar" /> <input type="button" onclick="CPF(this.value)" value="Verificar" /><br /> </form>
Veja o Exemplo
é isso ai qual quer dúvida postem ai!
Nenhum comentário:
Postar um comentário