ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

FORMATAR CNPJ E CPF NO MESMO EDIT

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
mr.solutions
Aprendiz
Aprendiz


Registrado: Terça-Feira, 2 de Setembro de 2008
Mensagens: 278

MensagemEnviada: Qua Mai 27, 2009 11:33 am    Assunto: FORMATAR CNPJ E CPF NO MESMO EDIT Responder com Citação

Olá pessoal, eu sei que ja tem esse topico no site, umas das duvidas mais procuradas, o meu problema e o seguinte e uso uma função apenas para preencher os campos CNPJ/CPF na minha tabela
ou seja se for cliente CNPJ ele fica 00.000.000/0000-00 e se for CPF ele fica 000.000.000-00, bom até ai tudo bem...ele trabalha certinho mas na hora de verificar se o cpf´ou cnpj e valido ai nao funciona...o que quero colocar é que preciso validar os dois com essa formatação no mesmo edit...

eis a função que estou usando

function DeletaCaract(texto, excluir : string ) : string;
begin

while Pos(excluir, texto) > 0 do
Delete(texto, Pos(excluir, texto), 1);
result := texto;

end;
{formata CNPJ/CPF inserindo simbolos necessários}
Function Formata_CNPJ_CPF(Texto: String): String;
Begin

// Limpar simbolos padrões do CNPJ e CPF
Texto:=DeletaCaract(Texto,'-');
Texto:=DeletaCaract(Texto,'/');
Texto:=DeletaCaract(Texto,'.');

// 14 digitos significa CNPJ
If length(Texto)=14 then
begin

result :=
copy(Texto, 1, 2) + '.' +
copy(Texto, 3, 3) + '.' +
copy(Texto, 6, 3) + '/' +
copy(Texto, 9, 4) + '-' +
copy(Texto, 13, 2);
end;

// 11 digitos significa CPF
If length(Texto)=11 then
begin

result := copy(Texto, 1, 3) + '.' +
copy(Texto, 4, 3) + '.' +
copy(Texto, 7, 3) + '-' +
copy(Texto, 10, 2);



End;
{ excluir caractere especifico }

end;


e no evento onexit do EDIT para formatação estou usando assimmm.....

dm.table1.FieldByName('CPFCNPJ').AsString := Formata_CNPJ_CPF(dm.table1.FieldByName('CPFCNPJ').AsString);


ele formata correto...agora so falta verificar os dois se são validos...aguardo a ajuda...de vcs....


Att mr.solutions.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
naldosouza
Novato
Novato


Registrado: Terça-Feira, 22 de Julho de 2008
Mensagens: 17

MensagemEnviada: Qua Mai 27, 2009 12:02 pm    Assunto: bem a maneira que eu uso é assim Responder com Citação

coloque um Combobox1 e um MaskEdit
no combobox1 coloque FISICA
JURIDICA
--------------------------------------------------------------------------------
function TestaCNPJ(const cCNPJ: string): boolean;
var
i, soma, mult: integer;
CGC: string;
begin
ChkCNPJ := false;
CGC := LimpaString(cCNPJ);
if Length(CGC) <14> 9 then mult := 2;
end;
mult := soma mod 11;
if mult <= 1 then mult := 0 else mult := 11 - mult;
if mult <CharToInt> 9 then mult := 2;
end;
mult := soma mod 11;
if mult <= 1 then mult := 0 else mult := 11 - mult;
ChkCNPJ := mult = CharToInt(CGC[14]);
end;

--------------------------------------------------------------
function TestaCpf( xCPF:String ):Boolean;
{Testa se o CPF é válido ou não}
Var
d1,d4,xx,nCount,resto,digito1,digito2 : Integer;
Check : String;
Begin
d1 := 0; d4 := 0; xx := 1;
for nCount := 1 to Length( xCPF )-2 do
begin
if Pos( Copy( xCPF, nCount, 1 ), '/-.' ) = 0 then
begin
d1 := d1 + ( 11 - xx ) * StrToInt( Copy( xCPF, nCount, 1 ) );
d4 := d4 + ( 12 - xx ) * StrToInt( Copy( xCPF, nCount, 1 ) );
xx := xx+1;
end;
end;
resto := (d1 mod 11);
if resto < 2 then
begin
digito1 := 0;
end
else
begin
digito1 := 11 - resto;
end;
d4 := d4 + 2 * digito1;
resto := (d4 mod 11);
if resto < 2 then
begin
digito2 := 0;
end
else
begin
digito2 := 11 - resto;
end;
Check := IntToStr(Digito1) + IntToStr(Digito2);
if Check <> copy(xCPF,succ(length(xCPF)-2),2) then
begin
Result := False;
end
else
begin
Result := True;
end;
end;

-----------------------------------------------------------------------------
if combobox1.Text='FISICA' then
begin
MaskEdit1.EditMask:='999.999.999-99;0;_';
MaskEdit1.Text:=DadoCPFCNPJ.ASString;
TestaCpf(MaskEdit1.Text);
abort;
end;
if combobox1.Text='JURIDICA' then
begin
MaskEdit1.EditMask:='99999999/9999-99;0;_';
MaskEdit1.Text:=DadoCPFCNPJ.ASString;
TestaCNPJ(MaskEdit1.Text);
abort;
end;

