30/01/2006

validar cpf / cnpj

- pessoal, eu usava um componente que validava o cpf / cnpj, porem dava muito problema. consegui as funções de validação do mesmo no dicas e truques delphi, porem nunca trabalhei com elas.
gostaria de saber como faço pra validar eles no Tedit, ou seja, em que evento do edit eu valido as funções e como...
abraços!


function CalculaCnpjCpf(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;
 

function ApenasNumerosStr(pStr:String): String;
Var
I: Integer;
begin
  Result := ´´;
  For I := 1 To Length(pStr) do
   If pStr&91;I&93; In &91;´1´,´2´,´3´,´4´,´5´,´6´,´7´,´8´,´9´,´0´&93; Then
     Result := Result + pStr&91;I&93;;
end;
 

function IIf(pCond:Boolean;pTrue,pFalse:Variant): Variant;
begin
  If pCond Then Result := pTrue
  else Result := pFalse;
end;



Mahdak

Respostas

30/01/2006

Franthesco

Amigo, tente usar assim:

// DECLARA NA TYPE
function cpf(num: string): boolean;

// ESTE É O CÓDIGO
function cpf(num: string): boolean;

var

n1,n2,n3,n4,n5,n6,n7,n8,n9: integer;

d1,d2: integer;

digitado, calculado: string;

begin

n1 := StrToInt(num[1]);

n2 := StrToInt(num[2]);

n3 := StrToInt(num[3]);

n4 := StrToInt(num[4]);

n5 := StrToInt(num[5]);

n6 := StrToInt(num[6]);

n7 := StrToInt(num[7]);

n8 := StrToInt(num[8]);

n9 := StrToInt(num[9]);

d1 := n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10;

d1 := 11-(d1 mod 11);

if d1> = 10 then

d1 := 0;

d2 := d1*2+n9*3+n8*4+n7*5+n6*6+n5*7+n4*8+n3*9+n2*10+n1*11;

d2 := 11-(d2 mod 11);

if d2> = 10 then

d2 := 0;

calculado:=inttostr(d1)+inttostr(d2);

digitado:=num[10]+num[11];

if calculado=digitado then

cpf := true

else

cpf:=false;

end;


// NO ON EXIT DO EDIT COLOCA ASSIM
IF NOT CPF(Edit1.Text) Then
BEGIN
ShowMessage (´CPF INCORRETO!´);
end



----AVISE SE NÃO DER CERTO----

Abraços...


Responder Citar

30/01/2006

Mahdak

valleu brother deu certinho

:wink:


Responder Citar