terça-feira, 23 de julho de 2013

Função para validar CNPJ com PHP

Pessoal, boa noite.
Para quem procura uma função php que valide CNPJ com muitos critérios de teste, assim como a que valida CPF, segue uma que utilizo muito em meus desenvolvimentos:

CNPJ: Cadastro Nacional de Pessoa Jurídica













<?php
function validaCnpj($cnpj)
{
    $cnpj = trim($
cnpj);
    $soma = 0;
    $multiplicador = 0;
    $multiplo = 0;
  
  
    # [^0-9]: RETIRA TUDO QUE NÃO É NUMÉRICO,  "^" ISTO NEGA A SUBSTITUIÇÃO, OU SEJA, SUBSTITUA TUDO QUE FOR DIFERENTE DE 0-9 POR "";
    $cnpj = preg_replace('/[^0-9]/', '', $cnpj);
  
    if(empty($cnpj) || strlen($cnpj) != 14)
        return FALSE;

    # VERIFICAÇÃO DE VALORES REPETIDOS NO CNPJ DE 0 A 9 (EX. '00000000000000')    

    for($i = 0; $i <= 9; $i++)
    {
        $repetidos = str_pad('', 14, $i);
      
        if($cnpj === $repetidos)
            return FALSE;
    }
  
    # PEGA A PRIMEIRA PARTE DO CNPJ, SEM OS DÍGITOS VERIFICADORES    

 $parte1 = substr($cnpj, 0, 12);  
  
    # INVERTE A 1ª PARTE DO CNPJ PARA CONTINUAR A VALIDAÇÃO    $parte1_invertida = strrev($parte1);
  
    # PERCORRENDO A PARTE INVERTIDA PARA OBTER O FATOR DE CALCULO DO 1º DÍGITO VERIFICADOR
    for ($i = 0; $i <= 11; $i++)
    {
        $multiplicador = ($i == 0) || ($i == 8) ? 2 : $multiplicador;

        $multiplo = ($parte1_invertida[$i] * $multiplicador);

        $soma += $multiplo;
      
        $multiplicador++;
    }
  
    # OBTENDO O 1º DÍGITO VERIFICADOR        

    $rest = $soma % 11;
  
    $dv1 = ($rest == 0 || $rest == 1) ? 0 : 11 - $rest;
      
    # PEGA A PRIMEIRA PARTE DO CNPJ CONCATENANDO COM O 1º DÍGITO OBTIDO 

    $parte1 .= $dv1;
  
    # MAIS UMA VEZ INVERTE A 1ª PARTE DO CNPJ PARA CONTINUAR A VALIDAÇÃO 

    $parte1_invertida = strrev($parte1);
      
    $soma = 0;
  
    # MAIS UMA VEZ PERCORRE A PARTE INVERTIDA PARA
OBTER O FATOR DE CALCULO DO 2º DÍGITO VERIFICADOR      
    for ($i = 0; $i <= 12; $i++)
    {
        $multiplicador = ($i == 0) || ($i == 8) ? 2 : $multiplicador;

        $multiplo = ($parte1_invertida[$i] * $multiplicador);

        $soma += $multiplo;
      
        $multiplicador++;
    }
      
    # OBTENDO O 2º DÍGITO VERIFICADOR

    $rest = $soma % 11;
  
    $dv2 = ($rest == 0 || $rest == 1) ? 0 : 11 - $rest;
  
    # AO FINAL COMPARA SE OS DÍGITOS OBTIDOS SÃO IGUAIS AOS INFORMADOS (OU A SEGUNDA PARTE DO CNPJ)  
    return ($dv1 == $cnpj[12] && $dv2 == $cnpj[13]) ? TRUE : FALSE;
    //echo ($dv1 == $cnpj[12] && $dv2 == $cnpj[13]) ? 'TRUE' : 'FALSE';} 

?>   


Em breve veremos uma função que utilizo para validação de E-mail... até mais

2 comentários:

Palavrões e comentários não agregadores de valores e conhecimentos serão descartados