Validar CPF/CNPJ e CEI no Delphi
Esta função valida o CNPJ/CPF ou CEI passado como parâmetro, retornando ou não uma mensagem de erro ao usuário. Ela usa a função somentenumerosnastring, postado anteriormente.
Aconselho formatar o Cnpj/CPF direto no banco numa trigger beforeinsert/update, usando a Stored procedure postada anteriormente
//Verifica se o numero passado no parametro é CNPJ/CPF ou CEI e valida o mesmo. Se nao for válido e o parametro ExibeMSGErro for true, exibe um messagebox co icone de erro.
var
i,d,b,
Digito : Byte;
Soma : Integer;
CNPJ,CPF,CEI : Boolean;
DgPass,
DgCalc,DocMsg, MsgDialogo : String;
function IIf(pCond:Boolean;pTrue,pFalse:Variant): Variant;
begin
If pCond Then Result := pTrue
else Result := pFalse;
end;
function ValidaCEI(StrCEI:String):Boolean;
const
PESO = '74185216374';
var
Numero,DV_DIG,StrSoma :String;
soma,i,valor1,valor2,
resto,PRIDIG :integer;
begin
Result := True;
if Length(Trim(StrCEI)) = 0 then Exit;
Numero := Copy(StrCEI,Length(StrCEI)-12+1,12);
DV_DIG := Copy(Numero,12,1);
soma := 0;
for i:= 1 to 11 do
soma := soma + (StrToInt(Copy(Numero,i,1)) * StrToInt(Copy(PESO,i,1)));
StrSoma:= FormatFloat('0000',soma);
valor1 := StrToInt(Copy(StrSoma,4,1));
valor2 := StrToInt(Copy(StrSoma,3,1));
resto := (valor1+valor2) Mod 10;
if resto <> 0 then PRIDIG := 10 - resto;
if PRIDIG <> StrToInt(DV_DIG) then
Result := False;
end;
begin
Result := False;
Numero := ApenasNumerosNaString(Numero);
// Caso o número não seja 11 (CPF) ou 14 (CNPJ), aborta
CPF := Length(Numero)=11;
CNPJ:= Length(Numero)=14;
CEI := Length(Numero)=12;
case Length(Numero) of
11: DocMsg:= 'CPF';
14: DocMsg:= 'CNPJ';
12: DocMsg:= 'CEI';
end;
if (Length(Numero) in [11,12,14]) then
begin
if CPF or CNPJ then
begin
// Separa o número do dígito
DgCalc := '';
DgPass := Copy(Numero,Length(Numero)-1,2);
Numero := Copy(Numero,1,Length(Numero)-2);
// Calcula o digito 1 e 2
for d := 1 to 2 do
begin
B := IIF(D=1,2,3); // BYTE
SOMA := IIF(D=1,0,STRTOINTDEF(DGCALC,0)*2);
for i := Length(Numero) downto 1 do begin
Soma := Soma + (Ord(Numero[I])-Ord('0'))*b;
Inc(b);
if (b > 9) And CNPJ Then
b := 2;
end;
Digito := 11 - Soma mod 11;
if Digito >= 10 then
Digito := 0;
DgCalc := DgCalc + Chr(Digito + Ord('0'));
end;
Result := DgCalc = DgPass;
end else
Result := ValidaCEI(Numero);
MsgDialogo:= 'O número do '+DocMsg+' digitado é inválido!';
end
else
begin
MsgDialogo:= 'O número '+Numero+' digitado é inválido!'+#13+'Não equivale a nenhum CNPJ/CPF ou CEI válido no país.';
end;
if (not Result) and (ExibeMsgErro) then
Application.MessageBox(Pchar(MsgDialogo),'Atenção',mb_ICONERROR+MB_OK);
end;
preciso desta função mas em javascript não estou conseguindo. tem alguma dica?
ResponderExcluir