VALIDAR CPF, CNPJ, CEP

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
dante
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qui, 24 Jan 2008 1:58 pm
Localização: são paulo sp
Danilo Maranini
Aprendendo e Compartilhando

alguém tem algum fonte que valida se o CPF, CNPJ e o CEP são verdadeiros :?:

se alguém tiver

disponibiliza aee!!

por favor

abraços
Avatar do usuário
alef
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 119
Registrado em: Ter, 06 Nov 2007 2:45 pm
Localização: Patos de Minas - MG
Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

CNPJ

Selecionar tudo

CREATE OR REPLACE FUNCTION CNPJ
      (p_cgc     IN CHAR)
       RETURN    BOOLEAN
IS
     m_total     NUMBER   :=  0;
     m_digito    NUMBER   :=  0;
BEGIN
     FOR i IN 1..4 LOOP
         m_total := m_total + substr(p_cgc,i,1) * (6 - i);
     END LOOP;

     FOR i IN 5..12 LOOP
         m_total := m_total + substr(p_cgc,i,1) * (14 - i);
     END LOOP;

     m_digito := 11 - mod(m_total,11);

     IF m_digito > 9 THEN
        m_digito := 0;
     END IF;

     IF m_digito != substr(p_cgc,13,1) THEN
        RETURN FALSE;
     END IF;

     m_digito := 0;
     m_total  := 0;

     FOR i IN 1..5 LOOP
         m_total := m_total + substr(p_cgc,i,1) * (7 - i);
     END LOOP;

     FOR i IN 6..13 LOOP
         m_total := m_total + substr(p_cgc,i,1) * (15 - i);
     END LOOP;

     m_digito := 11 - mod(m_total,11);

     IF m_digito > 9 THEN
        m_digito := 0;
     END IF;

     IF m_digito != substr(p_cgc,14,1) THEN
        RETURN FALSE;
     END IF;

     RETURN TRUE;
end;
CPF

Selecionar tudo

CREATE OR REPLACE FUNCTION CPF
      (p_cpf     IN CHAR)
       RETURN    BOOLEAN
IS
     m_total     NUMBER   :=  0;
     m_digito    NUMBER   :=  0;
BEGIN
     FOR i IN 1..9 LOOP
         m_total := m_total + substr(p_cpf,i,1) * (11 - i);
     END LOOP;

     m_digito := 11 - mod(m_total,11);

     IF m_digito > 9 THEN
        m_digito := 0;
     END IF;

     IF m_digito != substr(p_cpf,10,1) THEN
        RETURN FALSE;
     END IF;

     m_digito := 0;
     m_total  := 0;

     FOR i IN 1..10 LOOP
         m_total := m_total + substr(p_cpf,i,1) * (12 - i);
     END LOOP;

     m_digito := 11 - mod(m_total,11);

     IF m_digito > 9 THEN
        m_digito := 0;
     END IF;

     IF m_digito != substr(p_cpf,11,1) THEN
        RETURN FALSE;
     END IF;

     RETURN TRUE;

end;

Agora o CEP, você vai precisar acessar o bd dos correios, ou pelo menos ter uma base de dados do CEP.
Se alguém tiver essa base, poderia disponibilizar para todos que é uma fonte muito preciosa!


:-o


.
dante
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qui, 24 Jan 2008 1:58 pm
Localização: são paulo sp
Danilo Maranini
Aprendendo e Compartilhando

então cara

eu nunca trabalhei com FUNCTION no FORMS


depois que eu crio essa function no banco
como eu chamo ela no forms ???

desculpe a ignorancia!
Avatar do usuário
alef
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 119
Registrado em: Ter, 06 Nov 2007 2:45 pm
Localização: Patos de Minas - MG
Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

foi mals, esqueci de falar.

você chama ela como por exemplo uma post_change

cpf('Bloco.item');


e pronto.
dante
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qui, 24 Jan 2008 1:58 pm
Localização: são paulo sp
Danilo Maranini
Aprendendo e Compartilhando

dentro do campo na trigger WHEN VALIDATE ITEM

cpf('participantes.cic_participante');


porem ele me acusa erro

