| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
Fabianoluizdb Membro Junior

Registrado: Segunda-Feira, 17 de Agosto de 2009 Mensagens: 396
|
Enviada: Ter Set 15, 2009 9:40 am Assunto: Help CPF - Alguem pode me Ajudar ? //Resolvido |
|
|
Pessoal preciso de mais um help
Assim tenho uma Unit chamada função para validar meu CPF, e no edit quando sai dele chama a função:
if DEdit_CPF3.Text = '' then
Abort;
if not TestaCpf(DEdit_CPF3.Text)then
ShowMessage('CPF INVALIDO');
só que quando o usuario digita meio CPF '999.99 . - ' ai me da o erro
' ' is not valid integer value (não valida campo inteiro) o que fiz foi colocar assim
if DEdit_CPF3.Text = '' then
DEdit_CPF3.Text := 000000000
Abort;
if not TestaCpf(DEdit_CPF3.Text)then
ShowMessage('CPF INVALIDO');
mas ai não valida mais nada porque estou passando um valor fixo.
no meu banco Firebird o campo esta como Varchar, teria que passar ele para integer ? ou alguma coisa que fiz errado?
Alguem pode me ajudar.
ja agradeço obrigado.
Editado pela última vez por Fabianoluizdb em Qua Set 16, 2009 4:44 pm, num total de 2 vezes |
|
| Voltar ao Topo |
|
 |
harleydk Profissional

Registrado: Quinta-Feira, 4 de Setembro de 2008 Mensagens: 635
|
Enviada: Ter Set 15, 2009 10:07 am Assunto: |
|
|
coloca assim no OnKeyPress...
| Código: | if Key = ' ' then
Key := #0;
|
se vc digitar espaço, o sistema disconsidera
Ps tem um espaço dento da aspas simples |
|
| Voltar ao Topo |
|
 |
Fabianoluizdb Membro Junior

Registrado: Segunda-Feira, 17 de Agosto de 2009 Mensagens: 396
|
Enviada: Ter Set 15, 2009 12:21 pm Assunto: |
|
|
Continua com erro
eu havia colocado o evento no Edit do CPF na saida, e mesmo deixando o campo em branco da o erro, to achando que o problema e da minha mascara, porque mesmo passando pelo campo e não digitando nada ele da o erro. |
|
| Voltar ao Topo |
|
 |
andelphi Aprendiz

Registrado: Segunda-Feira, 2 de Outubro de 2006 Mensagens: 273
|
Enviada: Ter Set 15, 2009 5:08 pm Assunto: |
|
|
Na sua unit que valida o CPF, coloque um try...except onde ele faz a transformação de String para Integer (StrToInt). Caso dê algum erro, você sai da função e emite a mensagem.
Abraços,
Andelphi.[/quote] |
|
| Voltar ao Topo |
|
 |
Fabianoluizdb Membro Junior

Registrado: Segunda-Feira, 17 de Agosto de 2009 Mensagens: 396
|
Enviada: Ter Set 15, 2009 5:31 pm Assunto: |
|
|
Valeu pela Dica
Vou testar, mais tarde coloco aqui se deu certo ou não,
Mas desde ja Agradeço+
Valeu. |
|
| Voltar ao Topo |
|
 |
Fabianoluizdb Membro Junior

Registrado: Segunda-Feira, 17 de Agosto de 2009 Mensagens: 396
|
Enviada: Ter Set 15, 2009 9:28 pm Assunto: |
|
|
Cara mexi em tudo mas não consegui achar de uma olhada na minha validação faz favor para ver o que estou fazendo errado, baixei um prorama que valida do Active DElphi mas tem o mesmo probema.
Alguem pode me ajudar ????
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;
end.
Valeu |
|
| Voltar ao Topo |
|
 |
andelphi Aprendiz

Registrado: Segunda-Feira, 2 de Outubro de 2006 Mensagens: 273
|
Enviada: Qua Set 16, 2009 4:15 pm Assunto: |
|
|
Coloque um bloco try...except na sua função, como segue abaixo.
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
try
d1 := d1 + ( 11 - xx ) * StrToInt( Copy( xCPF, nCount, 1 ) );
d4 := d4 + ( 12 - xx ) * StrToInt( Copy( xCPF, nCount, 1 ) );
xx := xx+1;
except
ShowMessage('CPF inválido.');
end;
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;
end. |
|
| Voltar ao Topo |
|
 |
Fabianoluizdb Membro Junior

Registrado: Segunda-Feira, 17 de Agosto de 2009 Mensagens: 396
|
Enviada: Qua Set 16, 2009 4:42 pm Assunto: |
|
|
Amigao
Valeu pela dica, só deu um errinho foi no Showmessage('CPF Invalido')
"Undeclared identifier:'Showmessage'", mas tranquilo comentei e rodou normalmente ele traz a mensagem CPF invalido do meu teste no campo quando sai dele.
Grande abraço e bom trabalho.
Valeu |
|
| Voltar ao Topo |
|
 |
andelphi Aprendiz

Registrado: Segunda-Feira, 2 de Outubro de 2006 Mensagens: 273
|
Enviada: Qua Set 16, 2009 5:41 pm Assunto: |
|
|
| Declara a unit Dialogs na sua unit que valida seu cpf, vai funcionar beleza.Que bom, precisamos estamos aí. |
|
| Voltar ao Topo |
|
 |
Fabianoluizdb Membro Junior

Registrado: Segunda-Feira, 17 de Agosto de 2009 Mensagens: 396
|
Enviada: Qua Set 16, 2009 9:23 pm Assunto: |
|
|
Amigo
Valeu pela dica deu certo, se precisar é só dar um toque
Obrigado |
|
| Voltar ao Topo |
|
 |
|