Consistindo campo CNPJ

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;