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)
-- ************************************************************************* --
-- Funcao: Calcula_Digito_DOC --
-- --
-- Entrada: --
-- Tipo : determina que documento deve ser validado. --
-- Valores validos sao: 'CGC' ou 'CPF'. --
-- Numero : numero do documento, com 13 digitos, com zeros a esquerda. --
-- O numero do documento nao deve estar formatado, nem incluir --
-- os digitos de verificacao. Deve ser constituido apenas por --
-- digitos. --
-- --
-- Saida: --
-- Digito de verificacao do CGC ou CPF. --
-- Ou 'ER' se o documento especificado nao e' nem CGC, nem CPF. --
-- ************************************************************************* --
-- Objetivo: --
-- Calcular os digitos de verificacao do CGC ou CPF especificado. --
-- ************************************************************************* --
-- Autoria: --
-- Raissa M. M. Lopes - ralopes@br.oracle.com --
-- --
-- Data de Criacao: 26.09.1996 Versao: 1 --
-- ************************************************************************* --
create or replace function Calcula_Digito_DOC
(
Tipo IN varchar2,
Numero IN varchar2
)
RETURN varchar2
IS
Primeiro_Dig number;
Segundo_Dig number;
BEGIN
IF Tipo = 'CPF' THEN
Primeiro_Dig := 11 - MOD (TO_NUMBER(SUBSTR(Numero,13,1) * 2) +
TO_NUMBER(SUBSTR(Numero,12,1) * 3) +
TO_NUMBER(SUBSTR(Numero,11,1) * 4) +
TO_NUMBER(SUBSTR(Numero,10,1) * 5) +
TO_NUMBER(SUBSTR(Numero,9,1) * 6) +
TO_NUMBER(SUBSTR(Numero,8,1) * 7) +
TO_NUMBER(SUBSTR(Numero,7,1) * 8) +
TO_NUMBER(SUBSTR(Numero,6,1) * 9) +
TO_NUMBER(SUBSTR(Numero,5,1) * 10),
11);
if (Primeiro_Dig = 11) or (Primeiro_Dig = 10) then
Primeiro_Dig := 0;
end if;
Segundo_Dig := 11 - MOD (Primeiro_Dig * 2 +
TO_NUMBER (SUBSTR(Numero,13,1) * 3) +
TO_NUMBER (SUBSTR(Numero,12,1) * 4) +
TO_NUMBER (SUBSTR(Numero,11,1) * 5) +
TO_NUMBER (SUBSTR(Numero,10,1) * 6) +
TO_NUMBER (SUBSTR(Numero,9,1) * 7) +
TO_NUMBER (SUBSTR(Numero,8,1) * 8) +
TO_NUMBER (SUBSTR(Numero,7,1) * 9) +
TO_NUMBER (SUBSTR(Numero,6,1) * 10) +
TO_NUMBER (SUBSTR(Numero,5,1) * 11),
11);
if (Segundo_Dig = 11) or (Segundo_Dig = 10) THEN
Segundo_Dig := 0;
end if;
Return (CONCAT(TO_CHAR(Primeiro_Dig),TO_CHAR(Segundo_Dig)));
ELSIF Tipo = 'CGC' THEN
Primeiro_Dig := (11 - MOD (TO_NUMBER(SUBSTR(Numero,13,1) * 2) +
TO_NUMBER(SUBSTR(Numero,12,1) * 3) +
TO_NUMBER(SUBSTR(Numero,11,1) * 4) +
TO_NUMBER(SUBSTR(Numero,10,1) * 5) +
TO_NUMBER(SUBSTR(Numero,9,1) * 6) +
TO_NUMBER(SUBSTR(Numero,8,1) * 7) +
TO_NUMBER(SUBSTR(Numero,7,1) * 8) +
TO_NUMBER(SUBSTR(Numero,6,1) * 9) +
TO_NUMBER(SUBSTR(Numero,5,1) * 2) +
TO_NUMBER(SUBSTR(Numero,4,1) * 3) +
TO_NUMBER(SUBSTR(Numero,3,1) * 4) +
TO_NUMBER(SUBSTR(Numero,2,1) * 5),
11));
if (Primeiro_Dig = 11) or (Primeiro_Dig = 10) then
Primeiro_Dig := 0;
end if;
Segundo_Dig := (11 - MOD (Primeiro_Dig * 2 +
TO_NUMBER (SUBSTR(Numero,13,1) * 3) +
TO_NUMBER (SUBSTR(Numero,12,1) * 4) +
TO_NUMBER (SUBSTR(Numero,11,1) * 5) +
TO_NUMBER (SUBSTR(Numero,10,1) * 6) +
TO_NUMBER (SUBSTR(Numero,9,1) * 7) +
TO_NUMBER (SUBSTR(Numero,8,1) * 8) +
TO_NUMBER (SUBSTR(Numero,7,1) * 9) +
TO_NUMBER (SUBSTR(Numero,6,1) * 2) +
TO_NUMBER (SUBSTR(Numero,5,1) * 3) +
TO_NUMBER (SUBSTR(Numero,4,1) * 4) +
TO_NUMBER (SUBSTR(Numero,3,1) * 5) +
TO_NUMBER (SUBSTR(Numero,2,1) * 6),
11));
if (Segundo_Dig = 11) or (Segundo_Dig = 10) then
Segundo_Dig := 0;
end if;
Return (CONCAT(TO_CHAR(Primeiro_Dig),TO_CHAR(Segundo_Dig)));
ELSE
Return('ER');
END IF;
END Calcula_Digito_DOC;
/
-- ************************************************************************* --
-- Funcao: Valida_Documento --
-- --
-- Entrada: --
-- Tipo : determina que documento deve ser validado. --
-- Valores validos sao: 'CGC' ou 'CPF'. --
-- Numero : numero do documento, com 15 digitos, com zeros a esquerda. --
-- O numero do documento nao deve estar formatado, deve ser --
-- constituido apenas por digitos. --
-- --
-- Saida: --
-- Retorna 0 se o CGC ou CPF e' invalido. --
-- Retorna 1 se o CGC ou CPF e' valido. --
-- ************************************************************************* --
-- Objetivo: --
-- Determinar se o numero do CGC ou CPF passado e' valido ou nao. --
-- ************************************************************************* --
-- Autoria: --
-- Raissa M. M. Lopes - ralopes@br.oracle.com --
-- --
-- Data de Criacao: 26.09.1996 Versao: 1 --
-- ************************************************************************* --
create or replace function Valida_Documento
(
Tipo IN varchar2,
Numero IN varchar2
)
RETURN number
IS
Digito_Calc varchar2(2);
BEGIN
if TO_NUMBER(Numero) > 0 then
Digito_Calc := Calcula_Digito_DOC (Tipo, SUBSTR(Numero,1,13));
if Digito_Calc = SUBSTR(Numero,14,2) then
Return (1);
else
Return (0);
end if;
else
Return (0);
end if;
EXCEPTION
WHEN OTHERS THEN
Return (0);
END Valida_Documento;