GARANTIR DESCONTO

Fórum [DICA] Rotinas de validação de documentos #355645

19/03/2008

0

[size=18:590dbb1023]validar CNPJ[/size:590dbb1023]
function ValidaCNPJ(sCNPJ: string; MostraMsg: boolean = true): boolean;
const
  String1 = ´543298765432´;
  String2 = ´654329876543´;
var
  i,j,Digito: byte;
  Controle: string[2];
  StringX: string;
  Soma: smallint;
begin
  sCNPJ := Copy( ´00000000000000´+Trim(sCNPJ),(Length(Trim(sCNPJ))+14)-13,14 );
  Controle := ´   ´;
  Digito := 0;
  StringX := String1;
  for i := 1 to 2 do
  begin
    Soma := 0;
    if i = 2 then StringX := String2;

    for j := 1 to 12 do
      Soma := Soma + ( StrToIntDef(sCNPJ[j],0) * StrToIntDef(StringX[j],0) );

    if i = 2 then
      Soma := Soma + (2 * Digito);

    Digito := (Soma * 10) Mod 11;

    if Digito = 10 then
      Digito := 0;

    Controle[i] := IntToStr( Digito )[1];
  end;

  Result := Controle = Copy( sCNPJ,13,2 );

  if not Result and MostraMsg then
    Application.MessageBox(´Número de CNPJ inválido!´,´Atenção´,mb_TaskModal + mb_IconWarning);
end;


[size=18:590dbb1023]validar CPF[/size:590dbb1023]
function ValidaCPF(sCPF: string; MostraMsg: boolean = true): boolean;
const
  String1 = ´100908070605040302´;
  String2 = ´111009080706050403´;
var
  i,j,Digito: byte;
  Controle: string[2];
  StringX: string;
  Soma: smallint;
begin
  sCPF := Copy( ´00000000000´+Trim(sCPF),(Length(Trim(sCPF))+11)-10,11 );
  Controle := ´   ´;
  Digito := 0;
  StringX := String1;

  for i := 1 to 2 do
  begin
    Soma := 0;
    if i = 2 then StringX := String2;

    for j := 1 to 9 do
      Soma := Soma + ( StrToIntDef(sCPF[j],0) * StrToIntDef( Copy( StringX,j+(j-1),2 ),0 ) );

    if i = 2 then
      Soma := Soma + (2 * Digito);

    Digito := (Soma * 10) Mod 11;

    if Digito = 10 then
      Digito := 0;

    Controle[i] := IntToStr( Digito )[1];
  end;

  Result := Controle = Copy( sCPF,10,2 );

  if not Result and MostraMsg then
    Application.MessageBox(´Número de CPF inválido!´,´Atenção´,mb_TaskModal + mb_IconWarning);
end;


[size=18:590dbb1023]validar PIS[/size:590dbb1023]
function ValidaPIS(sPIS: string; MostraMsg: boolean = true): boolean;
var
  iSoma: integer;
  i, iDigito, iDigVer, iMult: shortint;
begin
  Result := Length(Trim(sPIS)) = 11;

  if Result then
  begin
    iDigVer := strtoint(sPIS[11]);
    iSoma := 0;
    iMult := 2;

    for i := 10 downto 1 do
    begin
      iSoma := iSoma + (iMult * strtoint(sPIS[I]));
      if iMult < 9
      then Inc(iMult)
      else iMult := 2;
    end;
    iDigito := 11 - (iSoma mod 11);

    if iDigito > 9 then iDigito := 0;
      Result := (iDigVer = iDigito);
  end;

  if not Result and MostraMsg then
    Application.MessageBox(´Número do PIS inválido!´,´Atenção´,mb_TaskModal + mb_IconWarning);
end;


[size=18:590dbb1023]validar Titulo de Eleitor[/size:590dbb1023]
function ValidaTituloEleitor(sTitulo: string; MostraMsg: boolean = True): boolean;
const
  Multiplicadores: array[1..11] of shortint = (10,9,8,7,6,5,4,3,2,4,3);
var
  iCont, iAux, DigCalculado, DigInformado: shortint;
  iDigito: integer;
begin
  result := false;
  if Length(stitulo) = 0 then
    exit;

  stitulo := StringOfChar(´0´,13-Length(stitulo))+stitulo; // 13 posições
  iAux := StrToInt(Copy(stitulo,10,2)); // valor para auxiliar o cálculo do dígito

  // dígito verificador
  DigInformado := StrToInt(Copy(stitulo,12,2));;
  DigCalculado := 0;

  iDigito := 0;
  for iCont := 1 to 11 do
  begin
    iDigito := iDigito + (StrToInt(stitulo[iCont]) * Multiplicadores[iCont]);
    if iCont in [9,11] then
    begin
      iDigito := iDigito mod 11;
      if iDigito > 1 then
        iDigito := 11 - iDigito
      else
      begin
        if iAux <= 2
        then iDigito := 1 - iDigito
        else iDigito := 0;
      end;
      if iCont = 9
      then Digcalculado := iDigito * 10
      else Digcalculado := Digcalculado + iDigito;
      iDigito := iDigito * 2;
    end;
  end;

  // verifica se o digito é verdadeiro
  Result := DigCalculado = DigInformado;

  if not Result and MostraMsg then
    Application.MessageBox(´Número do título de eleitor inválido!´,´Atenção´,mb_TaskModal + mb_IconWarning);
end;



Emerson Nascimento

Emerson Nascimento

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar