Regras para cálculo dos dígitos verificadores do CNPJ

 

  1. Considere os 8 dígitos à esquerda da barra e os 4 dígitos à direita da barra formando um número de 12 dígitos. Exemplo
    12.345.678/0001 forma o número 123.456.780.001
  2. Calcule a soma dos produtos dos doze digitos pelos pesos: 2,3,4,5,6,7,8,9,2,3,4,5. Exemplo:
    2*1+3*0+4*0+5*0+6*8+7*7+8*6+9*5+2*4+3*3+4*2+5*1 = 222.
  3. A dezena do número verificador é 0 caso o resto da divisão por 11 da soma dos produtos seja 0 ou 1; caso contrario a dezena corresponde  a 11 menos o resto da divisão por 11 da soma dos produtos. Exemplo:
    222 mod 11 = 2 => dezena= 11-2 => dezena =9
  4. Considere agora o número de 13 dígitos formado pelos 12 digitos anteriores e a dezena na posição menos significativa. Exemplo
    1.234.567.800.01d
  5. Calcule a soma dos produtos dos treze digitos pelos pesos: 2,3, 4,5,6,7,8,9,2,3,4,5,6. Exemplo:
    2*d+3*1+4*0+5*0+6*0+7*8+8*7+9*6+2*5+3*4+4*3+5*2+6*1 = 237.
  6. A dezena do número verificador é 0 caso o resto da divisão por 11 da soma dos produtos seja 0 ou 1; caso contrario a dezena corresponde  a 11 menos o resto da divisão por 11 da soma dos produtos. Exemplo:
    237 mod 11 = 6 => unidade = 11-6 => unidade = 5

Sugestão de programa para cálculo dos digitos verificadores:



    long cnpj…. 

    int d0=(int)(cnpj%10);     int d1=(int)(cnpj/10%10);
    int d2=(int)(cnpj/100%10); int d3=(int)(cnpj/1000%10);

    System.out.println("Calculo dos digitos verificadores do CNPJ:"+
                       cnpj/10000+"/"+d3+d2+d1+d0);

    int d4=(int)(cnpj/10000%10);         int d5=(int)(cnpj/100000%10);
    int d6=(int)(cnpj/1000000%10);       int d7=(int)(cnpj/10000000%10);
    int d8=(int)(cnpj/100000000%10);     int d9=(int)(cnpj/1000000000L%10);
    int d10=(int)(cnpj/10000000000L%10); int d11=(int)(cnpj/100000000000L%10);

    int somaprod=d0*2+d1*3+d2*4+d3*5+d4*6+d5*7+
                 d6*8+d7*9+d8*2+d9*3+d10*4+d11*5;

    int restoAux=somaprod%11;
    boolean resto0ou1=restoAux==0|restoAux==1;
    int dezena=resto0ou1?0:11-restoAux;

    somaprod=dezena*2+d0*3+d1*4+d2*5+d3*6+d4*7+d5*8+d6*9+
             d7*2+d8*3+d9*4+d10*5+d11*6;

    restoAux=somaprod%11;
    resto0ou1=restoAux==0|restoAux==1;
 



Observe o uso de "elencamento" nos comandos envolvendo atribuição de valores do tipo long para variáveis do tipo int.