Validar cpf

4 respostas
K

Olá pessoal. Bom, sou meio iniciante na linguagem java e fiquei com uma dúvida no código que valida cpf.. Alguem poderia me explicar? Testei com o meu CPF que é 3268*****01 (não quero colocar td) enfim, e fui testa-lo de acordo com o código... Na parte do código

return nDigVerific.equals(nDigResult);

Se eu testo com o primeiro número do meu CPF que é 3, o nDigResult fica 35 e o nDigVerif é sempre 01.. o q mostra que são diferentes... o valor de nDigResult não deveria dar 01 tb para ser igual ao nDigVerif? Sei que no final meu CPF é tido como válido.. Aí esta o código

import java.util.*;
	
public abstract class PessoaFisica {
	
	String CPF;

	/** Realiza a validação do CPF.
	*
	* @param   strCPF número de CPF a ser validado
	* @return  true se o CPF é válido e false se não é válido
	*/

/*	public static void CPF() { 
		
	}*/
	
	
	public static boolean CPF (String strCpf )
	{
		int d1, d2;
		int digito1, digito2, resto;
		int digitoCPF;
		String nDigResult;

		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();

	//multiplique 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 digito é 11 menos o
	//resultado anterior.
	if (resto <2)
	digito1 = 0;
	else
	digito1 = 11 - resto;

	d2 += 2 * digito1;

	//Segundo 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);
	}
	void setCpf(String cpf) {
	this.CPF=cpf;
	}

	public static void main(String[] args) {
	System.out.println( CPF("3268*****01") ? "OK" : "Incorreto"  );
	}

	}

Se alguém já tiver feito esse exercício de validar cpf e entendê-lo, por favor, me de um help.. Obrigado!!!

4 Respostas

edmarr

Bom vc escondeu se cpf no inicio do post , eh o revela no final … legal nao ??

System.out.println( CPF("326******01") ? "OK" : "Incorreto"  );

Bom este calculo se refere ao que chamamos de Modular de 11 tem varias regrinhas a serem seguidas
para poder validar se um cpf eh verdadeiros ou esta com os numeros incorretos .

De uma olhada para ficar mais claro .

http://www.ghiorzi.org/cgcancpf.htm

Bom Estudo !

K

obrigado pelo toque e pala dica edmar hehe

edmarr

Não Esqueça de editar o Título adicionando a tag [RESOLVIDO] no final do Título , Depois tirar suas duvidas.

L

Ola pessoa baum?Sou novo por aki e to com um problema , utilizando o metodo de validar cpf aki citado tentei utilzar no programa , pois bem eu tenho uma classe TElaUsuario onde aki eu faco o cadastro do usuario, e tenho um componete MeuCPFCNPJ, onde eu determino o campo cpf do tipo do meu componete, pois bem nao to conseguindo pegar oq foi digitado e jogar no meu componete onde ta o validador do cpf, e me retornar se esta certo ou errado, espero ter sido claro.

aki ta minha classe componente:
package MeuComponente;

import javax.swing.JOptionPane;

public class MeuCpfCnpj extends MeuJFormattedTextField implements MeuComponente {

public MeuCpfCnpj(boolean obrigatorio) {
    super(obrigatorio);
    mascaras = new String[]{"###.###.###-##"};
    try {
        mf.setMask(mascaras[0]);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Erro ao estabelecer a máscara para o tipo CPF/CNPJ");
    }
    mf.setValidCharacters("[telefone removido]");
    mf.setPlaceholder("_");
    mf.install(this);
    int tamanho9 = getFontMetrics(getFont()).charWidth('9');  //tamanho do caracter 9 para o fonte corrente
    int tamanhoW = getFontMetrics(getFont()).charWidth('W');  //tamanho do caracter W para o fonte corrente
    setColumns((tamanho9 * 10) / tamanhoW);          //ajusta o tamanho do campo para apenas dígitos numéricos (9 é o maior digito numérico e W o maior caracter)
}

public boolean eVazio() {
    String texto = getText().replace('.', '\0').replace('-', '\0').trim();
    if (texto.length() > 0)
        return false;
    return true;
}
public boolean validacaoCPF(String cpf) {
         int     d1, d2;
         int     digito1, digito2, resto;
         int    digitoCPF;
         String  nDigResult;

         d1 = d2 = 0;
         digito1 = digito2 = resto = 0;

         for (int nCount = 1; nCount < cpf.length() -1; nCount++)
         {
            digitoCPF = Integer.valueOf (cpf.substring(nCount -1, nCount)).intValue();

            //multiplique 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 digito é 11 menos o resultado anterior.
         if (resto < 2)
            digito1 = 0;
         else
            digito1 = 11 - resto;

         d2 += 2 * digito1;

         //Segundo 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 = cpf.substring (cpf.length()-2, cpf.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);


      }

 }

aki minha classe TelaUsuario, onde vai ser digitado o cpf:
package Telas;

import MeuComponente.MeuCampoSenha;

import MeuComponente.MeuCodigo;

import MeuComponente.MeuComboBox;

import MeuComponente.MeuCpfCnpj;

import MeuComponente.MeuDescricao;

import java.awt.GridBagConstraints;

import javax.swing.JOptionPane;

import telas.TelaConsulta;

public class TelaUsuario extends TelaCadastro {

private MeuCodigo     codigo          = new MeuCodigo(10, false);
private MeuDescricao  nome            = new MeuDescricao(50, true);
[b]private MeuCpfCnpj    cpf             = new MeuCpfCnpj(true);[/b]
private MeuDescricao  email           = new MeuDescricao(30, false);
private MeuCampoSenha senha           = new MeuCampoSenha(10,true);
private MeuCampoSenha confirmarsenha  = new MeuCampoSenha(10,true);
private MeuComboBox tiponivel         = new MeuComboBox(new String[] {" ","Administrador","Padrao"} );
private MeuComboBox   ativo           = new MeuComboBox(new String[] {" ","Ativo","Inativo"} );

public TelaUsuario() {
    super("Cadastro de Usuario");
    adicionaComponentes(1,1,1,1,GridBagConstraints.WEST,"Código", codigo);
    adicionaComponentes(2,1,1,1,GridBagConstraints.WEST,"Nome", nome);
    adicionaComponentes(3,1,1,1,GridBagConstraints.WEST,"CPF", cpf);
    adicionaComponentes(4,1,1,1,GridBagConstraints.WEST,"Email", email);
    adicionaComponentes(5,1,1,1,GridBagConstraints.WEST,"Senha", senha);
    adicionaComponentes(6,1,1,1,GridBagConstraints.WEST,"Confirmar Senha", confirmarsenha);
    adicionaComponentes(7,1,1,1,GridBagConstraints.WEST,"Tipo Conta", tiponivel);
    adicionaComponentes(8,1,1,1,GridBagConstraints.WEST,"Status", ativo);
    pack();
    setVisible(true);
}
@Override
public void consultar() {

if (telaConsulta == null) {

telaConsulta = new TelaConsulta(Consulta de Usuários, this, new String[] {Código, Nome, Estado}, SELECT CIDADE.CODIGO, CIDADE.NOME, ESTADO.SIGLA FROM CIDADE, ESTADO WHERE CIDADE.CODESTADO = ESTADO.CODIGO);

TelaPrincipal.desk.add(telaConsulta);

}

TelaPrincipal.desk.moveToFront(telaConsulta);

telaConsulta.requestFocus();

}

<a class="mention" href="/u/override">@Override</a>

public void cancelar() {

habilitaBotoes(true);

nome.setText("");

cpf.setText("");

email.setText("");

senha.setText("");

confirmarsenha.setText("");

tiponivel.setSelectedItem(null);

ativo.setSelectedItem(null);

jlMensagem.setText("");

statusTela = INDEFINIDO;

}

<a class="mention" href="/u/override">@Override</a>

public boolean validaDados() {

super.validaDados();

String key1 = new String(senha.getPassword());

String key2 = new String(confirmarsenha.getPassword());

String cpfs = new String(cpf.getText()); aki eu criou uma variavel pra pegar o cpf

if (key1.equals(key2)) {

senha.setBackground(Util.Dados.COR_OBRIGATORIO);

confirmarsenha.setBackground(Util.Dados.COR_OBRIGATORIO);

return true;

} else {

senha.setBackground(Util.Dados.COR_INVALIDO);

confirmarsenha.setBackground(Util.Dados.COR_INVALIDO);

JOptionPane.showMessageDialog(null, “As senhas não coincidem!\nVerifique campos em vermelho.”);

return false;

}

//validacaoCPF(cpfs); aki tentei chamar o metodo validar la do meucomponete MEUCPFCNPJ

}

}

espero q possam me ajudar

Criado 7 de setembro de 2009
Ultima resposta 15 de fev. de 2010
Respostas 4
Participantes 3