agora eu fiquei perdido de vez!!!


Imagem
Avatar do usuário
alef
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 119
Registrado em: Ter, 06 Nov 2007 2:45 pm
Localização: Patos de Minas - MG
Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

mais uma vez me desculpa


te passei errado a chamada ai fica dificil pra você

Selecionar tudo

if not cpf(:participantes.cic_participante) then
	 message('CPF invalido');
	 message(' ');
	 raise form_trigger_failure;
end if;
dante
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qui, 24 Jan 2008 1:58 pm
Localização: são paulo sp
Danilo Maranini
Aprendendo e Compartilhando

aí alexandre

vlw cara


rolo certinho

ele valida e tals!!!!

só que tivi que inibir a digitação de caracteres porque não trata não é? uhahua
mas aaa velho muito fo*a huahua vlw mesmo
Avatar do usuário
alef
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 119
Registrado em: Ter, 06 Nov 2007 2:45 pm
Localização: Patos de Minas - MG
Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

inibir caracteres? como assim? eu coloco o item do tipo number e uso mascara 000"."000"."000"-"00 para tratar. não sei se é isso que você disse
dante
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qui, 24 Jan 2008 1:58 pm
Localização: são paulo sp
Danilo Maranini
Aprendendo e Compartilhando

isso
para a pessoa não digitar
letras ...

eu coloquei no format mask o que você coloco ai em cima
deu esse erro

FRM-50027: Invalid format mask for given datatype.
Edit Item: CIC_PARTICIPANTE
Item: CIC_PARTICIPANTE
Block: PARTICIPANTES
Form: SAT_CAD_PARTICIPANTES
FRM-30085: Unable to adjust form for output.

tipo

o codigo não estava validando quano eu colocava por exe. 359.589
mas se eu colocar 359589 ele valida...

entendeu ?
Avatar do usuário
alef
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 119
Registrado em: Ter, 06 Nov 2007 2:45 pm
Localização: Patos de Minas - MG
Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

entendi sim!
dante
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qui, 24 Jan 2008 1:58 pm
Localização: são paulo sp
Danilo Maranini
Aprendendo e Compartilhando

hehe

vlw!!!

aaa não estou conseguindo fazer ele validar pelo . (ponto) hehe
francisco.angelo
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 78
Registrado em: Qua, 16 Jan 2008 5:06 pm
Localização: RJ

Alexandre...

fiz desse jeito que você falou aí e ficou show... inclusive com a mascara de formato... cpf( 999"."999"."999"."99 )

só que tenho uma dúvida.... tem como validar no mesmo campo o CPF ou CNPJ ou tenho que fazer um campo para cada um...?

eu consegui validar os dois... mais só quando eu coloco um em cada campo... no mesmo campo não vai, só valida o CPF...

tem alguma forma de validar os dois no mesmo campo????

outra dúvida... só aparece a mensagem quando o CPF é Invalido.
tem como colocar para aparecer mensagem também quando o CPF for correto??

desde já obrigado
dante
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qui, 24 Jan 2008 1:58 pm
Localização: são paulo sp
Danilo Maranini
Aprendendo e Compartilhando

tem alguma forma de validar os dois no mesmo campo????

então

eu acredito que você tenha que fazer ele entender que o que esta sendo digitado.
CPF ou CNPJ


bom


você pode colocar um option onde a pessoa seleciona FISICA ou JURIDICA,
porque senao tiver parametros não tem como ele entender

atraves do parametro ele verifica com um IF

se for FISICA faz...
senao faz ...
fim

entendeu ??


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

tem como colocar para aparecer mensagem também quando o CPF for correto??

sim
existem duas linhas iguais,,, a primeira tem a mensagem de cpf incorreto.
no segundo entre parenteses tem uma ' ' ... entre eles coloque a mensagem... porque é um return da trigger.



------------
Avatar do usuário
alef
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 119
Registrado em: Ter, 06 Nov 2007 2:45 pm
Localização: Patos de Minas - MG
Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

Para fazer a mensagem de correto você coloca assim na when validate item

Selecionar tudo

if not cpf(:TPESAGEM.CPF_MOTORISTA) then
	 message('CPF invalido');
	 message(' ');
	 raise form_trigger_failure;
        else 
                 message('CPF válido');
	 message(' ');
end if;	
francisco.angelo
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 78
Registrado em: Qua, 16 Jan 2008 5:06 pm
Localização: RJ
Francisco Angelo
///////////////////////////////

Valeu cara...

Obrigado...
dante
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qui, 24 Jan 2008 1:58 pm
Localização: são paulo sp
Danilo Maranini
Aprendendo e Compartilhando

se eu colocar
111111111111111
22222222222222222
33333333333333
444444444444
55555555555
66666666666666
777777777777
88888888888888
99999999999999999
000000000000000000

ele considera CPF valido.....
Avatar do usuário
alef
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 119
Registrado em: Ter, 06 Nov 2007 2:45 pm
Localização: Patos de Minas - MG
Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

pois é Dante. realmente tem esse bug, para corrigir isso você vai ter de fazer um if onde ele compara com esses valores e se coincidir ele da return false.
edson.amorim
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 135
Registrado em: Qui, 04 Out 2007 3:36 pm
Localização: Belo Horizonte - MG

Prezado Alexandre e colegas,

Tenho contado com a ajuda de voces e principalmente de nosso amigo Francisco Angelo. tenho o campo cpf gravdo em meu banco definido como Number(11). Coloquei a mascara conforme informado acima. Assim que compilo e digito o cpf, ele dá ok, navego entre os registros e tudo certinho mas, se eu sair do programa e voltar novamente, eele não mostra os cpfs gravados. Lá no banco ele está gravado assim: 8,8889E+10 Oque está acontecendo? como é que eu corrijo isso?

Grato,

Edson
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

Tenho contado com a ajuda de voces e principalmente de nosso amigo Francisco Angelo. tenho o campo cpf gravdo em meu banco definido como Number(11). Coloquei a mascara conforme informado acima. Assim que compilo e digito o cpf, ele dá ok, navego entre os registros e tudo certinho mas, se eu sair do programa e voltar novamente, eele não mostra os cpfs gravados. Lá no banco ele está gravado assim: 8,8889E+10 Oque está acontecendo? como é que eu corrijo isso?
Edson,

Os dados certamente foram gravados corretamente na base.
Provavelmente o problema está na ferramenta que você está utilizando para recuperar estes dados, que está configurada para retornar números muito grandes em notação científica.

No plsqldeveloper, por exemplo, existe uma configuração para converter campos numericos retornados por uma consulta para char, a fim de exibir números grandes.

Já no Sql*Plus, a solução seria fazer a consulta com a função to_char sobre o campo, ou utilizar o comando

Selecionar tudo

col <coluna> format 99999999999999
select <coluna> from <tabela> where ...
edson.amorim
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 135
Registrado em: Qui, 04 Out 2007 3:36 pm
Localização: Belo Horizonte - MG

Prezado Colega,


No meu caso, estou usando o Forms 6i, eu teria que fazer alguma configuração no Forms? Já no banco, como o campo foi definido como number(11) teria como eu limpar o campo? ou eu teria que mudar o tipo do campo no meu banco?

Grato,

Edson
francisco.angelo
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 78
Registrado em: Qua, 16 Jan 2008 5:06 pm
Localização: RJ
Francisco Angelo
///////////////////////////////

Edison,

altera o campo cpf de Number para varchar.

no meu aparece certinho... no meu está cpf varchar(15).

quando eu consulto no banco, ele aparece certo..
edson.amorim
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 135
Registrado em: Qui, 04 Out 2007 3:36 pm
Localização: Belo Horizonte - MG

Prezado Francisco,

Perfeito!! Fiza exatamente como você mandou e deu certinho, está funcionando beleza!!

Como estou empolgado, volto a qualquer momento a importunar tanto a você como aos demais colegas daqui para ajuda, pois ainda vou precisar muito de voces!! Já tenho algum material e gostaria de saber também se você tem para disponibilizar ou me indicaria como encontrar mais algum material sobre o forms!!

Mais uma vez, meu muito obrigado,

Edson Amorim
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 11 visitantes