Código para validar CPF e CNPJ otimizado
Publicado por Carlos Caldas 30/04/2007
[ Hits: 59.442 ]
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"));
}
}
Determinante de uma matriz de ordem 3.
Exemplo de sobrecarga de métodos
Planilha de cálculo para multa judicial
Imagem de Background atravez de um JDesktopPane
Algoritmo para Gerar um Sudoku NxN válido
A evolução do Linux e as mudanças que se fazem necessárias desde o seu lançamento
Maquina modesta - a vez dos navegadores ferrarem o usuario
Fscrypt: protegendo arquivos do seu usuário sem a lentidão padrão de criptograr o disco
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor









