Pages

Subscribe:

Ads 468x60px

Labels

28/02/2014

Criando um formulário validador de CPF com Ajax Jquery.

Algoritmo do CPF - O que está por trás do gerador de CPF 

Para exemplificar o processo vamos gerar um CPF válido, calculando os dígitos verificadores de um número hipotético, 111.444.777-XX.

Calculando o Primeiro Dígito Verificador:

   O primeiro dígito verificador do CPF é calculado utilizando-se o seguinte algoritmo. 1) Distribua os 9 primeiros dígitos em um quadro colocando os pesos 10, 9, 8, 7, 6, 5, 4, 3, 2 abaixo da esquerda para a direita, conforme representação abaixo:

111444777
1098765432

 2) Multiplique os valores de cada coluna:

111444777
1098765432
1098282420282114

3) Calcule o somatório dos resultados (10+9+...+21+14) = 162

4) O resultado obtido (162) será divido por 11. Considere como quociente apenas o valor inteiro, o resto da divisão será responsável pelo cálculo do primeiro dígito verificador.
Vamos acompanhar: 162 dividido por 11 obtemos 14 como quociente e 8 como resto da divisão. Caso o resto da divisão seja menor que 2, o nosso primeiro dígito verificador se torna 0 (zero), caso contrário subtrai-se o valor obtido de 11, que é nosso caso. Sendo assim nosso dígito verificador é 11-8, ou seja, 3 (três). Já temos portanto parte do CPF, confira: 111.444.777-3X.


Veja agora como implementar isso em PHP + jQuery:

Arquivo => index.html:
-------------------------------------------------------------------------------------------------------------------
<html>
<head>
  <script src="js/jquery-1.2.6.pack.js" type="text/javascript"></script>
  <script src="js/jquery.maskedinput-1.1.4.pack.js" type="text/javascript"></script>
  <script type="text/javascript">
   $(document).ready(function(){
    $("#cpf").mask("999.999.999-99");
   });
   
   //minha funcao validadora
   function  enviaValor(){
    var valor = $('#cpf').val();
    //console.log($('#cpf').val());
    $(document).ready(function(){
      //efetuando a gravação e contabilização de pratos mais acessados
      $.post(
       "./validar.php",
       { codigo: valor  },
       function(data) {
        //console.log(data);
        if(data == 1) {  
         $("#saida").html("<span style='color: green'>CPF Válido!</span>");   
        } else {  
         $("#saida").html("<span style='color: red'>CPF Inválido!</span>");   
        }
       }
        );
    });
   }
  </script>
</head>
 <title>
 Validar CPF
 </title>
</html></pre>
<body>
  <form action="" id="form1" method="post" name="form1">
   <div align="center">
    <table border="0" cellpadding="0" cellspacing="0" style="width: 100%px;">
     <tbody>
<tr>
       <td height="40">
        <div align="center">
         <input class="saida" id="cpf" name="cpf" type="text" />
        </div>
</td>
      </tr>
<tr>
       <td>
        <div align="center">
         <input id="botaoValidarCPF" name="botaoValidarCPF" onclick="enviaValor();" style="cursor: pointer; font-size: 15px;" type="button" value="Validar CPF" />
        </div>
<div align="center" class="style7" id="saida">
         <span style="color: green;"></span>
        </div>
</td>
      </tr>
</tbody>
    </table>
</div>
</form>
</body>
------------------------------------------------------------------------------ 
 Observe que linha onde é importado o arquivo .js, é uma biblioteca (jquery.maskedinput) de mascaras javascript e é aplicada na linha 7;

Em seguida é criado uma função javascript de nome "enviaValor()" que possui uma requisição Ajax jQuery $.post que envia o valor do campo de formulario para o arquivo PHP "validar.php" receber e procesar da seguinte forma:

---------------------------------------------------------------------------------------------------------------------

 <?php
 //recebe o dado vindo da pagina via Ajax jQuery
$cpf = (isset($_REQUEST['codigo'])) ? $_REQUEST['codigo'] : "" ;


//funcao que retira o ponto e traço e valida o CPF com o calculo do algoritmo
function validaCPF($cpf = null) {

    // Verifica se um número foi informado
    if(empty($cpf)) {
        return false;
    }

    // Elimina possivel mascara
    $cpf = ereg_replace('[^0-9]', '', $cpf);
    $cpf = str_pad($cpf, 11, '0', STR_PAD_LEFT);
   
    // Verifica se o numero de digitos informados é igual a 11
    if (strlen($cpf) != 11) {
        return false;
    }
    // Verifica se nenhuma das sequências invalidas abaixo
    // foi digitada. Caso afirmativo, retorna falso
    else if ($cpf == '00000000000' ||
        $cpf == '11111111111' ||
        $cpf == '22222222222' ||
        $cpf == '33333333333' ||
        $cpf == '44444444444' ||
        $cpf == '55555555555' ||
        $cpf == '66666666666' ||
        $cpf == '77777777777' ||
        $cpf == '88888888888' ||
        $cpf == '99999999999') {
        return false;
     // Calcula os digitos verificadores para verificar se o
     // CPF é válido
     } else { 
       
        for ($t = 9; $t < 11; $t++) {
           
            for ($d = 0, $c = 0; $c < $t; $c++) {
                $d += $cpf{$c} * (($t + 1) - $c);
            }
            $d = ((10 * $d) % 11) % 10;
            if ($cpf{$c} != $d) {
                return false;
            }
        }

        return true;
    }
}

//verifica se não enviado o formulario em branco
if($cpf !== ""){
        //verifica se a funçao retornou "true" ou "false"
        if(validaCPF($cpf)){
            echo 1;
        } else {
            echo 0;
        }
} else {
    echo "Digite um CPF!";
}

?>
---------------------------------------------------------------------------------------------------------------------

Um exemplo funcionando pode ser visto abaixo:

Um abraço e até a próxima a todos(as)!

0 comentários:

Postar um comentário

Todos os comentários serão moderados e postados um tempo depois, comentários ofencivos serão deletados.