segunda-feira, 27 de setembro de 2010

Validar CPF


Olá amigos.

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
CPF: Status:


é isso ai qual quer dúvida postem ai!

Nenhum comentário:

Postar um comentário

Related Posts with Thumbnails