Rotina para consistir um número de CNPJ.
//------------------------------------------------------------------------------
// Consistencia do campo CNPJ
// Se o campo informado estiver em branco eh considerado CNPJ valido,
// Em caso contrario o CNPJ somente eh valido se o digito de controle bater
//------------------------------------------------------------------------------
function ConsisteCNPJ(Texto : String) : Boolean;
var
Limpo : String;
Posic : array[1..14] of integer;
I, N, Dig1, Dig2, PriDig, SegDig : integer;
begin
Limpo := '';
N := 0;
for I := 1 to Length(Texto) do
begin
if Texto[I] in ['0'..'9'] then
begin
Limpo := Limpo + Texto[I];
Inc(N);
end;
end;
if N = 0 then
begin
ConsisteCNPJ := Trim(Texto) = '';
end
else
begin
while N < 14 do
begin
Limpo := '0' + Limpo;
Inc(N);
end;
for I := 1 to 14 do
Posic[I] := Ord(Limpo[I]) - $30;
{Calcula primeiro digito do CNPJ}
Dig1 := Posic[1]*5+Posic[2]*4+Posic[3]*3+Posic[4]*2+Posic[5]*9+Posic[6]*8+
Posic[7]*7+Posic[8]*6+Posic[9]*5+Posic[10]*4+Posic[11]*3+Posic[12]*2;
Dig2 := Dig1 mod 11;
If (Dig2 = 0) or (Dig2 = 1) then
PriDig := 0
else
PriDig := 11 - Dig2;
{Calcula o segundo digito do CNPJ}
Dig1 := Posic[1]*6+Posic[2]*5+Posic[3]*4+Posic[4]*3+Posic[5]*2+Posic[6]*9+
Posic[7]*8+Posic[8]*7+Posic[9]*6+Posic[10]*5+Posic[11]*4+Posic[12]*3+
PriDig*2;
Dig2 := Dig1 mod 11;
If (Dig2 = 0) or (Dig2 = 1) then
SegDig := 0
else
SegDig := 11 - Dig2;
ConsisteCNPJ := (PriDig = Posic[13]) and (SegDig = Posic[14]);
end;
end;