Entrar

OracleBR

Função

Inicial - Banco de Códigos

Validar Titulo de Eleitor

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)


CREATE OR REPLACE FUNCTION FC_VERIFICA_TITULO
(titulo_eleitor in varchar2) return number
is
digito1 number := 0;
digito2 number := 0;
decr1 number := 9;
begin
declare
type titulo_invalido is table of varchar2(12);
numero_titulo_invalido titulo_invalido := titulo_invalido('000000000000');
i binary_integer := 0;
j binary_integer := 0;
begin
if ((titulo_eleitor is not null) and (length(titulo_eleitor) = 12))
then
begin
for i in 1..8
loop
digito1 := (digito1 + to_number(substr(titulo_eleitor,i,1)) * decr1);
decr1:= (decr1 - 1);
end loop;
digito1 := mod(digito1,11);
if ((digito1 = 0 ) or (digito1 = 1))
then
begin
if (to_number(substr(titulo_eleitor,9,1))= 0 and (to_number(substr(titulo_eleitor,10,1)) = 1 or to_number(substr(titulo_eleitor,10,1)) = 2))
then
begin
if (digito1 = 0)
then digito1 := 1;
else digito1 := 0;
end if;
end;
else digito1 := 0;
end if;
end;
else digito1 := (11 - digito1);
end if;
if (digito1 = to_number(substr(titulo_eleitor,11,1)))
then j := 1;
else j := 0;
end if;
if (j = 1)
then
begin
digito2 := (to_number(substr(titulo_eleitor,9,1))*4) + (to_number(substr(titulo_eleitor,10,1))*3) + (digito1*2);
digito2 := mod (digito2,11);
if ((digito2 = 0 ) or (digito2 = 1))
then
begin
if (to_number(substr(titulo_eleitor,9,1))= 0 and (to_number(substr(titulo_eleitor,10,1)) = 1 or to_number(substr(titulo_eleitor,10,1)) = 2))
then
begin
if digito2 = 0
then digito2 := 1;
else digito2 := 0;
end if;
end;
else digito2 := 0;
end if;
end;
else digito2 := (11 - digito2);
end if;
if (digito2 <> to_number(substr(titulo_eleitor,12,1)))
then j := 0;
else j := 1;
end if;
end;
end if;
end;
end if;
if (j = 1)
then
begin
if ((titulo_eleitor = numero_titulo_invalido(1)))
then return (0);
else return (1);
end if;
end;
else return (0);
end if;
exception
when others then return (0);
end;
end;