Verifica o CPF e CNPJ
08/02/2006
0
Copiei esta função:
function CalculaCnpjCpf(Numero : String) : String;
var
i,j,k, Soma, Digito : Integer;
CNPJ : Boolean;
begin
Result := Numero;
case Length(Numero) of
9:
CNPJ := False;
12:
CNPJ := True;
else
Exit;
end;
for j := 1 to 2 do
begin
k := 2;
Soma := 0;
for i := Length(Result) downto 1 do
begin
Soma := Soma + (Ord(Result[i])-Ord(´0´))*k;
Inc(k);
if (k > 9) and CNPJ then
k := 2;
end;
Digito := 11 - Soma mod 11;
if Digito >= 10 then
Digito := 0;
Result := Result + Chr(Digito + Ord(´0´));
end;
end;
Executei desta maneira:
CalculaCnpjCpf(mkedtCpfCnpj.Text);
Agora, como faço para testar se o CPF é válido ou não, devo usar a variavel CNPJ : Boolean , mas como?
Obrigado pela atenção.
function CalculaCnpjCpf(Numero : String) : String;
var
i,j,k, Soma, Digito : Integer;
CNPJ : Boolean;
begin
Result := Numero;
case Length(Numero) of
9:
CNPJ := False;
12:
CNPJ := True;
else
Exit;
end;
for j := 1 to 2 do
begin
k := 2;
Soma := 0;
for i := Length(Result) downto 1 do
begin
Soma := Soma + (Ord(Result[i])-Ord(´0´))*k;
Inc(k);
if (k > 9) and CNPJ then
k := 2;
end;
Digito := 11 - Soma mod 11;
if Digito >= 10 then
Digito := 0;
Result := Result + Chr(Digito + Ord(´0´));
end;
end;
Executei desta maneira:
CalculaCnpjCpf(mkedtCpfCnpj.Text);
Agora, como faço para testar se o CPF é válido ou não, devo usar a variavel CNPJ : Boolean , mas como?
Obrigado pela atenção.
Ullrich
Curtir tópico
+ 0
Responder
Posts
08/02/2006
Rjun
[b:732f3520ab]Usar as tags [code:1:732f3520ab][/code:1:732f3520ab] ajudam.[/b:732f3520ab]
Você não precisa fazer nada para validar o CNPJ. Sua função identifica pelo tamanho do código informado se o parâmetro é CPF ou CNPJ.
Você não precisa fazer nada para validar o CNPJ. Sua função identifica pelo tamanho do código informado se o parâmetro é CPF ou CNPJ.
Responder
08/02/2006
Paullsoftware
código da finção:
pra facilitar o seu entendimento eu uso no evento onKeyPress do componente que recebe o CPF e fica mais ou menos assim:
funciona perfeitamente! :wink:
function ChkCPF_CNPJ(Numero : String) : Boolean; Var i,d,b, Digito : Byte; Soma : Integer; CNPJ : Boolean; DgPass, DgCalc : String; begin Result := False; Numero := ApenasNumerosStr(Numero); // Caso o número não seja 11 (CPF) ou 14 (CNPJ), aborta Case Length(Numero) of 11: CNPJ := False; 14: CNPJ := True; else Exit; end; // Separa o número do digito 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;
pra facilitar o seu entendimento eu uso no evento onKeyPress do componente que recebe o CPF e fica mais ou menos assim:
if Key = #13 then if Not CalculaCnpjCpf(EditCPF.Text) then begin MessageDlg(´O número do C.P.F: ´+ DBEdit12.Text +´ é Inválido´,mtError,[mbOK],0); EditCPF.Clear; EditCPF.SetFocus; end else EditCPF.SetFocus;
funciona perfeitamente! :wink:
Responder
Clique aqui para fazer login e interagir na Comunidade :)