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