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));
}
}
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 ^^
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;
}
}