Este artigo apresenta como é realizada a validação de um número de CNPJ que é o documento de identificação do contribuinte Pessoa Jurídica perante a Receita Federal.
O CNPJ é um número formado por 14 dígitos dos quais os dois últimos são chamados de dígitos verificadores (DV). Cada DV é calculado com base nos dígitos anteriores e juntos servem para validar o número do CNPJ como um todo. Assim, torna-se importante quando um número de CNPJ é digitado pelo usuário final em uma aplicação utilizar o método isCNPJ(), implementado no pacote "meuPacote" apresentado na Listagem 1, para verificar se o número informado está correto evitando, por exemplo, o cadastro de CNPJs inválidos.
Para exemplificar o algoritmo de verificação do CNPJ será utilizado como exemplo o CNPJ número14.572.457.0001-85.
| O cálculo dos DVs é executado em duas etapas usando para isto o módulo de divisão 11 (módulo de divisão é a parte inteira do resultado de uma divisão): | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Para calcular o 1º dígito verificador: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| a) Cada um dos doze primeiros números do CNPJ, a partir do 12º número até o 1º, é multiplicado por um peso que começa de 2 e que vai sendo incrementado de 1 a cada passo, somando-se as parcelas calculadas. Sempre que o peso atingir o valor 10 ele deve novamente receber o valor inicial 2: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| b) calcula-se o dígito através da seguinte expressão: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 179 % 11 = 3 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| obs. se o resto da divisão (operador %) calculado for 0 ou 1, o dígito verificador será 0; nos outros casos, o dígito verificador é definido pela expressão: 11 - 3 = 8 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Para calcular o 2º dígito verificador: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| a) Cada um dos treze primeiros números do CNPJ, a partir do primeiro DV (13º número) até o 1º, é multiplicado por um peso que começa de 2 e que vai sendo incrementado de 1 a cada passo, somando-se as parcelas calculadas. Sempre que o peso atingir o valor 10 ele deve novamente receber o valor inicial 2: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| b) calcula-se o dígito através da seguinte expressão: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 215 % 11 = 6 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| obs. se o resto da divisão (operador %) calculado for 0 ou 1, o dígito verificador será 0; nos outros casos, o dígito verificador é definido pela expressão: 11 - 6 = 5 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Desenvolvendo a Aplicação Java
Criar um novo projeto no ambiente de desenvolvimento NetBeans através da opção do menu "Arquivo|Novo Projeto..." e realizar os dois passos descritos a seguir:
1º Passo:
Criar um pacote Java e identificá-lo com o nome "meuPacote". No pacote criado implementar a classe Java ValidaCNPJ, mostrada na Listagem 1, com os métodos:
a) isCNPJ()- retorna um valor booleano que indica se o número de CNPJ é válido ou inválido;
b) imprimeCNPJ()- retorna o CNPJ formatado na máscara: 99.999.999.9999-99.
| Listagem 1. Classe ValidaCNPJ do pacote "meuPacote". |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | package meuPacote;import java.util.InputMismatchException;public class ValidaCNPJ { public static boolean isCNPJ(String CNPJ) {// considera-se erro CNPJ's formados por uma sequencia de numeros iguais if (CNPJ.equals("00000000000000") || CNPJ.equals("11111111111111") || CNPJ.equals("22222222222222") || CNPJ.equals("33333333333333") || CNPJ.equals("44444444444444") || CNPJ.equals("55555555555555") || CNPJ.equals("66666666666666") || CNPJ.equals("77777777777777") || CNPJ.equals("88888888888888") || CNPJ.equals("99999999999999") || (CNPJ.length() != 14)) return(false); char dig13, dig14; int sm, i, r, num, peso;// "try" - protege o código para eventuais erros de conversao de tipo (int) try {// Calculo do 1o. Digito Verificador sm = 0; peso = 2; for (i=11; i>=0; i--) {// converte o i-ésimo caractere do CNPJ em um número:// por exemplo, transforma o caractere '0' no inteiro 0// (48 eh a posição de '0' na tabela ASCII) num = (int)(CNPJ.charAt(i) - 48); sm = sm + (num * peso); peso = peso + 1; if (peso == 10) peso = 2; } r = sm % 11; if ((r == 0) || (r == 1)) dig13 = '0'; else dig13 = (char)((11-r) + 48);// Calculo do 2o. Digito Verificador sm = 0; peso = 2; for (i=12; i>=0; i--) { num = (int)(CNPJ.charAt(i)- 48); sm = sm + (num * peso); peso = peso + 1; if (peso == 10) peso = 2; } r = sm % 11; if ((r == 0) || (r == 1)) dig14 = '0'; else dig14 = (char)((11-r) + 48);// Verifica se os dígitos calculados conferem com os dígitos informados. if ((dig13 == CNPJ.charAt(12)) && (dig14 == CNPJ.charAt(13))) return(true); else return(false); } catch (InputMismatchException erro) { return(false); } } public static String imprimeCNPJ(String CNPJ) {// máscara do CNPJ: 99.999.999.9999-99 return(CNPJ.substring(0, 2) + "." + CNPJ.substring(2, 5) + "." + CNPJ.substring(5, 8) + "." + CNPJ.substring(8, 12) + "-" + CNPJ.substring(12, 14)); }} |
Na implementação de uma classe ou de um conjunto de classes em um pacote Java o código fonte deve ser iniciado com a diretiva package, seguida do nome do pacote (meuPacote). Um pacote ou package em Java nada mais é do que um conjunto de classes (framework). Usualmente, são colocadas em um package classes relacionadas, construídas com um propósito comum; assim, sob certos aspectos, os packages reproduzem a ideia das bibliotecas de código (libraries e unit's) de outras linguagens de programação.
Outro aspecto destacável da programação foi a utilização da estrutura de controle de erros "try– catch" que irá proteger o código para eventuais erros de conversão de tipo feita pelo operador de coerção (int).
2º Passo:
Implementar a classe principal ExemploCNPJ mostrada na Listagem 2.
| Listagem 2. Classe principal da aplicação. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import java.util.Scanner;// importanto a classe "ValidaCNPJ" do pacote "meuPacote"import meuPacote.ValidaCNPJ;public class ExemploCNPJ { public static void main(String[] args) { Scanner ler = new Scanner(System.in); String CNPJ; System.out.printf("Informe um CNPJ: "); CNPJ = ler.next(); System.out.printf("\nResultado: ");// usando os métodos isCNPJ() e imprimeCNPJ() da classe "ValidaCNPJ" if (ValidaCNPJ.isCNPJ(CNPJ) == true) System.out.printf("%s\n", ValidaCNPJ.imprimeCNPJ(CNPJ)); else System.out.printf("Erro, CNPJ inválido !!!\n"); }} |
O que são String em Java: Métodos da Classe String: String em Java - Parte 2.
Veja também: Validando o CPF em uma Aplicação Java.
| Testando a execução da aplicação da Listagem 2: | |
1. CNPJ 44.444.444.4444-44 é inválido:![]() | 2. CNPJ é um número formado por 14 dígitos:![]() |
3. Existem caracteres alfabéticos no CNPJ:![]() | 4. CNPJ informado está correto (ou válido):![]() |
Obrigado e um abraço.
Fonte:DevMedia





Nenhum comentário:
Postar um comentário