[RESOLVIDO] Validação de CPF

Olá,
Estou tentando validar um CPF pela primeira vez, está tudo pronto mas não consigo usar o if para verificar se são iguais e prosseguir, alguém sabe me dizer o que pode ser? tem vezes que ele retorna erro do Index do substring não existir, não tem sentido algum!

String cpf = “”, total = “”;
int total1 = 0, total2 = 0;

    if (jrb_Pessoa_Fisica.isSelected() == true) {
        cpf = jtf_CPF_CNPJ.getText().replace(".", "").replace("-", "").replace("/", "") + "";
        for (int i = 0; i < 9; i++) { //1 numero.
            total1 += Integer.parseInt(cpf.charAt(i) + "") * (i - 10) * -1;
        }
        for (int i = 0; i < 10; i++) { //1 numero.
            total2 += Integer.parseInt(cpf.charAt(i) + "") * (i - 11) * -1;
        }
        total1 = (total1 * 10) % 11;
        total2 = (total2 * 10) % 11;
        total = total1 + "" + total2;

        if (total + "" == cpf.substring(9, 11) + "") {
            JOptionPane.showMessageDialog(null, "CPF válido.");
        } else {
            System.out.println("Total: " + total + "  SubString: " + cpf.substring(9, 11));
        }
    }

E aí Bruno, boa noite!!

1 curtida

Bom dia Abner,
Eu estou seguindo este site ai mesmo, mas no final da validação ele fala que os 2 resultados são diferentes e não entra na estrutura do If para validão, porém quando eu uso o Debug ele me mostra que os valores são exatamente iguais.

String cpf = “”, total = “”;
int total1 = 0, total2 = 0;

    if (jrb_Pessoa_Fisica.isSelected() == true) {
        cpf = jtf_CPF_CNPJ.getText().replace(".", "").replace("-", "") + ""; //Recebe valor do campo de texto CPF sem pontuação.

        if (cpf.length() == 11) { //Verifica se o CPF tem todos os caracteres.
            //!!! NÃO ALTERAR NENHUMA ESTRUTURA À PARTIR DAQUI. !!!
            for (int i = 0; i < 9; i++) { //!!! Executa a 1ª etapa da verificação.
                total1 += Integer.parseInt(cpf.charAt(i) + "") * (i - 10) * -1;
            }
            total1 = (total1 * 10) % 11; // Recebe a sobra da equação.
            if (total1 == 10) {
                total1 = 0;
            }

            for (int i = 0; i < 10; i++) {
                total2 += Integer.parseInt(cpf.charAt(i) + "") * (i - 11) * -1;
            }
            total2 = (total2 * 10) % 11;
            if (total2 == 10) {
                total2 = 0;
            }
            
            total = total1 + "" + total2 + "";
            
            if (total == cpf.substring(9, 11)) {
                JOptionPane.showMessageDialog(null, "FINALMENTE");
            }

        }
    }

Eu consegui fazer a validação substituindo os valores por Inteiros, mas como String não foi possível realizar a validação, acaba gastando mais código do que o necessário.

            total1 = Integer.parseInt(total1 + "" + total2);
            total2 = Integer.parseInt(cpf.substring(9, 11));
            
            if (total1 == total2) {
                JOptionPane.showMessageDialog(null, "FINALMENTE");
            }
1 curtida

Olha, funcionou tranquilo. Você só queria mostrar se era válido ou não?

Sim, só mostrar se é válido ou não, eu iria colocar para entrar no else{} o aviso de CPF inválido OnFocusLost.
Mas como vai só utilizar 1 vez em todo o formulário não tem perda de desempenho visível, vou aceitar que funcionou e passar para o próximo hahaha. Obrigado ^^

Kkkkkkk, beleza

1 curtida

Caso alguém precise, fiz uma função para verificar e validar o CPF, basta enviar o parâmetro cpf.replace(".", “”).replace("-", “”); como String.

public static boolean valida_CPF(String cpf) {
    //VERIFICAÇÃO DE DADOS SEM DEBUGAR. (Colocar dentro do FOR que quer verificar o cpf).
    /*System.out.println(i);
    System.out.println("CPF1: " + cpf2);
    System.out.println("I: " + i);
    System.out.println("arrayCPF[i]: " + arrayCPF[i]);
    System.out.println("Multiplicação do arrayCPF[i]: " + (10 - i));
    System.out.println("Valor multiplicado Array: " + arrayCPF[i] * (10 - i));*/
    int i = 0;
    int[] arrayCPF = new int[11];
    int cpf1 = 0, cpf2 = 0;
    for (i = 0; i < 11; i++) { //For que auxilia na transferencia de valores do CPF para Array
        arrayCPF[i] = Integer.parseInt(cpf.charAt(i) + "");
        if (i < 9) {
            cpf1 += arrayCPF[i] * (10 - i);
        }
        if (i < 10) {
            cpf2 += arrayCPF[i] * (11 - i);
        }
    }
    cpf1 = (cpf1 * 10) % 11;

    cpf2 = (cpf2 * 10) % 11;
    if (cpf1 > 9) {
        cpf1 = 0;
    }
    if (cpf2 > 9) {
        cpf2 = 1;
    }
    if (cpf1 == arrayCPF[9] && cpf2 == arrayCPF[10]) {
        return true;
    } else {
        return false;
    }
}