[RESOLVIDO] validar um CPF

12 respostas
FabinhoGil

Olá galera!!!
estou com problemas para validar um cpf,
nao consigo encontrar uma logica para bloquear um cpf com numeros fora do lugar ou letras no meio…
eu queria criear um metodo private para validar o cpf e chamar esse metodo dentro do metodo adiciona,
assim quando eu adicionar um cliente ele primeiro valida o cpf!!!
“sei que isso é muito basico no java”
mas na minha apostila nao tem explicação nenhuma,
simplesmente me pediu para validar!!!
a class do cpf e essa:

public class Cliente{
	private String nome;
	private String sobrenome;
	private String cpf;
	private int idade;

	public void adiciona(String nomeCliente, String sobrenomeCliente, String cpfCliente, int idadeCliente){
		nome = nomeCliente;
		sobrenome = sobrenomeCliente;
		cpf = cpfCliente;
		idade = idadeCliente;
	}
	public void mostra(){
		System.out.println("Nome do titular: "+this.nome+" "+this.sobrenome);
		System.out.println("CPF do titular: "+this.cpf);
		System.out.println("Idade do titular: "+this.idade);
	}
}

12 Respostas

vitordarela

Bom dia,
hj em dia voce encontra varios métodos de validações comum (CPF, CNPJ, PIS, E-MAIL)
segue abaixo um método implementador de validação de CPF que voce pode estar utilizando em seu código.

private boolean validaCPF(String strCpf){
    int iDigito1Aux = 0, iDigito2Aux = 0, iDigitoCPF;
    int iDigito1 = 0, iDigito2 = 0, iRestoDivisao = 0;
    String strDigitoVerificador, strDigitoResultado;
 
    if (! strCpf.substring(0,1).equals("")){
        try{
            strCpf = strCpf.replace('.',' ');
            strCpf = strCpf.replace('-',' ');
            strCpf = strCpf.replaceAll(" ","");
            for (int iCont = 1; iCont < strCpf.length() -1; iCont++) {
                iDigitoCPF = Integer.valueOf(strCpf.substring(iCont -1, iCont)).intValue();
                iDigito1Aux = iDigito1Aux + (11 - iCont) * iDigitoCPF;
                iDigito2Aux = iDigito2Aux + (12 - iCont) * iDigitoCPF;
            }
            iRestoDivisao = (iDigito1Aux % 11);
            if (iRestoDivisao < 2) {
                iDigito1 = 0;
            } else {
                iDigito1 = 11 - iRestoDivisao;
            }
            iDigito2Aux += 2 * iDigito1;
            iRestoDivisao = (iDigito2Aux % 11);
            if (iRestoDivisao < 2) {
                iDigito2 = 0;
            } else {
                iDigito2 = 11 - iRestoDivisao;
            }
            strDigitoVerificador = strCpf.substring(strCpf.length()-2, strCpf.length());
            strDigitoResultado = String.valueOf(iDigito1) + String.valueOf(iDigito2);
            strDigitoVerificador.equals(strDigitoResultado);
            return true;
        } catch (Exception e) {
            return false;
        }
    } else {
        return false;
    }
}
spycall
Vê se te ajuda:
public class ValidaCPFCNPJ {
   private static final int[] pesoCPF = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2};
   private static final int[] pesoCNPJ = {6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2};

   private static int calcularDigito(String str, int[] peso) {
      int soma = 0;
      for (int indice=str.length()-1, digito; indice >= 0; indice-- ) {
         digito = Integer.parseInt(str.substring(indice,indice+1));
         soma += digito*peso[peso.length-str.length()+indice];
      }
      soma = 11 - soma % 11;
      return soma > 9 ? 0 : soma;
   }

   public static boolean isValidCPF(String cpf) {
      if ((cpf==null) || (cpf.length()!=11)) return false;

      Integer digito1 = calcularDigito(cpf.substring(0,9), pesoCPF);
      Integer digito2 = calcularDigito(cpf.substring(0,9) + digito1, pesoCPF);
      return cpf.equals(cpf.substring(0,9) + digito1.toString() + digito2.toString());
   }

   public static boolean isValidCNPJ(String cnpj) {
      if ((cnpj==null)||(cnpj.length()!=14)) return false;

      Integer digito1 = calcularDigito(cnpj.substring(0,12), pesoCNPJ);
      Integer digito2 = calcularDigito(cnpj.substring(0,12) + digito1, pesoCNPJ);
      return cnpj.equals(cnpj.substring(0,12) + digito1.toString() + digito2.toString());
   }

   public static void main(String[] args) {
      System.out.printf("CPF Valido:%s \n", CNP.isValidCPF("[telefone removido]"));
      System.out.printf("CNPJ Valido:%s \n", CNP.isValidCNPJ("13642634756318"));
   }
}
FabinhoGil

