HELP, qual o erro neste código abaixo?

3 respostas Resolvido
mysqljavaprogramação
J

Qual o erro no código abaixo?

package validacpf;

public class ValidaCPF {

public static boolean isCPF(String CPF) {
//Todos os CPF's tem 11 digitos, se tiver um numero diferente considera erro
    if (CPF.length() != 11) {
        return false;
    }
    // Se os numeros forem repetidos considera-se erro
    if (CPF.equals("[telefone removido]") || CPF.equals("[telefone removido]")
            || CPF.equals("[telefone removido]") || CPF.equals("[telefone removido]")
            || CPF.equals("[telefone removido]") || CPF.equals("[telefone removido]")
            || CPF.equals("[telefone removido]") || CPF.equals("[telefone removido]")
            || CPF.equals("[telefone removido]") || CPF.equals("[telefone removido]")) {
        return false;
    }

    char dig10, dig11;
    int soma, i, r, num, peso;

    //"try"-protege o codigo para eventuais erros de conversao de tipo (int)
    try {
        // Calculo do 1o. Digito Verificador
        soma = 0;
        peso = 10;
        for (i = 0; i < 9; i++) {
            // converte o i-esimo caractere do CPF em um numero:
            // por exemplo, transforma o caractere '0' no inteiro 0
            num = (int) (CPF.charAt(i));
            soma = soma + (num * peso);
            peso = peso - 1;
        }
        // Pega o resto da divisão por 11
        r = (soma % 11);
        if ((r == 0) || (r == 1)) {
            dig10 = '0';
        } else {
            r = 11 - r;
            dig10 = (char) (r); //converte no respectivo caractere numerico
        }
        // Calculo do 2o. Digito Verificador
        soma = 0;
        peso = 11;
        for (i = 0; i < 10; i++) {
            num = (int) (CPF.charAt(i));
            soma = soma + (num * peso);
            peso = peso - 1;
        }

        r = (soma % 11);
        if ((r == 1) || (r == 1)) {
            dig11 = '0';
        } else {
            r = 11 - r;
            dig11 = (char) (r);
        }

    // Verifica se os digitos calculados conferem com os digitos informados.
        return (dig10 == CPF.charAt(10)) && (dig11 == CPF.charAt(11));
    } catch (Exception erro) {
        return false;
    }
}

public static String imprimeCPF(String CPF) {
    String cpf = CPF.substring(0, 3) + "." + CPF.substring(3, 6) + "."
            + CPF.substring(6, 9) + "-" + CPF.substring(9, 11);
    return cpf;
}

}

3 Respostas

F

Qual erro o console mostra?

Cola o stacktrace aqui

W
Solucao aceita

O erro mais evidente que notei foi o seguinte:

Vc está tentando transformar um character numérico em um número inteiro fazendo casting.

int num = (int) CPF.charAt(i);

Mas isto não vai lhe dar o resultado esperado. Veja o exemplo:

char ch = '1';
System.out.println((int) ch);

O resultado será 49 e não 1.

O correto seria fazer o seguinte:

char ch = '1';
System.out.println(Character.getNumericValue(ch));

No seu caso ficaria assim:

num = Character.getNumericValue(CPF.charAt(i));

Agora apenas uma sugestão:

Um jeito mais simples de verificar se todos os characteres da String são iguais seria assim:

if ("111111111".chars().distinct().count() > 1) {
  System.out.println("Números não são todos iguais");
} else {
  System.out.println("Todos os números são iguais");
}
J

Obrigada pela ajuda!!

O objetivo era esse tentar descobrir algum erro no próprio código

Criado 6 de outubro de 2021
Ultima resposta 7 de out. de 2021
Respostas 3
Participantes 3