Função para verificar CNPJ

Agora a função que calcula o CNPJ, lembrando que essa função é semelhante a função que calcula o CPF, para saber mais clique aqui.


Para gerar um CNPJ válido para testar a função clique aqui.

Delphi/Pascal
[+/-] Mostrar/Ocultar
function isCNPJ(num: string): boolean;
var
   n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12: integer;
   d1,d2: integer;
   digitado, calculado: string;
begin
   //Pega os 12 primeiros números
   n1:=StrToInt(num[1]);
   n2:=StrToInt(num[2]);
   n3:=StrToInt(num[3]);
   n4:=StrToInt(num[4]);
   n5:=StrToInt(num[5]);
   n6:=StrToInt(num[6]);
   n7:=StrToInt(num[7]);
   n8:=StrToInt(num[8]);
   n9:=StrToInt(num[9]);
   n10:=StrToInt(num[10]);
   n11:=StrToInt(num[11]);
   n12:=StrToInt(num[12]);

   //Verifica o primeiro dígito
   d1:=n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5;
   d1:=11-(d1 mod 11);
   if d1>=10 then d1:=0; //se o cálculo for igual a 10 então ele é zero   

   //Verifica o segundo dígito
   d2:=d1*2+n12*3+n11*4+n10*5+n9*6+n8*7+n7*8+n6*9+n5*2+n4*3+n3*4+n2*5+n1*6;
   d2:=11-(d2 mod 11);
   if d2>=10 then d2:=0; //se o cálculo for igual a 10 então ele é zero

   calculado:=inttostr(d1)+inttostr(d2);//Define o que foi calculado 
   digitado:=num[13]+num[14]; //Define o que foi digitado

   //Se o número que foi calculado for igual ao que foi digitado
   //a função retorna verdadeiro, senão retorna falso
   Result := (calculado=digitado);
end;

Java
[+/-] Mostrar/Ocultar
static boolean isCnpj(String cnpj) {
        int n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12;
        int d1,d2;
        String digitado, calculado;

        // Pega os 12 primeiros números
        n1 = (int)cnpj.charAt(0)-48;
        n2 = (int)cnpj.charAt(1)-48;
        n3 = (int)cnpj.charAt(2)-48;
        n4 = (int)cnpj.charAt(3)-48;
        n5 = (int)cnpj.charAt(4)-48;
        n6 = (int)cnpj.charAt(5)-48;
        n7 = (int)cnpj.charAt(6)-48;
        n8 = (int)cnpj.charAt(7)-48;
        n9 = (int)cnpj.charAt(8)-48;
        n10 = (int)cnpj.charAt(9)-48;
        n11 = (int)cnpj.charAt(10)-48;
        n12 = (int)cnpj.charAt(11)-48;

        // Faz o cálculo do primeiro dígito
        d1 = n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5;
        d1 = 11-(d1 % 11);
        if (d1 >= 10){
            d1 = 0;
        }

        // Faz o cálculo do segundo dígito
        d2 = d1*2+n12*3+n11*4+n10*5+n9*6+n8*7+n7*8+n6*9+n5*2+n4*3+n3*4+n2*5+n1*6;
        d2 = 11-(d2 % 11);
        if (d2 >= 10){
            d2 = 0;
        }

        calculado = Integer.toString(d1)+Integer.toString(d2);//Define o que foi calculado
        digitado = cnpj.substring(12,14); //Define o que foi digitado

        //Se o número que foi calculado for igual ao que foi digitado
        //a função retorna verdadeiro, senão retorna falso
        return (calculado.equals(digitado));
    }

PHP
[+/-] Mostrar/Ocultar
function isCNPJ($cnpj){
 
 // Pega os 12 primeiros números  
 $n1 = $cnpj{0};
 $n2 = $cnpj{1};
 $n3 = $cnpj{2};
 $n4 = $cnpj{3};
 $n5 = $cnpj{4};
 $n6 = $cnpj{5};
 $n7 = $cnpj{6};
 $n8 = $cnpj{7};
 $n9 = $cnpj{8};
 $n10 = $cnpj{9};
 $n11 = $cnpj{10};
 $n12 = $cnpj{11};
  
 // Faz o cálculo do primeiro dígito
 $d1 = $n12*2+$n11*3+$n10*4+$n9*5+$n8*6+$n7*7+$n6*8+$n5*9+$n4*2+$n3*3+$n2*4+$n1*5;
 $d1 = 11-($d1 % 11);
 if ($d1>=10) { $d1 = 0; } //Se o cálculo for igual a 10 então ele é zero 
   
 //Faz o calculo do segundo digito
 $d2 = $d1*2+$n12*3+$n11*4+$n10*5+$n9*6+$n8*7+$n7*8+$n6*9+$n5*2+$n4*3+$n3*4+$n2*5+$n1*6;
 $d2 = 11-($d2 % 11);
 if ($d2>=10) { $d2 = 0; } //se o cálculo for igual a 10 então ele é zero
    
 $calculado = $d1.$d2; //Define o que foi calculado
 $digitado = $cnpj{12}.$cnpj{13}; //Define o que foi digitado

 //Se o número que foi calculado for igual ao que foi digitado
 //a função retorna verdadeiro, senão retorna falso
 return (strcmp($calculado, $digitado) == 0);
}

C#
[+/-] Mostrar/Ocultar
public static bool isCNPJ(string cnpj) {
   int n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12;
   int d1,d2;
   string digitado, calculado;
 
   // Pega os 12 primeiros números
   n1 = Convert.ToInt32(cnpj.Substring(0,1)); 
   n2 = Convert.ToInt32(cnpj.Substring(1,1));
   n3 = Convert.ToInt32(cnpj.Substring(2,1));
   n4 = Convert.ToInt32(cnpj.Substring(3,1));
   n5 = Convert.ToInt32(cnpj.Substring(4,1));
   n6 = Convert.ToInt32(cnpj.Substring(5,1));
   n7 = Convert.ToInt32(cnpj.Substring(6,1));
   n8 = Convert.ToInt32(cnpj.Substring(7,1));
   n9 = Convert.ToInt32(cnpj.Substring(8,1));
   n10 = Convert.ToInt32(cnpj.Substring(9,1));
   n11 = Convert.ToInt32(cnpj.Substring(10,1));
   n12 = Convert.ToInt32(cnpj.Substring(11,1));
   
   // Faz o cálculo do primeiro dígito
   d1 = n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5;
   d1 = 11-(d1 % 11);
   if (d1 >= 10){
      d1 = 0;
   }

   // Faz o cálculo do segundo dígito
   d2 = d1*2+n12*3+n11*4+n10*5+n9*6+n8*7+n7*8+n6*9+n5*2+n4*3+n3*4+n2*5+n1*6;
   d2 = 11-(d2 % 11);
   if (d2 >= 10){
      d2 = 0;
   }
 
   calculado = Convert.ToString(d1)+Convert.ToString(d2);//Define o que foi calculado
   digitado = cnpj.Substring(12,2); //Define o que foi digitado

   //Se o número que foi calculado for igual ao que foi digitado
   //a função retorna verdadeiro, senão retorna falso
   return (calculado.Equals(digitado));
}

Um comentário:

Anônimo disse...

Gostei muito desta rotina de validação do CNPJ, simples e de fácil interpretação.