Código para validar CPF e CNPJ otimizado

Publicado por Carlos Caldas 30/04/2007

[ Hits: 59.103 ]

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

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

Agenda eletrônica

Login gráfico em java

Script para cálculo de distâncias na superfície terrestre utilizando coordenadas geográficas

Gerador de números aleatórios em Java


  

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