Código Java não funciona validação de CPF.

Java

25/03/2016

Olá pessoas,

Então, existem alguns tópicos falando sobre esse assunto há alguns anos, mas não queria ressuscitar tópicos antigos para fazer essa pergunta.

Estou fazendo um projeto "simples" de gestão e controle de lixo eletrônico pra minha cadeira de orientação a objetos, mas estou tendo muita dor de cabeça tentando validar CPF e CNPJ pra cadastro de usuários.
Peguei várias soluções na net e até códigos prontos, o único que compilou sem dar erros foi esse:
package projetoJava2;

public class CNP extends Cadastro {
	   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());
	   }
}


Ele funciona perfeitamente quando crio uma função main na própria classe e testo cpfs, mas quando coloco uma condição if na classe de Cadastro ele sempre retorna resultado inválido.
O código é esse:
System.out.print("CPF: ");
				pessoa.cpf = leituraPessoa.next();
				//validaçao do CPF, precisa testar!!!
				if(CNP.isValidCPF(cpf) != true)
					do {
						System.out.printf("Erro, CPF invalido! Tente novamente\n");
						pessoa.cpf = leituraPessoa.next();
					} while (CNP.isValidCPF(cpf) != true);



Por favor, me ajudem, gostaria de implementar essa função antes da primeira entrega.
Desde já, muito obrigado!
Igor Alvim

Igor Alvim

Curtidas 0

Melhor post

Roseane Silva

Roseane Silva

25/03/2016

Eu sempre gosto de basear, alem dos livro, artigos.

Já olhou esse?

[url]https://www.devmedia.com.br/validando-o-cpf-em-uma-aplicacao-java/22097[/url]
GOSTEI 1

Mais Respostas

Igor Alvim

Igor Alvim

25/03/2016

Oi Roseane, também tentei esse código, o problema é que está dando Null pointer exception.

Segue a parte de verificação:
if (ValidaCPF.isCPF(CPF) != true) {
				do {
                    System.out.printf("Erro, CPF invalido! Tente novamente\n");
                    pessoa.CPF = leituraPessoa.next();
				}while(ValidaCPF.isCPF(CPF) != true);
			}


Pressione:
1 - Para Entrada de material reciclável
2 - Para Saída de material reciclável
3 - Para Cadastros
4 - Para pesquisas
5 - Para relatório de movimentação
6 - Para sair
3
Qual tipo de usuário você pretende cadastrar ?
1 - Pessoa Comum
2 - Pessoa Jurídica (empresa)
1
Nome Completo: Igor
CPF: 19283746555
Exception in thread "main" java.lang.NullPointerException
at usuarios.ValidaCPF.isCPF(ValidaCPF.java:9)
at projetoJava2.Cadastro.cadastrarPessoa(Cadastro.java:41)
at projetoJava2.Inicio.main(Inicio.java:43)
GOSTEI 0
Roseane Silva

Roseane Silva

25/03/2016

O seu código está mais "incrementado" não?
GOSTEI 1
Edson Venancio

Edson Venancio

25/03/2016

Ja verificou a linha 41 do seu classe Cadastro.

Este codigo nao esta com erro cara, eu ultilizei ele em uma aplicação web com um instrutor da devmedia, esta funcionando normal.
GOSTEI 1
Roseane Silva

Roseane Silva

25/03/2016

Edson, linha 41?
GOSTEI 1
Roseane Silva

Roseane Silva

25/03/2016

?????????????
GOSTEI 0
Roseane Silva

Roseane Silva

25/03/2016

?????????????
GOSTEI 0
Roseane Silva

Roseane Silva

25/03/2016

?????????????
GOSTEI 0
William

William

25/03/2016

Esse seu código está estranho, vc lê a entrada do usuário e joga no atributo "cpf" do objeto pessoa, ou seja, acessamos com "pessoa.cpf", porém vc passa como parâmetro para função de validação somente "cpf"?
System.out.print("CPF: ");
 pessoa.cpf = leituraPessoa.next();
//validaçao do CPF, precisa testar!!!
if(CNP.isValidCPF(cpf) != true)
 do {
       System.out.printf("Erro, CPF invalido! Tente novamente\n");
       pessoa.cpf = leituraPessoa.next();
 } while (CNP.isValidCPF(cpf) != true);


Essa variável "cpf" existe no escopo da função?
GOSTEI 1
Igor Alvim

Igor Alvim

25/03/2016

O seu código está mais "incrementado" não?


Sim, sim, mas não tinha nada errado com o incremento, realmente meu erro foi a passagem de parâmetros.

Esse seu código está estranho, vc lê a entrada do usuário e joga no atributo "cpf" do objeto pessoa, ou seja, acessamos com "pessoa.cpf", porém vc passa como parâmetro para função de validação somente "cpf"?
#Código
System.out.print("CPF: ");
 pessoa.cpf = leituraPessoa.next();
//validaçao do CPF, precisa testar!!!
if(CNP.isValidCPF(cpf) != true)
 do {
       System.out.printf("Erro, CPF invalido! Tente novamente\n");
       pessoa.cpf = leituraPessoa.next();
 } while (CNP.isValidCPF(cpf) != true);



Essa variável "cpf" existe no escopo da função?


William, era esse mesmo o erro (erro de principiante), agora está funcionando normalmente. Muito Obrigado cara!
Obrigado a todos que tentaram ajudar :D
GOSTEI 0
POSTAR