Vous êtes sur la page 1sur 7

Algoritmo do CNPJ iMasters

http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

Abril.com

Notcias

Entretenimento

Homem

INFO

Downloads

Reviews

Busca

Celular

Assine

Loja

Grupo Abril

PORTAL

AGENDA DE EVENTOS

ARTICULISTAS

MULTIMDIA

FRUM

CODE

IMASTERS PRO

Por uma internet mais criativa e dinmica

Design

Banco de Dados

Mercado

CMS

Framework

APIs

Desenvolvimento

Mdia e Marketing Digital

Tecnologia

Javascript

Algoritmo do CNPJ
Segunda-feira, 16/08/2004 s 15h06, por Thiago Prado
Anncios Google Baixar Msica CPF CNPJ Musicas MP3

Nesta semana vamos entender um pouco como funciona o algoritmo do CNPJ. A lgica para saber se o CNPJ verdadeiro, necessrio fazer um clculo para validar os dgitos verificadores, que so responsveis por diferenciar um CNPJ de outro. Como hoje em dia muito comum as empresas utilizarem sistemas baseados em linguagens de internet, a validao de dados se torna muito importante para que o sistema no gere erros. Esse algoritmo que responsvel pela validao do CNPJ foi feito de acordo com a regras do Ministrio da Fazenda. O cdigo abaixo foi testado nos seguintes browsers: Internet Explorer 4+ Netscape 4+ Opera 7 Mozilla 1.6 Conhecendo o clculo do algoritmo do CNPJ O nmero que compe o CNPJ composto por trs segmentos de algarismos, sendo o primeiro o nmero da inscrio propriamente dito; o segundo (aps a barra) o nmero de filiais, e o terceiro representados pelos ltimos dois valores que so os dgitos verificadores. Oficialmente, o clculo do nmero do CNPJ prev tambm a verificao do oitavo dgito, mas algumas empresas possuem nmeros que ao serem validados segundo esse critrio so considerados invlidos. Por isso, o mais seguro voc fazer a validao dos dgitos verificadores, pois assim nenhum nmero ser invlido e sua rotina est protegida da mesma forma, j que a regra nica e funciona com qualquer CNPJ vlido. Fazendo o clculo do primeiro dgito verificador Vamos mostrar o modo de clculo de modo prtico, para isso vamos adotar um nmero de CNPJ hipottico e calcularemos seus dgitos verificadores: 11.222.333/0001-XX. Vamos comear alinhando os nmeros que compe o CNPJ com os algarismos 5,4,3,2,9,8,7,6,5,4,3 e 2 nesta ordem, veja: Nmeros do CNPJ Valores definidos para o clculo Feito isso efetuaremos a multiplicao de cada uma das colunas, assim: Nmeros 1 1 2 2 2 3 3 3 0 0 0 1 5 4 3 2 9 8 7 6 5 4 3 2 1 1 2 2 2 3 3 3 0 0 0 1
NOTCIAS
11h40

Android Market deve ultrapassar Apple Store em nmero de aplicativos este ano
10h30

Apple lana iOS 4.3 e corrige problemas no sistema de localizao


09h20

Ibope: Brasil possui 43 milhes de internautas


17h40

Google lana Google Web Toolkit 2.3


16h35

App stores devem movimentar US$ 3,8 bilhes em 2011


VER MAIS NOTCIAS

1 de 7

5/5/2011 12:13

Algoritmo do CNPJ iMasters

http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

do CNPJ
Encontre-nos no Facebook

Valores definidos para o clculo Total

iMasters
Curtir 3,073 pessoas curtiram iMasters.

18

24

21

18

2
Thiago Lucas Luana Teka Roni

Com os valores encontrados em cada uma das colunas efetuaremos o somatrio, desta forma: 5+4+6+4+18+24+21+18+0+0+0+2 e com o nmero obtido, nesse caso 102, realizaremos a diviso por 11 (102/11).
Claudinia Hugo Toms Marcos Geraldo

