O assunto de hoje é novamente validação de CPF, mas dessa vez em Java, e não em C# como no post anterior. Eu criei uma pequena classe estática em Java para fazer a validação de CPF e CNPJ, com o nome CpfCnpjUtils. Ela possui 1 único método público, que é responsável por chamar métodos privados que validam se o valor informado é um CPF ou o CNPJ válido. Vamos ao código?
public class CpfCnpjUtils { 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}; public static boolean isValid(String cpfCnpj) { return (isValidCPF(cpfCnpj) || isValidCNPJ(cpfCnpj)); } 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; } private static String padLeft(String text, char character) { return String.format("%11s", text).replace(' ', character); } private static boolean isValidCPF(String cpf) { cpf = cpf.trim().replace(".", "").replace("-", ""); if ((cpf==null) || (cpf.length()!=11)) return false; for (int j = 0; j < 10; j++) if (padLeft(Integer.toString(j), Character.forDigit(j, 10)).equals(cpf)) 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()); } private static boolean isValidCNPJ(String cnpj) { cnpj = cnpj.trim().replace(".", "").replace("-", ""); 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()); } }
Publiquei o código acima no meu Gist, para acessá-lo basta clicar aqui.
Como disse no posto anterior, a ideia é vermos como fazer a validação de CPF e CNPJ em algumas outras linguagens, por exemplo em GO, dessa forma vamos poder observar e comparar suas diferenças e características, fiquem ligados.

Quase 20 anos de experiência no mercado de TI.
Atuação em grandes empresas como Netshoes, Borland, JBS, Bradesco, Hospital das Clínicas, Rede, Prodam, HSPE, Instituto Ayrton Senna, e também em empresas internacionais como Delta Dental, T-Mobile, Pepsi e Mckesson.
Fundador da TecPrime Solutions, administrador da comunidade nopCommerce Brasil, e autor dos sites InvestFacil.net e Desenvolvedores.ninja
Opa,
Parabens pelo site, pelas idéias.
Em relação ao seu código tem um erro na linha:
cnpj = cnpj.trim().replace(“.”, “”).replace(“-“, “”);
esta faltando o replace da “/”
deveria ser :
cnpj = cnpj.trim().replace(“.”, “”).replace(“-“, “”).replace(“/”, “”);
Abraço