-----------------------------------------------------------------
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
mr.solutions
Aprendiz
Aprendiz


Registrado: Terça-Feira, 2 de Setembro de 2008
Mensagens: 278

MensagemEnviada: Qua Mai 27, 2009 12:21 pm    Assunto: Re: bem a maneira que eu uso é assim Responder com Citação

naldosouza escreveu:
coloque um Combobox1 e um MaskEdit
no combobox1 coloque FISICA
JURIDICA
--------------------------------------------------------------------------------
function TestaCNPJ(const cCNPJ: string): boolean;
var
i, soma, mult: integer;
CGC: string;
begin
ChkCNPJ := false;
CGC := LimpaString(cCNPJ);
if Length(CGC) <14> 9 then mult := 2;
end;
mult := soma mod 11;
if mult <= 1 then mult := 0 else mult := 11 - mult;
if mult <CharToInt> 9 then mult := 2;
end;
mult := soma mod 11;
if mult <= 1 then mult := 0 else mult := 11 - mult;
ChkCNPJ := mult = CharToInt(CGC[14]);
end;

--------------------------------------------------------------
function TestaCpf( xCPF:String ):Boolean;
{Testa se o CPF é válido ou não}
Var
d1,d4,xx,nCount,resto,digito1,digito2 : Integer;
Check : String;
Begin
d1 := 0; d4 := 0; xx := 1;
for nCount := 1 to Length( xCPF )-2 do
begin
if Pos( Copy( xCPF, nCount, 1 ), '/-.' ) = 0 then
begin
d1 := d1 + ( 11 - xx ) * StrToInt( Copy( xCPF, nCount, 1 ) );
d4 := d4 + ( 12 - xx ) * StrToInt( Copy( xCPF, nCount, 1 ) );
xx := xx+1;
end;
end;
resto := (d1 mod 11);
if resto < 2 then
begin
digito1 := 0;
end
else
begin
digito1 := 11 - resto;
end;
d4 := d4 + 2 * digito1;
resto := (d4 mod 11);
if resto < 2 then
begin
digito2 := 0;
end
else
begin
digito2 := 11 - resto;
end;
Check := IntToStr(Digito1) + IntToStr(Digito2);
if Check <> copy(xCPF,succ(length(xCPF)-2),2) then
begin
Result := False;
end
else
begin
Result := True;
end;
end;

-----------------------------------------------------------------------------
if combobox1.Text='FISICA' then
begin
MaskEdit1.EditMask:='999.999.999-99;0;_';
MaskEdit1.Text:=DadoCPFCNPJ.ASString;
TestaCpf(MaskEdit1.Text);
abort;
end;
if combobox1.Text='JURIDICA' then
begin
MaskEdit1.EditMask:='99999999/9999-99;0;_';
MaskEdit1.Text:=DadoCPFCNPJ.ASString;
TestaCNPJ(MaskEdit1.Text);
abort;
end;

-----------------------------------------------------------------



vou testar
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
mr.solutions
Aprendiz
Aprendiz


Registrado: Terça-Feira, 2 de Setembro de 2008
Mensagens: 278

MensagemEnviada: Qua Mai 27, 2009 12:29 pm    Assunto: Re: bem a maneira que eu uso é assim Responder com Citação

naldosouza escreveu:
coloque um Combobox1 e um MaskEdit
no combobox1 coloque FISICA
JURIDICA
--------------------------------------------------------------------------------
function TestaCNPJ(const cCNPJ: string): boolean;
var
i, soma, mult: integer;
CGC: string;
begin
ChkCNPJ := false;
CGC := LimpaString(cCNPJ);

-----------------------------------------------------------------



da um erro nesta linha
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
mr.solutions
Aprendiz
Aprendiz


Registrado: Terça-Feira, 2 de Setembro de 2008
Mensagens: 278

MensagemEnviada: Qua Mai 27, 2009 3:06 pm    Assunto: Re: bem a maneira que eu uso é assim Responder com Citação

mr.solutions escreveu:
naldosouza escreveu:
coloque um Combobox1 e um MaskEdit
no combobox1 coloque FISICA
JURIDICA
--------------------------------------------------------------------------------
function TestaCNPJ(const cCNPJ: string): boolean;
var
i, soma, mult: integer;
CGC: string;
begin
ChkCNPJ := false;
CGC := LimpaString(cCNPJ);

-----------------------------------------------------------------



da um erro nesta linha


TENHO QUE CRIAR ALGUMA FUNÇÃO OU VARIAVEL NAS SECOES PRIVATE OU PUBLIC????
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
valdoedri
Profissional
Profissional


Registrado: Segunda-Feira, 7 de Março de 2005
Mensagens: 523
Localização: Campo Grande MS

MensagemEnviada: Qua Mai 27, 2009 3:33 pm    Assunto: Responder com Citação

