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