Validação de CPF e CNPJ

Publicado por Marcelo Bom Jardim 26/01/2005

[ Hits: 31.407 ]

Download valida_docs.php




Este script tem a função de validar tanto CPF quanto CNPJ

  



Esconder código-fonte

<?
   //Desenvolvedor: Marcelo Bom Jardim
   //Email: suporte@onzehost.net
   //Site: www.onzehost.net
?>
<?
   // VERIFICA CPF
   function validaCPF($cpf) {
      $soma = 0;
      
      if (strlen($cpf) <> 11)
         return false;
      
      // Verifica 1º digito      
      for ($i = 0; $i < 9; $i++) {         
         $soma += (($i+1) * $cpf[$i]);
      }

      $d1 = ($soma % 11);
      
      if ($d1 == 10) {
         $d1 = 0;
      }
      
      $soma = 0;
      
      // Verifica 2º digito
      for ($i = 9, $j = 0; $i > 0; $i--, $j++) {
         $soma += ($i * $cpf[$j]);
      }
      
      $d2 = ($soma % 11);
      
      if ($d2 == 10) {
         $d2 = 0;
      }      
      
      if ($d1 == $cpf[9] && $d2 == $cpf[10]) {
         return true;
      }
      else {
         return false;
      }
   }
   
   
   
   
   
   // VERFICA CNPJ
   function validaCNPJ($cnpj) {
   
      if (strlen($cnpj) <> 14)
         return false; 

      $soma = 0;
      
      $soma += ($cnpj[0] * 5);
      $soma += ($cnpj[1] * 4);
      $soma += ($cnpj[2] * 3);
      $soma += ($cnpj[3] * 2);
      $soma += ($cnpj[4] * 9); 
      $soma += ($cnpj[5] * 8);
      $soma += ($cnpj[6] * 7);
      $soma += ($cnpj[7] * 6);
      $soma += ($cnpj[8] * 5);
      $soma += ($cnpj[9] * 4);
      $soma += ($cnpj[10] * 3);
      $soma += ($cnpj[11] * 2); 

      $d1 = $soma % 11; 
      $d1 = $d1 < 2 ? 0 : 11 - $d1; 

      $soma = 0;
      $soma += ($cnpj[0] * 6); 
      $soma += ($cnpj[1] * 5);
      $soma += ($cnpj[2] * 4);
      $soma += ($cnpj[3] * 3);
      $soma += ($cnpj[4] * 2);
      $soma += ($cnpj[5] * 9);
      $soma += ($cnpj[6] * 8);
      $soma += ($cnpj[7] * 7);
      $soma += ($cnpj[8] * 6);
      $soma += ($cnpj[9] * 5);
      $soma += ($cnpj[10] * 4);
      $soma += ($cnpj[11] * 3);
      $soma += ($cnpj[12] * 2); 
      
      
      $d2 = $soma % 11; 
      $d2 = $d2 < 2 ? 0 : 11 - $d2; 
      
      if ($cnpj[12] == $d1 && $cnpj[13] == $d2) {
         return true;
      }
      else {
         return false;
      }
   } 
?>

Scripts recomendados

Menu Dinâmico Horizontal

Formata número

Mostra a quantidade dos dias da semana em intervalo

Mail BomBer 1.0

Monitoramento simples de servidores [versão 1.0]


  

Comentários
[1] Comentário enviado por thandra em 03/05/2006 - 17:03h

Gostei do código + não consigo fazer funcionar. Todo cpf que coloco da false. Poderia me ajudar?

[2] Comentário enviado por luisrogerio1993 em 25/10/2017 - 17:12h

O código funciona, porem há um pequeno erro matemático, se for testado 11 zeros para o CPF ou 14 zeros para o CNPJ, o resultado da validação vai ser verdadeiro, mesmo o CPF/CNPJ estando inválido. Correção: "if(strstr($cnpj, "0000000000000")) return false;" e "if(strstr($cpf, "0000000000000")) return false;" (após o 1º if, nas respectivas funções).


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts