7

Click here to load reader

Algoritmo Do CNPJ

Embed Size (px)

Citation preview

Page 1: Algoritmo Do CNPJ

Abril.com Notícias Entretenimento Homem INFO Downloads Reviews Busca Celular Assine Loja Grupo Abril

PORTAL AGENDA DE EVENTOS ARTICULISTAS MULTIMÍDIA FÓRUM CODE IMASTERS PRO

Javascript

Algoritmo do CNPJSegunda-feira, 16/08/2004 às 15h06, por Thiago Prado

Nesta semana vamos entender um pouco como funciona o algoritmo do CNPJ. A lógica

para saber se o CNPJ é verdadeiro, é necessário fazer um cálculo para validar os dígitos

verificadores, que são responsáveis por diferenciar um CNPJ de outro.

Como hoje em dia é muito comum as empresas utilizarem sistemas baseados em

linguagens de internet, a validação de dados se torna muito importante para que o sistema

não gere erros. Esse algoritmo que é responsável pela validação do CNPJ foi feito de

acordo com a regras do Ministério da Fazenda.

O código abaixo foi testado nos seguintes browsers:

Internet Explorer 4+

Netscape 4+

Opera 7

Mozilla 1.6

Conhecendo o cálculo do algoritmo do CNPJ

O número que compõe o CNPJ é composto por três segmentos de algarismos, sendo o

primeiro o número da inscrição propriamente dito; o segundo (após a barra) o número de

filiais, e o terceiro representados pelos últimos dois valores que são os dígitos

verificadores.

Oficialmente, o cálculo do número do CNPJ prevê também a verificação do oitavo dígito,

mas algumas empresas possuem números que ao serem validados segundo esse critério

são considerados inválidos.

Por isso, o mais seguro é você fazer a validação dos dígitos verificadores, pois assim

nenhum número será inválido e sua rotina está protegida da mesma forma, já que a regra

é única e funciona com qualquer CNPJ válido.

Fazendo o cálculo do primeiro dígito verificador

Vamos mostrar o modo de cálculo de modo prático, para isso vamos adotar um número de

CNPJ hipotético e calcularemos seus dígitos verificadores: 11.222.333/0001-XX.

Vamos começar alinhando os números que compõe o CNPJ com os algarismos

5,4,3,2,9,8,7,6,5,4,3 e 2 nesta ordem, veja:

Números

do CNPJ

1 1 2 2 2 3 3 3 0 0 0 1

Valores

definidos

para o

cálculo

5 4 3 2 9 8 7 6 5 4 3 2

Feito isso efetuaremos a multiplicação de cada uma das colunas, assim:

Números 1 1 2 2 2 3 3 3 0 0 0 1

Design Banco de Dados Mercado CMS Framework APIs Desenvolvimento Mídia e Marketing Digital Tecnologia

Por uma internet mais criativa e dinâmica

Anúncios Google Baixar Música CPF CNPJ Musicas MP3

NOTÍCIAS

11h40

Android Market deve ultrapassarApple Store em número deaplicativos este ano

10h30

Apple lança iOS 4.3 e corrigeproblemas no sistema delocalização

09h20

Ibope: Brasil possui 43 milhõesde internautas

17h40

Google lança Google Web Toolkit2.3

16h35

App stores devem movimentarUS$ 3,8 bilhões em 2011

VER MAIS NOTÍCIAS

Algoritmo do CNPJ – iMasters http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

1 de 7 5/5/2011 12:13

Page 2: Algoritmo Do CNPJ

do CNPJ

Valores

definidos

para o

cálculo

5 4 3 2 9 8 7 6 5 4 3 2

Total 5 4 6 4 18 24 21 18 0 0 0 2

Com os valores encontrados em cada uma das colunas efetuaremos o somatório, desta

forma: 5+4+6+4+18+24+21+18+0+0+0+2 e com o número obtido, nesse caso 102,

realizaremos a divisão por 11 (102/11).

Vamos considerar como quociente somente o valor inteiro, o resto da divisão será

responsável pelo cálculo do primeiro dígito verificador. Assim sendo, no nosso caso o

resto da divisão é o número 3.

Neste momento temos a seguinte regra: Caso o resto da divisão seja menor que 2, o valor

do dígito verificador passa a ser 0. Caso contrário, subtraímos o valor de 11 para obter o

dígito, que é o nosso caso. Portanto, nosso primeiro dígito verificador é (11 - 3) o número

8.

Para seguirmos com a nossa validação tomaremos o CNPJ com o primeiro dígito já

calculado para efetuarmos a validação do segundo e último dígito verificador:

11.222.333/0001-8X.

Fazendo o cálculo do segundo dígito verificador

O processo é semelhante a primeira etapa, a única mudança é a seqüência de números

que serão alinhados na tabela, como a tabela ficou maior com a presença do dígito já

calculado a seqüência agora tem que ter mais um número e ficará assim:

6,5,4,3,2,9,8,7,6,5,4,3 e 2, confira:

Números

do CNPJ

1 1 2 2 2 3 3 3 0 0 0 1 8

Valores

definidos

para o

cálculo

6 5 4 3 2 9 8 7 6 5 4 3 2

Feito isso efetuaremos a multiplicação de cada uma das colunas, assim:

Números

do CNPJ

1 1 2 2 2 3 3 3 0 0 0 1 8

Valores

definidos

para o

cálculo

6 5 4 3 2 9 8 7 6 5 4 3 2

Total 6 5 8 6 4 27 24 21 0 0 0 3 16

Como você pode notar efetuamos também, como na primeira etapa, a multiplicação das

colunas e faremos agora o somatório das resultados obtidos:

6+5+8+6+4+27+24+21+0+0+0+3+16. Com o resultado obtido, nesse caso 120,

efetuamos a divisão por 11.

Nessa divisão, assim como no cálculo anterior, vamos apenas considerar o valor inteiro do

quociente, pois o cálculo do último dígito verificador será feito com o resto da divisão

seguindo a seguinte regra: caso o resto da divisão seja menor que 2 (dois), esse valor

passa automaticamente a ser zero; caso contrário, que é o nosso caso, subtrai-se o resto

de 11 para obter o valor do último dígito verificador, acompanhe: 120/11=10 com resto 10,

11-10 dígito verificador 1 - Nosso CNPJ agora completo 11.222.333/0001-81.

Exemplo pratico da validação do CNPJ

Agora que já conhecemos como funciona o algoritmo do CNPJ, vamos partir para a

programação do nosso código, o nosso código é composto por uma função que vai

Encontre-nos no Facebook

Thiago Lucas Luana Teka Roni

Claudinéia Hugo Tomás Marcos Geraldo

iMasters

3,073 pessoas curtiram iMasters.

Curtir

Plug-in social do Facebook

CURSOS ONLINE

Criação de Loja Virtual com MagentoGerencie sua loja virtual com Magento E-commerce,

instalando módulos e templates, deixando-a com a sua

cara e necessidades.

Planos de Comunicação em Mídias DigitaisEsse curso foi desenvolvido para quem quer entender

as principais partes do processo de planejamento de

ações digitais e quais são os modelos aplicados de

planos de comunicação.

Algoritmo do CNPJ – iMasters http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

2 de 7 5/5/2011 12:13

Page 3: Algoritmo Do CNPJ

retornar um valor true ou false para que o formulário seja enviado ou não. Abaixo do

código tem uma descrição para um melhor acompanhamento e no fim da matéria um link

para o exemplo desenvolvido aqui.

1 <script language="Javascript">

