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:
Gostei muito desta rotina de validação do CNPJ, simples e de fácil interpretação.
Postar um comentário