Fórum Campo único para cnpj e cpf #426356

16/10/2012

0

Boa noite,

Gostaria de saber como usar um cpf ou cnpj num único dbedit.
Frederico Brigatte***

Frederico Brigatte***

Responder

Posts

16/10/2012

Deivison Melo

function TForm1.ValidaCPF(numCPF: string): boolean;
var
cpf: string;
x, total, dg1, dg2: Integer;
ret: boolean;
begin
ret:=True;
for x:=1 to Length(numCPF) do
if not (numCPF[x] in ['0'..'9', '-', '.', ' ']) then
ret:=False;
if ret then
begin
ret:=True;
cpf:='';
for x:=1 to Length(numCPF) do
if numCPF[x] in ['0'..'9'] then
cpf:=cpf + numCPF[x];
if Length(cpf) <> 11 then
ret:=False;
if ret then
begin
//1° dígito
total:=0;
for x:=1 to 9 do
total:=total + (StrToInt(cpf[x]) * x);
dg1:=total mod 11;
if dg1 = 10 then
dg1:=0;
//2° dígito
total:=0;
for x:=1 to 8 do
total:=total + (StrToInt(cpf[x + 1]) * (x));
total:=total + (dg1 * 9);
dg2:=total mod 11;
if dg2 = 10 then
dg2:=0;
//Validação final
if dg1 = StrToInt(cpf[10]) then
if dg2 = StrToInt(cpf[11]) then
ret:=True;
//Inválidos

case AnsiIndexStr(cpf,['00000000000','11111111111','22222222222','33333333333','44444444444',

'55555555555','66666666666','77777777777','88888888888','99999999999']) of

0..9: ret:=False;

end;

end
else
begin
//Se não informado deixa passar
if cpf = '' then
ret:=True;
end;
end;
ValidaCPF:=ret;
end;

Créditos: http://forum.imasters.com.br/topic/195531-validacao-de-cpfcnpj/
Responder

Gostei + 0

16/10/2012

Frederico Brigatte***

Isso é para validar cpf?
Responder

Gostei + 0

17/10/2012

Alisson Santos

O que pode fazer é colocar a opção de pessoa fisica ou juridica em um combo.
Se for pessoa fisica tu faz a formatação e validação do cpf e ele grava no banco essa informação se for juridica outra formatação e validação.
Basta criar um campo que receberá os registro. Acosenho você ter apenas um campo para controle disso.
Responder

Gostei + 0

17/10/2012

Frederico Brigatte***

Como faz isso?
Responder

Gostei + 0

17/10/2012

Gilvanio Gonçalves

Como faz isso?



Frederico, vc pode formatar e validar o cpf e cnpj tanto em edit
quanto a dbedit.

vou passar um exemplo com edit, e vc adapta ai no seu projeto,com dbedit ok.

neste exemplo vou utiliar dois edits e um label, o label será para mudar
o capiton de cpf ou cnpj, conforme o que for digitado, o edits, o que terá uso
neste exemplo é o edit1, o edit2 é só para receber a tabulção no seu caso ai, terá
apos o cpf/cnpj outro debedit qualquer,ok.

no label mude o caption dele para: CPF/CNPJ, para o usrio saber que
neste campo pode ser o cpf pu cnpj.como diise o label mudará quando
um cpf for digitado ficando assim CPF e o msmo para o cnpj.
vamos ao codigo:
as functions:

1
2
3
private
  function cpf(num: string):boolean;
  function cnpj(num: string): boolean;



codigo da function cnpj:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
implementation
 
{$R *.dfm}
 
{ TForm1 }
 
function TForm1.cnpj(num: string): boolean;
var
n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12: 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]);
n10:=StrToInt(num[10]);
n11:=StrToInt(num[11]);
n12:=StrToInt(num[12]);
d1:=n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5;
d1:=11-(d1 mod 11);
if d1>=10 then d1:=0;
d2:=d1*2+n12*3+n11*4+n10*5+n9*6+n8*7+n7*8+n6*9+n5*2+n4*3+n3*4+n2*5+n1*6;
d2:=11-(d2 mod 11);
if d2>=10 then d2:=0;
calculado:=inttostr(d1)+inttostr(d2);
digitado:=num[13]+num[14];
if calculado=digitado then
cnpj:=true
else
cnpj:=false;
end;



para function cpf :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function TForm1.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 evento onexit do edit1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
procedure TForm1.Edit1Exit(Sender: TObject);
Var
FormatarCNPJ:String;
FormatarCPF:String;
begin
if Length(Edit1.Text) <> 0 then
if Length(Edit1.Text) = 14 then
Begin
if cnpj(Edit1.Text) = True Then
Begin
FormatarCNPJ:= Copy(Edit1.Text, 1,2)
+ '.' + Copy(Edit1.Text, 3,3)
+'.' + Copy(Edit1.Text, 6,3)
+ '/' +Copy(Edit1.Text, 9,4)
+ '-' + Copy(Edit1.Text, 13,2);
Edit1.Text:= FormatarCNPJ;
Label1.Caption := 'CNPJ';
 End
Else
begin
ShowMessage('CNPJ com erro. favor verificar');
Edit1.SetFocus;
 end;
End
Else
if Length(Edit1.Text) = 11 then
Begin
if cpf(Edit1.Text) = True Then
 Begin
formatarCPF:= Copy(Edit1.Text, 1,3)
 
 + '.' + Copy(Edit1.Text, 4,3)
 
 + '.' + Copy(Edit1.Text,7,3)
 
 + '-' + Copy(Edit1.Text, 10,2);
 Edit1.Text:= FormatarCPF;
 Label1.Caption := 'CPF';
 End
 Else
begin
ShowMessage('CPF com erro. favor verificar');
Edit1.SetFocus;
 end;
 End
Else
 Begin
 ShowMessage ('O CPF tem 11 nº e CNPJ tem 14 nº.'#13'Prencha com números');
 Edit1.SetFocus;
 Edit1.SelectAll;
 
End;
 
end;



no evento onenter do edit1://

Este código tem a função de toda vez que entrar no Edit,
retirar qualquer caracter que não seja numérico.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Edit1Enter(Sender: TObject);
var
 I: integer;
 S, Texto: string;
begin
 
S := '';
Texto := Edit1.Text;
 
 for I := 1 to Length(Texto) do
  begin
  if (Texto[I] in ['0'..'9']) then
   begin
    S := S + Copy(Texto, I, 1);
   end;
 end;
 Edit1.Text := S;
end;
 
end.


faça o teste ai e veja como funciona, quando o usuario digitar um cpf ou
cnpj ao teclar em tab, o edit formatará os numeros com seus pontos e traços
ou seja o usuario só precisa digitar os numeros do cpf ou cnpj, sem colocar
ponto nem nada.
e ao disparar o evento onexit ( o Tab) verifica se o cpf ou cnpj é valido.
caso não seja ele recebe uma mensagem que cpf ou cnpj digitado nã é valido!.
legal não é?

o mais interesante, é que sou novato neste forum, eu ia te passar uma rotina minha
mas, eu já tinha visto um artigo aqui no forum mesmo a respeito do que vc precisa?.

portanto o credito deste exemplo é para o autor: Marco A. S. Carvalho

estranho é que meus colegas aqui do forum , moderador e tals, parece que não
sabem da existência deste artigo, se não no inicio do topico eles já te indicavam
o link para vc acompanhar o exemplo.

sem ficar no Blá Blá, por combo sei lá mais o que!.

link abaixo, ACESSE E LEIA.


https://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=17317


consertesa seu problema esta resolvido.

obs, este tipo de rotina tem aos quilos na internet, Falows!.

ATE+

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar