Buscar

Validar CNPJ - Bastante explicado e comentado.

Código

05.825.818/0001-67
12.345.678/9012
 
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;

n12=1*2=2
n11=0*3=0
n10=0*4=0
n09=0*5=0
n08=8*6=48   =214
n07=1*7=7
n06=8*8=64
n05=5*9=45
n04=2*2=4
n03=8*3=24
n02=5*4=20
n01=0*5=0


d1= 11-(214 resto da divisao 11=5)
d1=11-5=6 // reparou q esse numero e 1º digito verificador?

if d1>=10 then d1=0;



d2:=12+3+0+0+0+56+8+72+10+6+32+25+0; = 224 // é a mesma ideia do d1 so que de outra maneira!
d2:=11-(d2 mod 11=4);
d2:=11-4 = 7 // reparou q esse numero e 2º digito verificador?

calculado:=inttostr(d1=6)+inttostr(d2=7);

digitado:=num[13=d1]+num[14=d2];

//Se o número que foi calculado for igual ao que foi digitado
//a função retorna verdadeiro, senão retorna falso

if calculado=digitado then
      cnpj:=true
   else
     cnpj:=false;
end;

na proceduro de edit vc coloca um evento exit
+ou- assim
procedure TForm1.Edit1Exit(Sender: TObject);
begin
if cpf(edit1.Text) = false then showmessage(CNPJ - Errado!);
edit1.setFocus; // volta para o edit se estiver certo tuda essa procedure passa adiante!

end;

CODIGO PURO
function CNPJ(num: string): boolean;
var
   n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12: integer;
   d1,d2: integer;
   digitado, calculado: string;
begin
   
   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]);
 
   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;
 
 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;
   calculado:=inttostr(d1)+inttostr(d2);
   digitado:=num[13]+num[14];
   if calculado=digitado then
      cnpj:=true
   else
     cnpj:=false;
end;

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Object pascal
Adicionada dia: 18/01/10
Por: Breno
Visualizada: 5618 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009