spycall
seu codigo validaria!!
mas nao iria barrar a entrada de letras
ou entao separar com pontos nao é?

F

use expressão regular =)

Pattern p = Pattern.compile("\\D"); Matcher m = p.matcher(cpf); System.out.println(m.find());

\D é para não digitos

http://www.guj.com.br/java/103520-regex—expressao-regular-em-java

aqui tem uns links para estudar

FabinhoGil

vitordarela
como fikaria um cpf correto no seu metodo??
mande uma classe para testalo por favor
eu tentei mas da falso
olhe so:

class testeCPF{
	public static void main(String[] args) {
		      Cliente c1 = new Cliente();
		      c1.adiciona("Fabio", "Henrique Gil", "[telefone removido]", 19);
		      c1.mostra();
   }
}

edit:
desculpe esqueci de postar o metodo adiciona

public void adiciona(String nomeCliente, String sobrenomeCliente, String cpfCliente, int idadeCliente){
		if(validaCPF(cpfCliente) == true){
			nome = nomeCliente;
			sobrenome = sobrenomeCliente;
			cpf = cpfCliente;
			idade = idadeCliente;
		}
FabinhoGil

fsuzuki
desculpe mas eu nen sei ainda o que é expressão regular…
rsrsr
vou pesquisar…

vitordarela

Use um CPF válido, o Seu para testar, no meu método ele vai retorna um booleano ou seja “TRUE” or “FALSE”

voce faz um " if " na sua main por exemplo

if(validaCPF == true){ //continua a implementar o cadastro } else{ if(validaCPF == false){ //mensagem de erro ou oq preferir para tratar a validação } }

não sei se ficou claro, o meu método trata “espaço” “virgula” “ponto” “/” isso tmbm voce pode implementar de acordo
com o modelo que está no método

FabinhoGil

sim sim
eu entendi
mas eu use varios tipos de cpf para testar

"[CPF removido]"
"[telefone removido]"

e retorna que o booleano e false!!
nao esta errado?
preste bem atenção nos meus metodos acima se estao certos? meu if por ex pode estar errado nao é?

vitordarela

seguinte validação de CPF é muito criteriosa, use um cpf válido! 321321… nao passa na validação pq ele sabe que nunca existira CPF com essa formação!
use [telefone removido] para voce testar! se der false me avisa que vou ver oq ta errado!

spycall
Opa, é só você mudar a função isValidCPF:
public static boolean isValidCPF(String cpf) {   
      if ((cpf==null) || (cpf.replaceAll("\\D","").length()!=11)) return false;   
  
      Integer digito1 = calcularDigito(cpf.substring(0,9), pesoCPF);   
      Integer digito2 = calcularDigito(cpf.substring(0,9) + digito1, pesoCPF);   
      return cpf.equals(cpf.substring(0,9) + digito1.toString() + digito2.toString());   
   }
o replaceAll("\\D","") vai retirar tudo o que não for número.
FabinhoGil

caara funcionou perfeitamente!!
o post ta resolvido
muito obrigado!!!

é que antes eu colocava apenas numeros aleatorios,
mas que eran compativeis com a quantidade de numeros solicitados e claro!!!
eu nao sabia que ele verificava se realmente o cpf existe!
testei com o meu tbm e deu certo!!
mas como?
se eu mudar um numero se quer, da false!!!
o cpf realmente tem que “existir”!!
muito interessante…

vitordarela

Sim o CPF realmente tem que existir.

Esse validador é bem completo!

bom ter ajudado, qualquer coisa estamos ai!

abcs!

Criado 6 de março de 2013
Ultima resposta 6 de mar. de 2013
Respostas 12
Participantes 4