Publicidade

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Renanbg

Formatar CPF/CNPJ

Alguém sabe de uma máscara que serve tanto para CPF quanto para CNPJ ?Tipo: o usuário digita um CPF e a função formata.. se o usuário digitar um CNPJ a função formata..Mas tem que ser no mesmo campo.Pode ser no evento de exit..ja vi isso em um programa mas n to conseguindo desenvolveracho q daria paar contar o numero de caracteres digitados e formatarAlguem tem uma ideia?

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carinha, ve se serve esta dica pra você...eu uso bastante. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Acho que é o que você quer.

Eu testei aqui agora e funcionou direitinho.

Haa....alem de formatar tbem valida o cpf e o cnpj...mto bom. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Testa ai..segue a Unit completinha com o teste que fiz agora.

 

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  StdCtrls, Buttons, Mask;type  TForm1 = class(TForm)	MaskEdit3: TMaskEdit;	BitBtn1: TBitBtn;	procedure BitBtn1Click(Sender: TObject);	procedure MaskEdit3Enter(Sender: TObject);  private	//funcao pra validar cpf e cnpj	function cpf(num: string): boolean;	function cgc(num: string): boolean;	{ Private declarations }  public	{ Public declarations }  end;var  Form1: TForm1;implementation{$R *.DFM}//funcao pra validar cpffunction 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;//funcao pra validar cpf e cpffunction TForm1.cgc(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]);  // Retira cada numero do Edit, e joda p/ variavel 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   cgc:=true  else   cgc:=false;end;procedure TForm1.BitBtn1Click(Sender: TObject);begin//testa cpfif length(maskedit3.text)=11 then beginIf not cpf(MaskEdit3.text) thenBeginShowMessage('CPF Inválido !!');Maskedit3.SetFocus;endelseMaskedit3.EditMask:='000.000.000-00;0';end;//testa cnpjif length(maskedit3.text)=14 then beginIf not cgc(maskedit3.text) thenBeginShowMessage('CNPJ Inválido !!');maskedit3.SetFocus;endelse Maskedit3.EditMask:='00.000.000/0000-00;0'; //este formata end;	end;procedure TForm1.MaskEdit3Enter(Sender: TObject);beginMaskedit3.EditMask:='';end;end.

Espero que ajude..

Abraço..t+

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara aqui n aconteceu nadafiz como você citou mas qndo clico no button n da nenhum mensagem...Pode me dar uma força?Abraço...

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza kra ... pra formatar no onExit, eu vo te da uma forcinha ... montei uma funcao aki ...

 

function TForm1.FormatarCPFCNPJ(const Doc: String): String;begin  if (Length(Doc) = 11) then  begin	Result:= Copy(Doc,1,3) + '.' + Copy(Doc,4,3) + '.' + Copy(Doc,7,3) + '-' + Copy(Doc,11,2);  end;  if (Length(Doc) = 14) then  begin	Result:= Copy(Doc,1,2) + '.' + Copy(Doc,3,3) + '.' + Copy(Doc,6,3) + '/' + Copy(Doc,9,4) + '-' + Copy(Doc,13,2);  end;end;

no OnExit :

txtCPFCNPJ.Text:= FormatarCPFCNPJ(txtCPFCNPJ.Text);

Qto a validacao, da uma olhada no Laboratorio de scripts q tem lahj ... ok

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza cara..consegui fazer funcionar a funcao do amigo Eder

 

Muito bom esse forum..sempre consegui o q preciso...

 

Aproveitando o embalo sem ter q abrir um novo topico to com problemas na impressao de um rebibo...

 

uso esse codigo p imprimir

 

procedure Tfrecibo.btnimprimirClick(Sender: TObject);varbookmark : tbookmarkstr;Mensagem:string;begin		Mensagem := 'Confirmas a impressão do recibo selecionado?';		if Application.MessageBox(PCHAR(Mensagem), 'Recibo RM', MB_ICONQUESTION + MB_YESNO)=MRYES then		begin		tbconfig.edit;		tbconfigNum_recibo.Value:= tbconfigNum_recibo.Value + 1;		tbconfig.post;		bookmark := tbrecibo.Bookmark;		tbrecibo.Filter := 'sacado= ''' + editsacado.Text + '''';		tbrecibo.Filtered := true;		QuickRep1.print;		tbrecibo.Filtered := false;		tbrecibo.Bookmark := bookmark;		end		else		exit; end;

Estou imprimindo em uma Epson LX 300 +

 

Imprime certo, mas apos imprimir a impressora ejeta mais uns 2 ou 3 boletos

 

N tem como fazer imprimir o q escolhi e ja parar sem ejetar os outros?

 

Mechi no tamanho do quickrep mas n adiantou

 

Abraço...

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

To com um pequeno detalhe p resolver a funcao que o Eder passouNo form tenho varios dbedits e 1 dbgridentao conforme você seleciona algo no dbgrid automaticamente os campos dos dbedits sao preenchidos com o registro que foi selecionadomas como agora tem esse maskedit isso n ocorrePergunta:tem um maskedit que trabalhe direto no banco como um dbedit?senao como faço p maskedit receber os dados da mesma forma que os dbedits?

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta usando a função q eu t passei ou a que o Eder te passou ?????

Naum existe um DBMaskEdit nativo do delphi ....

você pode fazer assim :

 

Maskedit.Text:= AdoQueryCPF.Text;

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa grato pela rapidez...

 

cara to usando a do Eder e resolvi assim

 

ao invez de usar maskedit usei dbedit e na linha

 

 

Maskedit3.EditMask:='00.000.000/0000-00;0';

troquei por

 

dbedit.field.EditMask:='00.000.000/0000-00;0';

funciona bem...

 

pode ser assim neh?

 

EDit: só achei uma falha...

 

formata certinho, mas se eu fechar o aplicativo e reabrir a formatacao some

 

pq será?

0

Compartilhar este post


Link para o post
Compartilhar em outros sites