/*
* 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;
}
}