Formatar CPF
Código:
Function FormataCPF(Numero: String): String;
var
   tmp,resultado: String;
   indx, indx1: integer;
begin
     if Length(Numero) < 10 Then
        begin
        result := '';
        exit;
        end;

     for indx := 1 to Length(Numero) do
         begin
         if Numero[indx] in ['0'..'9'] Then
              resultado := resultado + Numero[indx];
         end;
     if Length(Resultado) < 11 Then
        resultado := StringOfChar('0', 11 - Length(Resultado)) + resultado;
     tmp := Copy(resultado,1,3) + '.';
     tmp := tmp + Copy(resultado,4,3) + '.';
     tmp := tmp + Copy(resultado,7,3) + '-';
     tmp := tmp + Copy(resultado,10,2);
     Result := tmp;
end;

// Usar
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text := FormataCPF(edit1.text);
end;


Formatar CNPJ
Código:
Function FormataCNPJ(Numero: String): String;
var
   tmp,resultado: String;
   indx, indx1: integer;
begin
     if Length(Numero) < 12 Then
        begin
        result := '';
        exit;
        end;

     for indx := 1 to Length(Numero) do
         begin
         if Numero[indx] in ['0'..'9'] Then
              resultado := resultado + Numero[indx];
         end;
     if Length(Resultado) < 14 Then
        resultado := StringOfChar('0', 14 - Length(Resultado)) + resultado;
     tmp := Copy(resultado,1,2) + '.';
     tmp := tmp + Copy(resultado,3,3) + '.';
     tmp := tmp + Copy(resultado,6,3) + '/';
     tmp := tmp + Copy(resultado,9,4) + '-' + Copy(resultado,13,2);
     Result := tmp;
end;

// Usar
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text := FormataCNPJ(edit1.text);
end;


T+
_________________
Tudo posso Naquele que me fortalece ! ! !
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
mr.solutions
Aprendiz
Aprendiz


Registrado: Terça-Feira, 2 de Setembro de 2008
Mensagens: 278

MensagemEnviada: Qua Mai 27, 2009 6:20 pm    Assunto: Responder com Citação

valdoedri escreveu:
Formatar CPF
Código:
Function FormataCPF(Numero: String): String;
var
   tmp,resultado: String;
   indx, indx1: integer;
begin
     if Length(Numero) < 10 Then
        begin
        result := '';
        exit;
        end;

     for indx := 1 to Length(Numero) do
         begin
         if Numero[indx] in ['0'..'9'] Then
              resultado := resultado + Numero[indx];
         end;
     if Length(Resultado) < 11 Then
        resultado := StringOfChar('0', 11 - Length(Resultado)) + resultado;
     tmp := Copy(resultado,1,3) + '.';
     tmp := tmp + Copy(resultado,4,3) + '.';
     tmp := tmp + Copy(resultado,7,3) + '-';
     tmp := tmp + Copy(resultado,10,2);
     Result := tmp;
end;

// Usar
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text := FormataCPF(edit1.text);
end;


Formatar CNPJ
Código:
Function FormataCNPJ(Numero: String): String;
var
   tmp,resultado: String;
   indx, indx1: integer;
begin
     if Length(Numero) < 12 Then
        begin
        result := '';
        exit;
        end;

     for indx := 1 to Length(Numero) do
         begin
         if Numero[indx] in ['0'..'9'] Then
              resultado := resultado + Numero[indx];
         end;
     if Length(Resultado) < 14 Then
        resultado := StringOfChar('0', 14 - Length(Resultado)) + resultado;
     tmp := Copy(resultado,1,2) + '.';
     tmp := tmp + Copy(resultado,3,3) + '.';
     tmp := tmp + Copy(resultado,6,3) + '/';
     tmp := tmp + Copy(resultado,9,4) + '-' + Copy(resultado,13,2);
     Result := tmp;
end;

// Usar
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text := FormataCNPJ(edit1.text);
end;


T+



obrigado pela atenção de todos vcs...
a primeira dica deu erro em uma linha a qual ja mostrei em cima...

essa outra função que o nosso amigo mandou ela funciona perfeitamente...so que não valida os campos, apenas preenche como é p preencher e é necessario um dbedit para CPF e um para CNPJ...
certo, eu quero validar CNPJ/CPF no mesmo DBedit...sendo que a formatação eu tenho ,.... Preciso verificar se são válidos...os dois no mesmo dbedit ou edit
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
mr.solutions
Aprendiz
Aprendiz


Registrado: Terça-Feira, 2 de Setembro de 2008
Mensagens: 278

MensagemEnviada: Seg Jun 22, 2009 3:15 pm    Assunto: Responder com Citação

ola pessoal ninguem tem nenhum exemplo não???
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Tusa
Novato
Novato


Registrado: Sábado, 6 de Março de 2004
Mensagens: 47

MensagemEnviada: Qui Ago 27, 2009 8:41 pm    Assunto: Re: FORMATAR CNPJ E CPF NO MESMO EDIT Responder com Citação

Como faço para usar uma function.

Em qual evento devo incluir.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB