/* * CPF.java * * Criado em 19 de novembro de 2008, 10:39 */ package utils; /** * A classe CPF possui um método estático que diz se um CPF é * válido ou não. * * @author João Henrique Berg dos Santos * */ public class CPF { /** * O método validaCPF recebe como parâmetro um CPF na forma de * String e verifica se este CPF é válido ou não. Apenas dígitos numéricos * são permitidos na String. Nenhum outro caractere é permitido. * * @param cpf o CPF a ser verificado. * @return true se o CPF é válido, false se o CPF for inválido. */ public static boolean validaCPF(String cpf) { boolean eValido = false; // Assume que o CPF é inválido char[] caracteres = cpf.toCharArray(); // Os caracteres do CPF int[] digitos = new int[caracteres.length]; // Transformados em dígitos int somaNove = 0, somaDez = 0; // Variáveis temporárias int digitoDez = 0, digitoOnze = 0; // Os dígitos de verificação do CPF if (caracteres.length != 11) { return eValido; // O CPF deve ter exatamente 11 dígitos. } for (int count = 0; count < caracteres.length; count++) { if (!Character.isDigit(caracteres[count])) { return eValido; // Se não for um dígito não é um CPF válido. } } // Transforma os caracteres em dígitos numéricos for (int count = 0; count < caracteres.length; count++) { digitos[count] = Character.getNumericValue(caracteres[count]); int valor = 0; // Soma os nove primeiros dígitos multiplicados por um valor determinado. if (count < 9) { valor = digitos[count] * (11 - (count + 1)); somaNove += valor; } } // Usa a soma para calcular o primeiro dígito verificador. digitoDez = 11 - (somaNove % 11); if (digitoDez > 9) { digitoDez = 0; } // Se o décimo dígito calculado for diferente do décimo dígito passado // o CPF não é válido. if (digitoDez != digitos[9]) { return eValido; } // Soma os 10 primeiros dígitos multiplicados por um valor determinado. for (int count = 0; count < digitos.length; count++) { int valor = 0; if (count < 10) { valor = digitos[count] * (12 - (count + 1)); somaDez += valor; } } // Usa a soma para calcular o segundo dígito verificador. digitoOnze = 11 - (somaDez % 11); if (digitoOnze > 9) { digitoOnze = 0; } // Se o décimo primeiro dígito for diferente do dígito passado, o CPF não é // válido if (digitoOnze != digitos[10]) { return eValido; } // Se passou por todos os testes o CPF é válido eValido = true; return eValido; } }