2 function validaCNPJ() {

3 CNPJ = document.validacao.CNPJID.value;

4 erro = new String;

5 if (CNPJ.length < 18) erro += "É necessario preencher corretamente o número

do CNPJ! \n\n";

6 if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/")

|| (CNPJ.charAt(15) != "-")){

7 if (erro.length == 0) erro += "É necessário preencher corretamente o número

do CNPJ! \n\n";

8 }

9 //substituir os caracteres que não são números

10 if(document.layers && parseInt(navigator.appVersion) == 4){

11 x = CNPJ.substring(0,2);

12 x += CNPJ. substring (3,6);

13 x += CNPJ. substring (7,10);

14 x += CNPJ. substring (11,15);

15 x += CNPJ. substring (16,18);

16 CNPJ = x;

17 } else {

18 CNPJ = CNPJ. replace (".","");

19 CNPJ = CNPJ. replace (".","");

20 CNPJ = CNPJ. replace ("-","");

21 CNPJ = CNPJ. replace ("/","");

22 }

23 var nonNumbers = /\D/;

24 if (nonNumbers.test(CNPJ)) erro += "A verificação de CNPJ suporta apenas

números! \n\n";

25 var a = [];

26 var b = new Number;

27 var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];

28 for (i=0; i<12; i++){

29 a[i] = CNPJ.charAt(i);

30 b += a[i] * c[i+1];

31 }

32 if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }

33 b = 0;

34 for (y=0; y<13; y++) {

35 b += (a[y] * c[y]);

36 }

37 if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }

38 if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){

39 erro +="Dígito verificador com problema!";

40 }

41 if (erro.length > 0){

42 alert(erro);

43 return false;

44 } else {

45 alert("CNPJ valido!");

46 }

47 return true;

48 }

49 </script>

Linha 3 – Declaração da variável CNPJ responsável por recuperar o valor do campo que

contem o número do CNPJ.

Linha 5 – Verificação se o tamanho da variável é menor que 18. Se retonar true a variável

erro vai ser Verificação com um texto referente ao erro.

Linha 6 – Verificação se o CNPJ foi preenchido corretamente com os números e dígitos

extras. Se retornar true uma nova verificacao sera feita para saber se o tamanho da

Efeitos digitais com Photoshop e IllustratorO curso mostra de forma objetiva uma gama de

possibilidades nos softwares de edição de imagens

mais utilizados no mundo: Photoshop & llustrator CS4.

Celular 3 Chips R$ 99,90

2 Câmeras, Tv, FM, MP3, Bluetooth Frete Grátispara todo BrasilCompreDaChina.com/SuperOferta

Programa Controle Estoque

Programa totalmente online de controle deestoquewww.egestor.com.br

Servidor Asp?

Hospede seu site com o UOL HOST. Planos porR$12,90*. Confira aqui!www.UOLHOST.com.br

Peixe Urbano: Cadastre-seCadastre-se em 5 Seg e Receba Todo DiaOfertas de 50-90% de Desconto!PeixeUrbano.com.br/Cadastre-se

Algoritmo do CNPJ – iMasters http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

3 de 7 5/5/2011 12:13

Page 4: Algoritmo Do CNPJ

variável erro é igual a 0, se retonar true a variável erro vai ser incrementada com um texto

referente ao erro.

Obs.: A verificação se se o tamanho da variável erro é igual a 0 é para não repetir a

mesma mensagem de erro.

Linha 10 – Verificação se o navegador é o Netscape 4. Se retornar true, a variável x ficará

responsável por recuperar os valores das partes da variável CNPJ. O propósito disso

seria retirar os caracteres extras como “.”, “/” e “-”. Ao final, a mesma variável CNPJ

recebe o valor de x, assim ficando apenas com números.

Se o navegador não for o Netscape 4, o método replace sera utilizado para substituir os

caracteres extras por espaço vazio, assim ficando apenas números na variável CNPJ.

Linha 23 – Declaração da variável nonNumbers utilizando expressão regular.

Linha 24 – Verificação se a variável CNPJ contém algum caractere que não seja número.

Se retonar true, a variável erro vai ser incrementada com um texto referente ao erro.

Linha 25 – Declaração da matriz a;

Linha 26 – Declaração da variável b como número;

Linha 27 – Declaração da variável c como matriz copulada com os valores a serem

multiplicados pelos números do CNPJ para a validação dos dígitos verificadores.

Linha 28 – Loop que vai ser executado 12 vezes.

Linha 29 – A matriz a indexada do valor da variável do loop recebe o caractere da variável

CNPJ indexada do valor da variável do loop.

Linha 30 – A variável b é incrementada com o valor da matriz a indexada do valor da

variável do loop multiplicada pelo valor da matriz c indexada do valor da variável do loop

acrescida de 1.

Linha 32 – Verificação se a variável x (que tem o valor do resto da divisão de b por 11) é

menor que 2. Se retornar true, a matriz a indexada de 12 recebe o valor de 0. Se retornar

false a matriz a indexada de 12 recebe o valor de 11 menos o valor de x.

Linha 33 – A variável b é reiniciada.

Linha 34 – Loop que vai ser executado 13 vezes.

Linha 35 – A variável b é incrementada com o valor da matriz a indexada do valor da

variável do loop multiplicada pelo valor da matriz c indexada do valor da variável do loop.

Linha 37 – Verificação se a variável x (que tem o valor do resto da divisão de b por 11) é

menor que 2. Se retornar true, a matriz a indexada de 13 recebe o valor de 0. Se retornar

false, a matriz a indexada de 13 recebe o valor de 11 menos o valor de x.

Linha 38 – Verificação se o caractere 12 da variável CNPJ é diferente da matriz a

indexada de 12, ou, se o caractere 13 da variável CNPJ é diferente da matriz a indexada

de 13. Se retonar true, a variável erro vai ser incrementada com um texto referente ao

erro.

Linha 41 – Verificação se o tamanho da variável erro é maior que 0. Se retornar true, uma

caixa de alerta surge a mesagem do(s) erro(s) gerados e a função retorna false. Se

retornar false, uma caixa de alerta surge com a mensagem “CNPJ válido!”.

Linha 47 – Se tudo ocorreu bem a função vai retornar true e o formulário vai ser enviado.

Finalizando o código

Como a função validaCNPJ pronta, vamos partir para a parte HTML com a criação do

formulário que suportara o caixa de texto para digitar o número do CNPJ. O evento

onSubmit do formulário é usado para retornar um valor para verificar se o mesmo vai ser

enviado.

1 <form action="validaCNPJ.htm" name="validacao" onSubmit="return validaCNPJ()">

2 <input type="text" name="CNPJID" id="CNPJID" size="25" maxlength="18">

3 <input name="Submit" type="submit" value="enviar">

4 </form>

5 Digite o número do CNPJ com os caracteres ".", "/" ou "-".

6 Ex. 03.335.456/0001-45

Com essa explicação, você poderá montar sua própria rotina ou utilizar a que criamos.

Abaixo segue o link para o exemplo criado aqui.

Algoritmo do CNPJ – iMasters http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

4 de 7 5/5/2011 12:13

Page 5: Algoritmo Do CNPJ

COMENTE TAMBÉM

Confira o exemplo do código: validaCNPJ.htm.

Créditos: Parte deste artigo foi retirado do site Clube da Informática, com alterações e

informações adicionadas por mim.

Valeu galera e até a próxima semana!

Thiago Prado Atua profissionalmente com desenvolvimento de projetos web

em Flash, PHP e Java.

Página do autor Email

12 COMENTÁRIOS

Donato

Thiago, como sempre acompanho seus artigos de Javascript, pois são muito

esclarecedores para mim, iniciante em DHtml. Peço a você, se possível, que faça um artigo

sobre expressões regulares, mostrando qual a sua funcionalidade (pois não tenho

informação nenhuma sobre RE). Não tenho noção sobre o uso de expressão regular e de