Vamos considerar como quociente somente o valor inteiro, o resto da diviso ser responsvel pelo clculo do primeiro dgito verificador. Assim sendo, no nosso caso o resto da diviso o nmero 3. Neste momento temos a seguinte regra: Caso o resto da diviso seja menor que 2, o valor do dgito verificador passa a ser 0. Caso contrrio, subtramos o valor de 11 para obter o dgito, que o nosso caso. Portanto, nosso primeiro dgito verificador (11 - 3) o nmero 8. Para seguirmos com a nossa validao tomaremos o CNPJ com o primeiro dgito j calculado para efetuarmos a validao do segundo e ltimo dgito verificador: 11.222.333/0001-8X. Fazendo o clculo do segundo dgito verificador O processo semelhante a primeira etapa, a nica mudana a seqncia de nmeros que sero alinhados na tabela, como a tabela ficou maior com a presena do dgito j calculado a seqncia agora tem que ter mais um nmero e ficar assim: 6,5,4,3,2,9,8,7,6,5,4,3 e 2, confira: Nmeros do CNPJ Valores definidos para o clculo Feito isso efetuaremos a multiplicao de cada uma das colunas, assim: Nmeros do CNPJ Valores definidos para o clculo Total 6 5 8 6 4 27 24 21 0 0 0 3 16 1 1 2 2 2 3 3 3 0 0 0 1 8 1 1 2 2 2 3 3 3 0 0 0 1 8

Plug-in social do Facebook

CURSOS ONLINE

Criao de Loja Virtual com Magento


Gerencie sua loja virtual com Magento E-commerce, instalando mdulos e templates, deixando-a com a sua cara e necessidades.

Como voc pode notar efetuamos tambm, como na primeira etapa, a multiplicao das colunas e faremos agora o somatrio 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 diviso por 11. Nessa diviso, assim como no clculo anterior, vamos apenas considerar o valor inteiro do quociente, pois o clculo do ltimo dgito verificador ser feito com o resto da diviso seguindo a seguinte regra: caso o resto da diviso seja menor que 2 (dois), esse valor passa automaticamente a ser zero; caso contrrio, que o nosso caso, subtrai-se o resto de 11 para obter o valor do ltimo dgito verificador, acompanhe: 120/11=10 com resto 10, 11-10 dgito verificador 1 - Nosso CNPJ agora completo 11.222.333/0001-81. Exemplo pratico da validao do CNPJ Agora que j conhecemos como funciona o algoritmo do CNPJ, vamos partir para a programao do nosso cdigo, o nosso cdigo composto por uma funo que vai
Planos de Comunicao em Mdias Digitais
Esse curso foi desenvolvido para quem quer entender as principais partes do processo de planejamento de aes digitais e quais so os modelos aplicados de planos de comunicao.

2 de 7

5/5/2011 12:13

Algoritmo do CNPJ iMasters

http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

retornar um valor true ou false para que o formulrio seja enviado ou no. Abaixo do cdigo tem uma descrio para um melhor acompanhamento e no fim da matria um link para o exemplo desenvolvido aqui. 1 <script language="Javascript"> 2 3 4 function validaCNPJ() { CNPJ = document.validacao.CNPJID.value; erro = new String;

Efeitos digitais com Photoshop e Illustrator


O curso mostra de forma objetiva uma gama de possibilidades nos softwares de edio de imagens mais utilizados no mundo: Photoshop & llustrator CS4.

Celular 3 Chips R$ 99,90 2 Cmeras, Tv, FM, MP3, Bluetooth Frete Grtis para todo Brasil
CompreDaChina.com/SuperOferta

5 if (CNPJ.length < 18) erro += " necessario preencher corretamente o nmero do CNPJ! \n\n"; 6 if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-")){ 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 } var nonNumbers = /\D/; if (erro.length == 0) erro += " necessrio preencher corretamente o nmero } //substituir os caracteres que no so nmeros if(document.layers && parseInt(navigator.appVersion) == 4){ x = CNPJ.substring(0,2); x += CNPJ. substring (3,6); x += CNPJ. substring (7,10); x += CNPJ. substring (11,15); x += CNPJ. substring (16,18); CNPJ = x; } else { CNPJ = CNPJ. replace (".",""); CNPJ = CNPJ. replace (".",""); CNPJ = CNPJ. replace ("-",""); CNPJ = CNPJ. replace ("/",""); do CNPJ! \n\n";

Programa Controle Estoque Programa totalmente online de controle de estoque


www.egestor.com.br

Servidor Asp? Hospede seu site com o UOL HOST. Planos por R$12,90*. Confira aqui!
www.UOLHOST.com.br

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

24 if (nonNumbers.test(CNPJ)) erro += "A verificao de CNPJ suporta apenas nmeros! \n\n"; 25 26 27 28 29 30 31 } 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 } } return true; } if (erro.length > 0){ alert(erro); return false; } else { alert("CNPJ valido!"); } if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; } if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){ erro +="Dgito verificador com problema!"; if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x } b = 0; for (y=0; y<13; y++) { b += (a[y] * c[y]); var a = []; var b = new Number; var c = [6,5,4,3,2,9,8,7,6,5,4,3,2]; for (i=0; i<12; i++){ a[i] = CNPJ.charAt(i); b += a[i] * c[i+1];

49 </script> Linha 3 Declarao da varivel CNPJ responsvel por recuperar o valor do campo que contem o nmero do CNPJ. Linha 5 Verificao se o tamanho da varivel menor que 18. Se retonar true a varivel erro vai ser Verificao com um texto referente ao erro. Linha 6 Verificao se o CNPJ foi preenchido corretamente com os nmeros e dgitos extras. Se retornar true uma nova verificacao sera feita para saber se o tamanho da

3 de 7

5/5/2011 12:13

Algoritmo do CNPJ iMasters

http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

varivel erro igual a 0, se retonar true a varivel erro vai ser incrementada com um texto referente ao erro. Obs.: A verificao se se o tamanho da varivel erro igual a 0 para no repetir a mesma mensagem de erro. Linha 10 Verificao se o navegador o Netscape 4. Se retornar true, a varivel x ficar responsvel por recuperar os valores das partes da varivel CNPJ. O propsito disso seria retirar os caracteres extras como ., / e -. Ao final, a mesma varivel CNPJ recebe o valor de x, assim ficando apenas com nmeros. Se o navegador no for o Netscape 4, o mtodo replace sera utilizado para substituir os caracteres extras por espao vazio, assim ficando apenas nmeros na varivel CNPJ. Linha 23 Declarao da varivel nonNumbers utilizando expresso regular. Linha 24 Verificao se a varivel CNPJ contm algum caractere que no seja nmero. Se retonar true, a varivel erro vai ser incrementada com um texto referente ao erro. Linha 25 Declarao da matriz a; Linha 26 Declarao da varivel b como nmero; Linha 27 Declarao da varivel c como matriz copulada com os valores a serem multiplicados pelos nmeros do CNPJ para a validao dos dgitos verificadores. Linha 28 Loop que vai ser executado 12 vezes. Linha 29 A matriz a indexada do valor da varivel do loop recebe o caractere da varivel CNPJ indexada do valor da varivel do loop. Linha 30 A varivel b incrementada com o valor da matriz a indexada do valor da varivel do loop multiplicada pelo valor da matriz c indexada do valor da varivel do loop acrescida de 1. Linha 32 Verificao se a varivel x (que tem o valor do resto da diviso 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 varivel b reiniciada. Linha 34 Loop que vai ser executado 13 vezes. Linha 35 A varivel b incrementada com o valor da matriz a indexada do valor da varivel do loop multiplicada pelo valor da matriz c indexada do valor da varivel do loop. Linha 37 Verificao se a varivel x (que tem o valor do resto da diviso 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 Verificao se o caractere 12 da varivel CNPJ diferente da matriz a indexada de 12, ou, se o caractere 13 da varivel CNPJ diferente da matriz a indexada de 13. Se retonar true, a varivel erro vai ser incrementada com um texto referente ao erro. Linha 41 Verificao se o tamanho da varivel erro maior que 0. Se retornar true, uma caixa de alerta surge a mesagem do(s) erro(s) gerados e a funo retorna false. Se retornar false, uma caixa de alerta surge com a mensagem CNPJ vlido!. Linha 47 Se tudo ocorreu bem a funo vai retornar true e o formulrio vai ser enviado. Finalizando o cdigo Como a funo validaCNPJ pronta, vamos partir para a parte HTML com a criao do formulrio que suportara o caixa de texto para digitar o nmero do CNPJ. O evento onSubmit do formulrio usado para retornar um valor para verificar se o mesmo vai ser enviado. 1 <form action="validaCNPJ.htm" name="validacao" onSubmit="return validaCNPJ()"> 2 3 <input type="text" name="CNPJID" id="CNPJID" size="25" maxlength="18"> <input name="Submit" type="submit" value="enviar">

4 </form> 5 Digite o nmero do CNPJ com os caracteres ".", "/" ou "-". 6 Ex. 03.335.456/0001-45 Com essa explicao, voc poder montar sua prpria rotina ou utilizar a que criamos. Abaixo segue o link para o exemplo criado aqui.

4 de 7

5/5/2011 12:13

Algoritmo do CNPJ iMasters

http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

Confira o exemplo do cdigo: validaCNPJ.htm. Crditos: Parte deste artigo foi retirado do site Clube da Informtica, com alteraes e informaes adicionadas por mim. Valeu galera e at a prxima semana!

Thiago Prado Atua profissionalmente com desenvolvimento de projetos web em Flash, PHP e Java. Pgina do autor Email

12 COMENTRIOS

COMENTE TAMBM

Donato Thiago, como sempre acompanho seus artigos de Javascript, pois so muito esclarecedores para mim, iniciante em DHtml. Peo a voc, se possvel, que faa um artigo sobre expresses regulares, mostrando qual a sua funcionalidade (pois no tenho informao nenhuma sobre RE). No tenho noo sobre o uso de expresso regular e de sua importncia. 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 matria ele abrir uma janela com formatao e tal queria que imprimisse direto pra impressora sem abrir janela alguma entende?
H 6 anos Responder

Julian Fernando Puxa, mais uma vez vocs da iMaster arrasaram este algortmo em javascript bastante esclarecedor . O thiago Prado mais uma vez descreveu com detalhes e clareza um bom algortmo que valida CNPJ, e o melhor em JavaScript. Parabns Thiago
H 6 anos Responder

Valfrid Essa rotina eu j tenho a muito tempo porm, a prpria receita tem divulgado um CNPJ de 15 dgitos (19 com a mscara) e essa rotina, como a minha, s valida CNPJs de 14 dgitos!! Algum sabe como fazer?
H 6 anos Responder

Wellington Guedes Thiago, grande matria, bastante esclarecedora, parabns pelo excelente trabalho. Sou consultar da rea de Imposto de Renda da IOB-Thomsom, este trabalho ser de utilidade inestimvel para min. Na verdade faltava um trabalho que abrangesse esse assunto. Grande abrao.
H 6 anos Responder

Plinio Marcos Cruz Agradeo os crditos prezado Thiago. Convido voca escrever um artigo para o Clube http://www.clubedainformatica.com.br
H 6 anos Responder

ricardo silveira Artigo muito bom! parabns, s faltou colocar um if para se o cnpj for 00.000.000/0000-00
H 4 anos Responder

Alberto Tarastchuk Prezado Thiago

5 de 7

5/5/2011 12:13

Algoritmo do CNPJ iMasters

http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

Parabns pela matria, vc teria esse cdigo de validao de CNPJ sem precisar colocar os caracteres extras como ?.?, ?/? e ?-?. Fico agradecido desde j. alberto.tarastchuk@gmail.com
H 3 anos Responder

Junio Kenedy Prezado Thiago, Poderia me explicar o porque da diviso por 11 do valor total da somatria?
H 2 anos Responder

Victor Silva D uma olhada nesse framework, www.lindbergframework.org Com ele voc pode fazer qualquer tipo de validao, pode criar as suas prprias, mesclar vrias validaes para compor uma outra validao e mais, o framework lhe d suporte a annotations tambm o que faz com que vc possa configurar suas validaes em seus beans utilizando annotations. Mesmo as validaes que o framework j oferece como CNPJ, CPF, DATAS, VALORES, COMPARAES DE OBJETOS, ETC... bem como as suas validaes criadas tb podem ser usadas com as annotations do framework. Esse framework trabalha com o spring (mas no lhe obriga a usa-lo tb) criando um contexto de beans de validaes. O framework extensvel e seu uso customizvel. VAle a pena d uma olhada. O site mais uma vez: www.lindbergframework.org FLw
H 1 ano Responder

Rudinei Parabens, Muito bom seus comentrios, auxiliam muito na compreenso desta lgica. Abrao
H 11 meses Responder

QUAL A SUA OPINIO?

PARCEIROS

Sobre o iMasters Poltica de privacidade

6 de 7

5/5/2011 12:13

Algoritmo do CNPJ iMasters

http://imasters.com.br/artigo/2451/javascript/algoritmo-do-cnpj

2001 iMasters FFPA Informtica Ltda Todos os direitos reservados.

Anuncie Fale conosco

7 de 7

5/5/2011 12:13