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


Fatal error: Uncaught Exception: 12: REST API is deprecated for versions v2.1 and higher (12) thrown in /home/storage/a/41/59/clubedainformatica/public_html/site/wp-content/plugins/seo-facebook-comments/facebook/base_facebook.php on line 1273