08/02/2006

Verifica o CPF e CNPJ

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.


Ullrich

Respostas

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.


Responder Citar

08/02/2006

Paullsoftware

código da finção:

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&93;)-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,&91;mbOK&93;,0);
    EditCPF.Clear;
    EditCPF.SetFocus;
    end
       else
       EditCPF.SetFocus;


funciona perfeitamente! :wink:


Responder Citar

17/02/2006

Ullrich

Valeu a dica obrigado.


Responder Citar