Ir para conteúdo
Fórum Script Brasil
  • 0

Funçao Para Validar CNPJ


Beraldo

Pergunta

Script postado por: Fabyo

Funçao para validar CNPJ

Como funciona os numeros do CNPJ

O numeros do CNPJ é composto por três partes de algarismos

a primeira parte é o número da inscrição

a segunda parte depois da barra( / ) é o número de filiais

e o final são os 2 digitos verificadores

Como calcular um numero de cnpj para saber se ele é 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 é 0

senao subtraímos o valor de 11 para obter o dígito

exemplo verificador é (11 - 3) o primeiro digito é 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 é 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 é valido so testar se os numeros verificadores são 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 não 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 0;

}

$j = 5;

$k = 6;

$soma1 = "";

$soma2 = "";

for ($i = 0; $i < 13; $i++)

{

$j = $j == 1 ? 9 : $j;

$k = $k == 1 ? 9 : $k;

$soma2 += ($cnpj{$i} * $k);

if ($i < 12)

{

$soma1 += ($cnpj{$i} * $j);

}

$k--;

$j--;

}

$digito1 = $soma1 % 11 < 2 ? 0 : 11 - $soma1 % 11;

$digito2 = $soma2 % 11 < 2 ? 0 : 11 - $soma2 % 11;

return (($cnpj{12} == $digito1) and ($cnpj{13} == $digito2));

}

echo Valida_CNPJ ("11.222.333/0001-81");

//retorna 1 em caso de valido e 0 ou false em caso de invalido

?>

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Beraldo, vlw graças e sua explicação mudei meu algoritmo e deu certo. Caso alguma pessoa queira usar segue abaixo:

// Verifica se  o CNPJ é verdadeiro
 function verificaCNPJ($cnpj) {
  if (strlen($cnpj) <> 14) return 0;
   $soma1 = ($cnpj[0] * 5) +
    ($cnpj[1] * 4) +
    ($cnpj[2] * 3) +
    ($cnpj[3] * 2) +
    ($cnpj[4] * 9) +
    ($cnpj[5] * 8) +
    ($cnpj[6] * 7) +
    ($cnpj[7] * 6) +
    ($cnpj[8] * 5) +
    ($cnpj[9] * 4) +
    ($cnpj[10] * 3) +
    ($cnpj[11] * 2);
   $resto = $soma1 % 11;
   $digito1 = $resto < 2 ? 0 : 11 - $resto;
   $soma2 = ($cnpj[0] * 6) +
    ($cnpj[1] * 5) +
    ($cnpj[2] * 4) +
    ($cnpj[3] * 3) +
    ($cnpj[4] * 2) +
    ($cnpj[5] * 9) +
    ($cnpj[6] * 8) +
    ($cnpj[7] * 7) +
    ($cnpj[8] * 6) +
    ($cnpj[9] * 5) +
    ($cnpj[10] * 4) +
    ($cnpj[11] * 3) +
    ($cnpj[12] * 2);
   $resto = $soma2 % 11;
   $digito2 = $resto < 2 ? 0 : 11 - $resto;
  return (($cnpj[12] == $digito1) && ($cnpj[13] == $digito2));
 }

 if (!verificaCNPJ($cnpj)){
  $erro = 1;
  echo "<script>alert('ERRO. CNPJ não é valido.'); history.back();</script>"; die;
 }
 // Fim Verifica se  o CNPJ é verdadeiro

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...