[DICA] Rotinas de validação de documentos
[size=18:590dbb1023]validar CNPJ[/size:590dbb1023]
[size=18:590dbb1023]validar CPF[/size:590dbb1023]
[size=18:590dbb1023]validar PIS[/size:590dbb1023]
[size=18:590dbb1023]validar Titulo de Eleitor[/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
Curtidas 1