Código para validar CPF e CNPJ otimizado
Publicado por Carlos Caldas 30/04/2007
[ Hits: 58.692 ]
Homepage: www.ccaldas.com.br
Esse código difere da maioria dos códigos encontrados na internet.
Identifiquei um padrão no cálculo que evita um amontoado de IF´s e torna o código mais elegante.
Foi possivel criar as duas funções com aproximadamente 30 linhas.
public class CNP { private static final int[] pesoCPF = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2}; private static final int[] pesoCNPJ = {6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2}; private static int calcularDigito(String str, int[] peso) { int soma = 0; for (int indice=str.length()-1, digito; indice >= 0; indice-- ) { digito = Integer.parseInt(str.substring(indice,indice+1)); soma += digito*peso[peso.length-str.length()+indice]; } soma = 11 - soma % 11; return soma > 9 ? 0 : soma; } public static boolean isValidCPF(String cpf) { if ((cpf==null) || (cpf.length()!=11)) return false; Integer digito1 = calcularDigito(cpf.substring(0,9), pesoCPF); Integer digito2 = calcularDigito(cpf.substring(0,9) + digito1, pesoCPF); return cpf.equals(cpf.substring(0,9) + digito1.toString() + digito2.toString()); } public static boolean isValidCNPJ(String cnpj) { if ((cnpj==null)||(cnpj.length()!=14)) return false; Integer digito1 = calcularDigito(cnpj.substring(0,12), pesoCNPJ); Integer digito2 = calcularDigito(cnpj.substring(0,12) + digito1, pesoCNPJ); return cnpj.equals(cnpj.substring(0,12) + digito1.toString() + digito2.toString()); } public static void main(String[] args) { System.out.printf("CPF Valido:%s \n", CNP.isValidCPF("01115375502")); System.out.printf("CNPJ Valido:%s \n", CNP.isValidCNPJ("13642634756318")); } }
Avaliação de expressões matemáticas
Ordenação de vetores com letras do alfabeto
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Excluir banco de dados no xampp (1)
phpmyadmin não abre no xampp (2)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta