Array
(
)

validar cpf / cnpj

Mahdak
   - 30 jan 2006

- 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!

#Código



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])-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[I] In [´1´,´2´,´3´,´4´,´5´,´6´,´7´,´8´,´9´,´0´] Then
Result := Result + pStr[I];
end;


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



Franthesco
   - 30 jan 2006

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...


Mahdak
   - 30 jan 2006

valleu brother deu certinho

:wink: