Validação do CPF em PHP

Postado por Plinio Cruz em 11 de julho de 2009 na categoria PHP, Programação, Soluções | 3 Comments to Read

1 Estrela2 Estrela3 Estrela4 Estrela5 Estrela (1 votos, média: 5,00)
Loading...Loading...

Um dos artigos mais lidos do Clube da Informática é sobre o algortimo de validação do CPF, temos aqui no escritório essa validação em formato de função, utilizamos muito, temos em Java Script para os sistemas web e em formato de procedimento para Pascal, quando utilizamos o Delphi.

Estamos com um dos nossos clientes do Hermes que necessita fazer um formulário para colher inscrições para seu próximo evento dentro do hotsite do seu cliente, o problema é que estamos falando de uma das maiores empresa de assistência médica do país, que utiliza servidores próprios com programação de área restrita em seu site, busca e inúmeras ferramentas.

Para criar o menor impacto possível e agilizar o processo, nossa proposta foi a seguinte: vamos fazer todo o processo de inscrição (quatro telas) em um só arquivo de PHP, utilizando o banco de dados do nosso servidor e ainda, só utlizando o mais puro PHP, sem java script, sem AJAX, sem framework, sem nada que pudesse rivalizar ou incompatibilizar ferramentas do cliente ou as nossas próprias, ou ainda que necessitasse interação com o servidor para instalação, sendo assim enviaremos o arquivo para a empresa testado e pronto para colocação no hotsite do evento

Uma das rotinas que precisamos é de validação do CPF, que antes usamos em Java Script para poupar tempo e processos pela Internet, uma validação em JS dentro do site, quando acionado o botão de enviar a validação ocorre sem enviar os dados, ou seja, é mais rápido. No caso proposto vamos utilizar só PHP e uma única vez em cada inscrição realizada haverá validação, então deixamos de lado a função e incomporamos de forma bem enxuta a rotina.

Estamos tratando os dados na fonte, mesmo com o aviso de entrar só números, normalmente o usuários não prestam muito atenção nas instruções e já que vamos ter que “enviar” os dados por post e fazer a validação para retornar o resultado, vamos optar por tratar os dados, vamos fazer uma rotina para retirar sinais e espaços em branco da entrada, para evitar erros na validação e obrigar o usuário a verificar e reenviar os dados, o que aumentaria o processo e o número de vezes a interação com o trânsito de dados na internet.

      $sinais= array("/"," ",".","-",",");
      $cpf=str_replace($sinais,"",$_POST['cpf']);

Após a verificação vamos aplicar de forma matemática e direto a validação do algoritmo do processo do artigo já apresentado aqui no site. Confira o código:

      ///////////////////////////////////////
      //Valida o CPF - Algoritmo do Clube
      ///////////////////////////////////////
          $cpf_validar=substr($cpf,0,9);
          $soma=0; $n=11;
          for ($i=0;$i<=9;$i++)
                {
                   $n=$n-1;
                   $soma=$soma+(substr($cpf_validar,$i,1)*$n);
                };
          $resto= $soma % 11;
          if ($resto<2) {$cpf_validar=$cpf_validar."0";} else {$cpf_validar=$cpf_validar.(11-$resto);};
          //Segunda parte da validação do CPF
          $soma=0; $n=12;
          for ($i=0;$i<=10;$i++)
                {
                   $n=$n-1;
                   $soma=$soma+(substr($cpf_validar,$i,1)*$n);
                };
          $resto= $soma % 11;
          if ($resto<2) {$cpf_validar=$cpf_validar."0";} else {$cpf_validar=$cpf_validar.(11-$resto);}
          if ($cpf_validar==$cpf) {$erro=1;} else {$erro=0;$mensagens="CPF Inválido";};

As únicas obserrvações é que criamos um flag para o erro, ou seja, quando recebe “1” está ok, caso contrário recebe “0” e cria uma variável com a mensagem de erro. Espero que a rotina ajude a entender melhor o artigo e vice e versa. Qualquer dúvida escreva!

abraço

Plínio Cruz

  • André G said,

    Olá, eu também fiz uma postagem sobre validação de email, só que usei um método muito funcional, que verifica se realmente o host existe.

    http://www.gasparimsat.com/index.php/21/08/2009/validacao-do-email-pelo-host-usando-php/

    Ex: A pessoa escreve email@bol.com.br, ele verifica se o host “Bol” existe.

  • Tiago said,

    Neste blog também tem um algoritmo para validar CPF.

    http://casadophp.blogspot.com/2009/11/algoritmo-para-validar-cpf.html

  • Alexandre Broggio said,

    Muito bom o script achei varios mais este foi o mais resumido dai resolvi incluir algunas coisas que tinha no meu outro script neste ai como
    1 РUma fun̤̣o para ṇo repetir alguns comandos
    2 РṆo validar se o cpf for de 00000000000 a 99999999999

    Ai vai

    $cpf = 11122233396;
    $sinais= array(“/”,” “,”.”,”-“,”,”);
    $cpf=str_replace($sinais,””,$cpf);
    $cpf_validar=substr($cpf,0,9);

    function Validate($position,$loop)
    {
    global $cpf_validar,$cpf;
    $soma=0; $n=$position;
    for ($i=0;$i<=$loop;$i++)
    {
    $n=$n-1;
    $soma+=(substr($cpf_validar,$i,1)*$n);
    };
    $resto= $soma % 11;
    if ($resto<2){$cpf_validar=$cpf_validar."0";}else{$cpf_validar=$cpf_validar.(11-$resto);};
    for($i=0;$i<=9;$i++){if($cpf == str_pad("",11,$i)){$cpf_validar = 0;}}
    return $cpf_validar;
    }#fim function

    $cpf_validar = Validate(11,9);
    $cpf_validar = Validate(12,10);

    if ($cpf_validar==$cpf) {$erro=1;$mensagens="CPF Valido";} else {$erro=0;$mensagens="CPF Invalido";};

    echo $mensagens;

    O endereço do meu Blog http://www.mapsd.com.br/blog

Deixe seu comentário