sua importância. Se puder atender o pedido fico grato.

donato.

Há 6 anos · Responder

Thiago Prado

Tenho muito prazer em escrever colunas sobre que os leitores necessitam...

Há 6 anos · Responder

Renato Amadeu

Thiago,

Preciso de fazer um sistema parecido com o do imasters, sendo que ao inves de ao clicar

em imprimir matéria ele abrir uma janela com formatação e tal queria que imprimisse direto

pra impressora sem abrir janela alguma entende?

Há 6 anos · Responder

Julian Fernando

Puxa, mais uma vez vocês da iMaster arrasaram este algorítmo em javascript é bastante

esclarecedor . O thiago Prado mais uma vez descreveu com detalhes e clareza um bom

algorítmo que valida CNPJ, e o melhor em JavaScript.

Parabéns Thiago

Há 6 anos · Responder

Valfrid

Essa rotina eu já tenho a muito tempo porém, a própria receita tem divulgado um CNPJ de

15 dígitos (19 com a máscara) e essa rotina, como a minha, só valida CNPJs de 14 dígitos!!

Alguém sabe como fazer?

Há 6 anos · Responder

Wellington Guedes

Thiago, grande matéria, bastante esclarecedora, parabéns pelo excelente trabalho.

Sou consultar da área de Imposto de Renda da IOB-Thomsom, este trabalho será de

utilidade inestimável para min.

Na verdade faltava um trabalho que abrangesse esse assunto.

Grande abraço.

Há 6 anos · Responder

Plinio Marcos Cruz

Agradeço os créditos prezado Thiago. Convido vocêa escrever um artigo para o Clube -

http://www.clubedainformatica.com.br

Há 6 anos · Responder

ricardo silveira

Artigo muito bom! parabéns, só faltou colocar um if para se o cnpj for 00.000.000/0000-00

Há 4 anos · Responder

Alberto Tarastchuk

Prezado Thiago

Algoritmo do CNPJ – iMasters http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

5 de 7 5/5/2011 12:13

Page 6: Algoritmo Do CNPJ

Parabéns pela matéria, vc teria esse código de validação de CNPJ sem precisar colocar os

caracteres extras como ?.?, ?/? e ?-?. Fico agradecido desde já.

[email protected]

Há 3 anos · Responder

Junio Kenedy

Prezado Thiago,

Poderia me explicar o porque da divisão por 11 do valor total da somatória?

Há 2 anos · Responder

Victor Silva

Dá uma olhada nesse framework, www.lindbergframework.org

Com ele você pode fazer qualquer tipo de validação, pode criar as suas próprias, mesclar

várias validações para compor uma outra validação e mais, o framework lhe dá suporte a

annotations também o que faz com que vc possa configurar suas validações em seus beans

utilizando annotations. Mesmo as validações que o framework já oferece como CNPJ, CPF,

DATAS, VALORES, COMPARAÇÕES DE OBJETOS, ETC... bem como as suas validações

criadas tb podem ser usadas com as annotations do framework.

Esse framework trabalha com o spring (mas não lhe obriga a usa-lo tb) criando um contexto

de beans de validações. O framework é extensível e seu uso customizável.

VAle a pena dá uma olhada.

O site mais uma vez: www.lindbergframework.org

FLw

Há 1 ano · Responder

Rudinei

Parabens,

Muito bom seus comentários, auxiliam muito na compreensão desta lógica.

Abraço

Há 11 meses · Responder

QUAL A SUA OPINIÃO?

PARCEIROS

Sobre o iMasters

Política de privacidade

Algoritmo do CNPJ – iMasters http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

6 de 7 5/5/2011 12:13

Page 7: Algoritmo Do CNPJ

© 2001 iMasters FFPA Informática Ltda

Todos os direitos reservados.

Anuncie

Fale conosco

Algoritmo do CNPJ – iMasters http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

7 de 7 5/5/2011 12:13