Código para validar CPF e CNPJ otimizado

Publicado por Carlos Caldas 30/04/2007

[ Hits: 58.650 ]

Homepage: www.ccaldas.com.br

Download CNP.java




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.

  



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")); 
   }
}

Scripts recomendados

Agenda eletrônica

Determinante de uma matriz de ordem 3.

Ordenação de vetores com letras do alfabeto (atualizado)

Cálculo de número de anos baseado em data

Código para validar CPF e CNPJ otimizado


  

Comentários
[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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts