Visitantes que leram esse artigo, também visitaram:
  • Valida√ß√£o de Formul√°rios – Campo E-mail
  • Algoritmo de CNPJ
  • CNPJ – Valida√ß√£o no Delphi
  • Algoritmo de CPF
  • Aumentando a Biblioteca – Parte I


  • 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

    Cursos Online na Ńrea de InformŠtica

    • 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 não repetir alguns comandos
      2 – N√£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