Array
(
)

Verifica o CPF e CNPJ

Ullrich
   - 08 fev 2006

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.


Rjun
   - 08 fev 2006

Usar as tags #Código

ajudam.

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.


Paullsoftware
   - 08 fev 2006

código da finção:

#Código

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:



#Código
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:


Ullrich
   - 17 fev 2006

Valeu a dica obrigado.