Data de Inclusão:
02/09/2006 | Última Alteração:
02/09/2006
Tipo:Função | Enviada por:
Moderador Oracle_br (moderador@oraclebr.com.br)
/* use a trigger when_validate_item do item cpf_cgc */
Declare
V_RESUL number(04) := 0;
V_AUX number(03) := 0;
V_DIGAUX number(02) := 0;
V_DIG Number(01) := 0;
V_DIGITO_OK Number(02) := 0;
V_CPF Number(15) := 0;
v_cod_motorista Number(06);
Begin
if length(:bloco.nro_cpf_proprietario) <= 11 then
:bloco.NRO_CPF_PROPRIETARIO := lpad(:bloco.NRO_CPF_PROPRIETARIO,11,'0');
if length(:bloco.NRO_CPF_PROPRIETARIO) > 11 then
:bloco.NRO_CPF_PROPRIETARIO := substr(:bloco.NRO_CPF_PROPRIETARIO,01,3)||
substr(:bloco.NRO_CPF_PROPRIETARIO,05,3)||
substr(:bloco.NRO_CPF_PROPRIETARIO,09,3)||
substr(:bloco.NRO_CPF_PROPRIETARIO,13,2);
elsif length(:bloco.NRO_CPF_PROPRIETARIO) < 11 then
raise form_trigger_failure;
end if;
if :bloco.NRO_CPF_PROPRIETARIO = '00000000000' then
msg('Este número de CPF não existe!!');
raise form_trigger_failure;
end if;
v_CPF := Nvl(to_number(:bloco.NRO_CPF_PROPRIETARIO),0) + 100000000000;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),02,1)) * 10;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),03,1)) * 09;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),04,1)) * 08;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),05,1)) * 07;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),06,1)) * 06;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),07,1)) * 05;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),08,1)) * 04;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),09,1)) * 03;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),10,1)) * 02;
V_AUX := Trunc(V_RESUL / 11);
V_DIGAUX := V_RESUL - 11 * V_AUX;
If V_DIGAUX in (1,0) Then
V_DIG := 0;
Else
V_DIG := 11 - V_DIGAUX;
End If;
V_DIGITO_OK := V_DIG * 10;
V_RESUL := 0;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),02,1)) * 11;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),03,1)) * 10;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),04,1)) * 09;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),05,1)) * 08;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),06,1)) * 07;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),07,1)) * 06;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),08,1)) * 05;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),09,1)) * 04;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),10,1)) * 03;
V_RESUL := V_RESUL + To_number(Substr(To_char(V_CPF),11,1)) * 02;
V_AUX := Trunc(V_RESUL / 11);
V_DIGAUX := V_RESUL - 11 * V_AUX;
If V_DIGAUX in (1,0) Then
V_DIG := 0;
Else
V_DIG := 11 - V_DIGAUX;
End If;
V_DIGITO_OK := V_DIGITO_OK + V_DIG;
IF Nvl(Substr(To_char(V_CPF),11,2),0) <> V_DIGITO_OK Then
msg('Digito Verificador do CPF não confere !!');
Raise form_trigger_failure;
End If;
else
begin
/* ****************** VALIDA CNPJ *************************/
Declare
V_RESUL number(04) := 0;
V_AUX number(03) := 0;
V_DIGAUX number(02) := 0;
V_DIG Number(01) := 0;
V_DIGITO_OK Number(02) := 0;
V_CGC Number(15) := 0;
Begin
:NRO_CPF_PROPRIETARIO := Nvl(:NRO_CPF_PROPRIETARIO,1);
V_CGC := to_number(:NRO_CPF_PROPRIETARIO) + 100000000000000;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),02,1),0) * 5;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),03,1),0) * 4;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),04,1),0) * 3;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),05,1),0) * 2;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),06,1),0) * 9;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),07,1),0) * 8;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),08,1),0) * 7;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),09,1),0) * 6;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),10,1),0) * 5;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),11,1),0) * 4;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),12,1),0) * 3;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),13,1),0) * 2;
V_AUX := Trunc(V_RESUL / 11);
V_DIGAUX := V_RESUL - 11 * V_AUX;
If V_DIGAUX in (1,0) Then
V_DIG := 0;
Else
V_DIG := 11 - V_DIGAUX;
End If;
V_DIGITO_OK := V_DIG * 10;
V_RESUL := 0;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),02,1),0) * 06;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),03,1),0) * 05;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),04,1),0) * 04;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),05,1),0) * 03;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),06,1),0) * 02;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),07,1),0) * 09;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),08,1),0) * 08;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),09,1),0) * 07;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),10,1),0) * 06;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),11,1),0) * 05;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),12,1),0) * 04;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),13,1),0) * 03;
V_RESUL := V_RESUL + Nvl(Substr(To_char(V_CGC),14,1),0) * 02;
V_AUX := Trunc(V_RESUL / 11);
V_DIGAUX := V_RESUL - 11 * V_AUX;
If V_DIGAUX in (1,0) Then
V_DIG := 0;
Else
V_DIG := 11 - V_DIGAUX;
End If;
V_DIGITO_OK := V_DIGITO_OK + V_DIG;
IF Nvl(Substr(To_char(V_CGC),14,2),0) <> V_DIGITO_OK Then
Message('Digito Verificador do CGC não confere !');
Message('Digito Verificador do CGC não confere !');
Raise form_trigger_failure;
End If;
End;
end;
/*************************************************************/