Antes de tudo, temos que entender a lógica do algoritmo de validação. Para considerarmos um C.P.F. correto, devemos apenas verificar se o DÍGITO VERIFICADOR, os dois últimos dígitos, serão criados pelo nosso algoritmo
O cálculo é muito chato, mas vamos lá:
1º Guarde a soma da multiplicação do nove primeiros termos do C.P.F. por uma variável que incrementa, começando por 1.
2º O primeiro dígito será o resto da divisão por 11 (% 11).
3º Zere a soma.
4º Guarde a soma da multiplicação dos nove primeiros termos concatenado com o digito encontrado por uma variavel que incrementa, começando por 0.
5º O segundo dígito será o resto da divisão por 11 (%11).
6º Verifique se os dígitos encontrados são iguais aos digitos do cpf informado.
Fácil? Na verdade é chato!!!! Tanto que nem vou fazer o código, apenas irei disponibilizado. =)
- private static boolean validaCPF(String cpf) {
- boolean ret = false;
- String base = "000000000";
- String digitos = "00";
- if (cpf.length() <= 11) {
- if (cpf.length() < 11) {
- cpf = base.substring(0, 11 - cpf.length()) + cpf;
- base = cpf.substring(0, 9);
- }
- base = cpf.substring(0, 9);
- digitos = cpf.substring(9, 11);
- int soma = 0, mult = 11;
- int[] var = new int[11];
- // Recebe os números e realiza a multiplicação e soma.
- for (int i = 0; i < 9; i++) {
- var[i] = Integer.parseInt("" + cpf.charAt(i));
- if (i < 9)
- soma += (var[i] * --mult);
- }
- // Cria o primeiro dígito verificador.
- int resto = soma % 11;
- if (resto < 2) {
- var[9] = 0;
- } else {
- var[9] = 11 - resto;
- }
- // Reinicia os valores.
- soma = 0;
- mult = 11;
- // Realiza a multiplicação e soma do segundo dígito.
- for (int i = 0; i < 10; i++)
- soma += var[i] * mult--;
- // Cria o segundo dígito verificador.
- resto = soma % 11;
- if (resto < 2) {
- var[10] = 0;
- } else {
- var[10] = 11 - resto;
- }
- if ((digitos.substring(0, 1).equalsIgnoreCase(new Integer(var[9])
- .toString()))
- && (digitos.substring(1, 2).equalsIgnoreCase(new Integer(
- var[10]).toString()))) {
- ret = true;
- }
- }
- return ret;
- }
Espero que tenham entendido,
Abraço.
Nenhum comentário:
Postar um comentário