Validando um CNPJ

 

Passe o valor do CNPJ em questão para a função abaixo (em forma de string), caso seja retornado o valor de FALSE o CNPJ não é válido.

 

function TestaCnpj(xCNPJ: string):Boolean;

var

  d1,d4,xx,nCount,fator,resto,digito1,digito2: Integer;

  Check: string;

begin

  d1 := 0;

  d4 := 0;

  xx := 1;

  for nCount := 1 to Length( xCNPJ )-2 do

  begin

    if Pos( Copy( xCNPJ, nCount, 1 ), '/-.' ) = 0 then

    begin

      if xx < 5 then

      begin

        fator := 6 - xx;

      end

      else

      begin

        fator := 14 - xx;

      end;

      d1 := d1 + StrToInt( Copy( xCNPJ, nCount, 1 ) ) * fator;

      if xx < 6 then

      begin

        fator := 7 - xx;

      end

      else

      begin

        fator := 15 - xx;   

      end;

        d4 := d4 + StrToInt( Copy( xCNPJ, nCount, 1 ) ) * fator;

        xx := xx+1;

   end;

  end;

  resto := (d1 mod 11);

  if resto < 2 then

  begin

    digito1 := 0;

  end

  else

  begin

    digito1 := 11 - resto;

  end;

  d4 := d4 + 2 * digito1;

  resto := (d4 mod 11);

  if resto < 2 then

  begin

    digito2 := 0;

  end

  else

  begin

    digito2 := 11 - resto;

  end;

  Check := IntToStr(Digito1) + IntToStr(Digito2);

  if Check <> copy(xCNPJ,succ(length(xCNPJ)-2),2) then

  begin

    Result := False;

  end

  else

  begin

    Result := True;

  end;

 end;