Código para validar CPF e CNPJ otimizado
Publicado por Carlos Caldas 30/04/2007
[ Hits: 59.205 ]
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")); } }
Script para cálculo de distâncias na superfície terrestre utilizando coordenadas geográficas
Determinante de uma matriz de ordem 3.
Diferenca entre meses - um método de busca simples
Planilha de cálculo para multa judicial
Calcula as chances de se ganhar na mega-sena.
Desktop Linux ganha fôlego enquanto distros refinam experiência e segurança
Wayland em alta, IA em debate e novos ventos para distros e devices
Qt 6.10 e Python 3.14 puxam o ritmo do software livre nesta quarta
Atualizações de Apps, Desktop e Kernel agitam o ecossistema Linux nesta terça-feira
Como mudar o nome de dispositivos Bluetooth via linha de comando
Adicionando o repositório backports no Debian 13 Trixie
Erro ao enviar notificação por e-mail (1)
Primeiras impressões do Debian 13 (26)
Não tenho som no meu Kali linux (1)
Erro ao fazer remaster usando Penguin eggs (2)
Meu Amigo não consegue entrar em meu mundo, via tailscale, hamachi e z... (1)