Código para validar CPF e CNPJ otimizado

Publicado por Carlos Caldas 30/04/2007

[ Hits: 49.914 ]

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

Simples applet para determinar invertido do digitado

Lista Encadeada em Java

Exemplo de sobrecarga de métodos

Algoritmo para Gerar um Sudoku NxN válido

Crivo de Eratóstenes Simples 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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts