Fabyo 66 Denunciar post Postado Julho 31, 2005 Funçao que valida um CNPJ Como funciona os numeros do CNPJ (Cadastrastro Nacional da Pessoa Jurídica) O numeros do CNPJ é composto por três partes de algarismos a primeira parte eh o número da inscrição a segunda parte depois da barra( / ) eh o número de filiais e o final sao os 2 digitos verificadores Como calcular um numero de cnpj para saber se ele eh valido exemplo 11.222.333/0001-XX. colocando eles na sequencia sem a barra, ponto e traço 112223330001 agora o algorito para fazer a soma 543298765432 colocando um em baixo do outro so multiplicar o de cima pelo de baixo 112223330001 = > cnpj 543298765432 => algoritimos exemplo 5 * 1 , 4 * 1, 3 * 2, 2 * 2 etc... depois some tudo exemplo 5 + 4 + 6 + 4 + 18 + 24 + 21 + 18 + 0 + 0 + 0 + 2 resultado dessa primeira soma = 102 fazendo a divisão por 11 (102/11). o resto da divisão é o número 3. regra se o resultado for menor que 2 o valor do dígito verificador eh 0 senao subtraímos o valor de 11 para obter o dígito exemplo verificador é (11 - 3) o primeiro digito eh 8. so fazer todo processo de novo mas agora incluindo o digito que foi achado na conta acima exemplo 1122233300018 = cnpj + 1 digito achado que eh o 8 6543298765432 => algoritimos acrescentando o 6 no começo so fazer a soma e achar o segundo digito verificador e pra saber se o cnpj eh valido so testar se os numeros verificadores sao iguais oa do cnpj agora vamos ao script eu montei uma logica bem simples e enxuta, mas como to fazendo isso as 5 da madruga nao to com paciencia pra mecher mais nele mas da pra diminuir mais linhas ainda :D , e quem tiver duvidas so perguntar PHP /* Fabyo Guimaraes 31/07/2005 5:21:00 am*/ function Valida_CNPJ( $cnpj ) { $cnpj = preg_replace( "@[./-]@", "", $cnpj ); if( strlen( $cnpj ) 14 or !is_numeric( $cnpj ) ) { return false; } $k = 6; $soma1 = ""; $soma2 = ""; for( $i = 0; $i { $k = $k == 1 ? 9 : $k; $soma2 += ( $cnpj{$i} * $k ); $k--; if($i { if($k == 1) { $k = 9; $soma1 += ( $cnpj{$i} * $k ); $k = 1; } else { $soma1 += ( $cnpj{$i} * $k ); } } } $digito1 = $soma1 % 11 $digito2 = $soma2 % 11 return ( $cnpj{12} == $digito1 and $cnpj{13} == $digito2 ); } echo Valida_CNPJ( "11.222.333/0001-81" ); //retorna true em caso de valido e false se for invalido ?> bom aproveito Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Depieri Barduchi 0 Denunciar post Postado Abril 29, 2008 Cara desculpa minha ignorância e por reativar este topico mas não obtive sucesso para aplicar sua função acusando erro na llinha 38, você saberia me informar o pq? vlw t+. Compartilhar este post Link para o post Compartilhar em outros sites
dani piresk 0 Denunciar post Postado Julho 24, 2008 tenta assim: return ( $cnpj{12} == $digito1 and $cnpj{13} == $digito2 ) ? true : false; Compartilhar este post Link para o post Compartilhar em outros sites