Jump to content
Fórum Script Brasil
  • 0

Funçao Para Validar CNPJ


Beraldo
 Share

Question

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 to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      151k
    • Total Posts
      649.1k
×
×
  • Create New...