Pular para o conteúdo

Código para validar CPF e CNPJ otimizado

Esse código difere da maioria dos códigos encontrados na internet.

Identifiquei um padrão no cálculo que evita um amontoado de IF´s e torna o código mais elegante.

Foi possivel criar as duas funções com aproximadamente 30 linhas.
Carlos Caldas ccaldas
Hits: 59.477 Categoria: Java Subcategoria: Miscelânea
  • Download
  • Nova versão
  • Indicar
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Descrição

Esse código difere da maioria dos códigos encontrados na internet.

Identifiquei um padrão no cálculo que evita um amontoado de IF´s e torna o código mais elegante.

Foi possivel criar as duas funções com aproximadamente 30 linhas.
Download CNP.java Enviar nova versão
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Esconder código-fonte

public class CNP {
   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("01115375502")); 
      System.out.printf("CNPJ Valido:%s \n", CNP.isValidCNPJ("13642634756318")); 
   }
}
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Pesquisa Binaria em um vetor ordenado

Imagem de Background atravez de um JDesktopPane

Login gráfico em java

Calcular ritmo de corrida de rua

Gerador de números aleatórios em Java

#1 Comentário enviado por AlvimIgor em 24/03/2016 - 21:46h
Aqui está dando CPF inválido em todos os testes...
Como resolvo?
#2 Comentário enviado por yurisbv em 20/11/2016 - 16:10h
Muito legal !

Parabéns.

Podem testar o código aqui compilejava.net , só copiar e colar por cima do que está lá.
#3 Comentário enviado por janserlemesf em 10/06/2019 - 13:07h
A validação não está correta, por exemplo, para o valor cd cpf "11111111111" é retornado true

Contribuir com comentário

Entre na sua conta para comentar.