Boa noite…
Sou iniciante em java e gostaria de saber como eu faço para que o campo CPF nao aceite numeros iguais.
Eu ja fiz a validação dele e está ok… Só falta este detalhe.
Obrigada
Boa noite…
Sou iniciante em java e gostaria de saber como eu faço para que o campo CPF nao aceite numeros iguais.
Eu ja fiz a validação dele e está ok… Só falta este detalhe.
Obrigada
bom…
se for em banco de dados, que vc queira fazer isso, tem que criar uma Unique Key
no caso de ser apenas uma aplicação sem bd, vc pode guardar os cpf’s em uma lista, e se já existir nessa lista, vc nao deixa confirmar o cadastro.
[]'s
[quote=anja]Boa noite…
Sou iniciante em java e gostaria de saber como eu faço para que o campo CPF nao aceite numeros iguais.
Eu ja fiz a validação dele e está ok… Só falta este detalhe.
Obrigada[/quote]
Suponho que esteja falando de numeros como 111111111 ou 222222222 que passam pelo algoritmo de verificação embora não seja cpfs reais.
A primeira coisa a entender é que o algoritmo que testa o digito verificador serve para saber se o cara não se enganou a digitar, não serve para saber se aquele numero de cpf realmente existe.
No caso de querer imepedir esse tipo de numeros, no algoritmo de verificação do digito validador ha um for onde vc fica multiplicando o digito por um numero numa certa sequencia.
Basta que vocÊ além do algoritmo normal vá verificando se o digito é igual ao anteriror. No fim, se essa flag for true, é porque todos os digitos são iguais e ai vc invalida o cpf.
O código que estou usando é este:
package utilitarios;
import javax.swing.JOptionPane;
public class ValidaCpf { /** Cria uma nova instancia ValidaCpf*/
public boolean validacpf (String strCpf) { // formato XXX.XXX.XXX-XX
if (! strCpf.substring(0,1).equals("")){
try {
boolean validado=true; int d1, d2; int digito1, digito2, resto;
int digitoCPF;
String nDigResult;
strCpf=strCpf.replace(’.’,’ ‘);
strCpf=strCpf.replace(’-’,’ ');
strCpf=strCpf.replaceAll("","");
d1 = d2 = 0; digito1 = digito2 = resto = 0;
for (int nCount = 1; nCount < strCpf.length() -1; nCount++){
digitoCPF = Integer.valueOf(strCpf.substring(nCount -1, nCount)).intValue();
//mutiplique a ultima casa por 2 a seguinte por 3 a seguinte por 4 e assim por diante.
d1 = d1 + (11 -nCount)*digitoCPF;
//para o segundo digito repita o procedimento incluindo o primeiro digito calculado no passo anterior.
d2 = d2 + (12 -nCount)*digitoCPF;
};
//Primeiro resto da divisão por 11.
resto = (d1%11);
//Se o resultado for 0 ou 1 o digito é 0 caso contrário o digíto é 11 menos o resultado anterior.
if (resto<2) digito1=0;
else digito1= 11 -resto; d2 += 2*digito1;
//Se o resto da divisão por 11.
resto = (d2%11);
//Se o resultado for 0 ou 1 o digito é 0 caso contrário o digito é 11 menos o resultado anterior.
if (resto<2)digito2=0;
else digito2= 11 -resto;
//Digito verificador do CPF que está sendo validado.
String nDigVerific=strCpf.substring(strCpf.length()-2, strCpf.length());
//Concatenando o primeiro resto com o segundo.
nDigResult=String.valueOf(digito1) + String.valueOf(digito2);
//comparar o digito verificador do cpf com o primeiro resto + o segundo resto.
return nDigVerific.equals(nDigResult);
} catch (Exception e){
System.err.println("Erro !"+e);
return false;}
}
else
return false;
}
}
Como eu faço para incluir aqui?? Estou usando o programa NetBeans 5.5.
Grata
package utilitarios;
import javax.swing.JOptionPane;
public class ValidaCpf { /** Cria uma nova instancia ValidaCpf*/
public boolean validacpf (String strCpf) { // formato XXX.XXX.XXX-XX
if (! strCpf.substring(0,1).equals("")){
try {
boolean validado=true; int d1, d2; int digito1, digito2, resto;
int digitoCPF;
String nDigResult;
strCpf=strCpf.replace('.',' ');
strCpf=strCpf.replace('-',' ');
strCpf=strCpf.replaceAll("","");
d1 = d2 = 0; digito1 = digito2 = resto = 0;
// alterações
int digitoAnterior = -1;
boolean allEqual = false;
for (int nCount = 1; nCount < strCpf.length() -1; nCount++){
digitoCPF = Integer.valueOf(strCpf.substring(nCount -1, nCount)).intValue();
// verifica se é igual ao anterior . apenas se o anterior não é negativo
if ( digitoAnterior > =0 ){
allEqual = allEqual & (digitoAnterior == digitoCPF );// atenção ao operador & e não &&
}
digitoAnterior = digitoCPF; // memoriza para a proxima iteração
//mutiplique a ultima casa por 2 a seguinte por 3 a seguinte por 4 e assim por diante.
d1 = d1 + (11 -nCount)*digitoCPF;
//para o segundo digito repita o procedimento incluindo o primeiro digito calculado no passo anterior.
d2 = d2 + (12 -nCount)*digitoCPF;
};
if ( allEqual ){
// invalido
return false;
}
//Primeiro resto da divisão por 11.
resto = (d1%11);
//Se o resultado for 0 ou 1 o digito é 0 caso contrário o digíto é 11 menos o resultado anterior.
if (resto<2) digito1=0;
else digito1= 11 -resto; d2 += 2*digito1;
//Se o resto da divisão por 11.
resto = (d2%11);
//Se o resultado for 0 ou 1 o digito é 0 caso contrário o digito é 11 menos o resultado anterior.
if (resto<2)digito2=0;
else digito2= 11 -resto;
//Digito verificador do CPF que está sendo validado.
String nDigVerific=strCpf.substring(strCpf.length()-2, strCpf.length());
//Concatenando o primeiro resto com o segundo.
nDigResult=String.valueOf(digito1) + String.valueOf(digito2);
//comparar o digito verificador do cpf com o primeiro resto + o segundo resto.
return nDigVerific.equals(nDigResult);
} catch (Exception e){
System.err.println("Erro !"+e);
return false;}
}
else
return false;
}
}
A IDE que vc está usando não importa.
Vc está vendo um for ali que itera sobre os digitos ? Veja as alterações
sergiotaborda
eu coloquei o codigo, mas esta dando erro de “illegal start of expression” nessas 2 linhas:
if ( digitoAnterior > =0 ){
allEqual = allEqual & (digitoAnterior == digitoCPF );// atenção ao operador & e não &&
}
digitoAnterior = digitoCPF; // memoriza para a proxima iteração
O que eu devo fazer???
Grata
[quote=anja]sergiotaborda
eu coloquei o codigo, mas esta dando erro de “illegal start of expression” nessas 2 linhas:
if ( digitoAnterior > =0 ){
allEqual = allEqual & (digitoAnterior == digitoCPF );// atenção ao operador & e não &&
}
digitoAnterior = digitoCPF; // memoriza para a proxima iteração
O que eu devo fazer???
Grata[/quote]
Esse erro significa que vc não digitou alguma coisa direito. Reverifique o que digitou, ou apague e digite de novo.
Ola sergio…
eu ja fiz isso… ja ate copiei o codigo que vc mandou mas mesmo assim ainda esta dando o erro.
Segue abaixo o código como eu digitei:
public boolean validacpf (String strCpf) { // formato XXX.XXX.XXX-XX
if (! strCpf.substring(0,1).equals("")){
try {
boolean validado=true; int d1, d2; int digito1, digito2, resto;
int digitoCPF;
String nDigResult;
strCpf=strCpf.replace('.',' ');
strCpf=strCpf.replace('-',' ');
strCpf=strCpf.replaceAll("","");
d1 = d2 = 0; digito1 = digito2 = resto = 0;
// alterações
int digitoAnterior = -1;
boolean allEqual = false;
for (int nCount = 1; nCount < strCpf.length() -1; nCount++){
digitoCPF = Integer.valueOf(strCpf.substring(nCount -1, nCount)).intValue();
// verifica se é igual ao anterior . apenas se o anterior não é negativo
if ( digitoAnterior > =0 ){
allEqual = allEqual & (digitoAnterior == digitoCPF );// atenção ao operador & e não &&
}
digitoAnterior = digitoCPF; // memoriza para a proxima iteração
//mutiplique a ultima casa por 2 a seguinte por 3 a seguinte por 4 e assim por diante.
d1 = d1 + (11 -nCount)*digitoCPF;
//para o segundo digito repita o procedimento incluindo o primeiro digito calculado no passo anterior.
d2 = d2 + (12 -nCount)*digitoCPF;
};
if ( allEqual ){
// invalido
return false;
}
//Primeiro resto da divisão por 11.
resto = (d1%11);
//Se o resultado for 0 ou 1 o digito é 0 caso contrário o digíto é 11 menos o resultado anterior.
if (resto<2) digito1=0;
else digito1= 11 -resto; d2 += 2*digito1;
//Se o resto da divisão por 11.
resto = (d2%11);
//Se o resultado for 0 ou 1 o digito é 0 caso contrário o digito é 11 menos o resultado anterior.
if (resto<2)digito2=0;
else digito2= 11 -resto;
//Digito verificador do CPF que está sendo validado.
String nDigVerific=strCpf.substring(strCpf.length()-2, strCpf.length());
//Concatenando o primeiro resto com o segundo.
nDigResult=String.valueOf(digito1) + String.valueOf(digito2);
//comparar o digito verificador do cpf com o primeiro resto + o segundo resto.
return nDigVerific.equals(nDigResult);
} catch (Exception e){
System.err.println("Erro !"+e);
return false;}
}
else
return false;
}
Se vc puder me ajudar eu ficaria mto agradecida…
E mais uma vez desculpe o incomodo!