Validação Inscrição Estadual (IE)

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
rafaelfrocha
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Qua, 31 Out 2007 9:30 am
Localização: Uberlândia
Rafael Rocha

Olá pessoal,

Alguém conhece ou utiliza alguma função para validação de Inscrição Estadual (IE)?

Estou precisando muito de uma função dessa, achei esse código em outro forum:

Selecionar tudo

FUNCTION FCT_VERIFICA_INSCR_ESTADUAL
(PP_ESTADO VARCHAR2
,PP_NR_INSCRICAO_ESTADUAL VARCHAR2
)
RETURN BOOLEAN
IS
BEGIN
-- Função para Validação da Inscrição Estadual;
-- Parâmetros: PP_ESTADO, PP_NR_INSCRICAO_ESTADUAL
-- Desenvolvida por: Taylor Moraes;
-- Desenvolvida em: 05/05/2003;
-- Alterada por:
-- Alterada em:
-- Obs.: Esta função não dá total certeza quanto a validade dos cálculos.
-- Então o melhor é só "Dar um aviso para o usuário que a Inscrição Estadual PODE conter erros.".
DECLARE
V_TEM_ERRO BOOLEAN := FALSE;
V_MULTIPLICACAO NUMBER(40);
V_CONTROLE_1 NUMBER(40);
V_CONTROLE_2 NUMBER(40);
V_ID_ESTADO NUMBER(1);
V_TAMANHO NUMBER(2);
BEGIN
-- Inscrição Estadual para Estado do ACRE para Empresas fundadas até 11/1999;
IF PP_ESTADO = 'AC' THEN
V_TAMANHO := 9;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) <> 0 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) <> 1 THEN
-- Inscrição com erro;
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 );
--
IF ( 11 - MOD( V_MULTIPLICACAO, 11 ) ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL, V_TAMANHO, 1 ) THEN
-- Inscrição com erro;
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
-- Inscrição Estadual para Estado do ACRE para Empresas fundadas após 11/1999 e para o DISTRITO FEDERAL;
IF PP_ESTADO IN ('AC','DF') THEN
V_TAMANHO := 13;
--
IF PP_ESTADO = 'AC' THEN
V_ID_ESTADO := 1;
ELSIF PP_ESTADO = 'DF' THEN
V_ID_ESTADO := 7;
END IF;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) <> 0 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) <> V_ID_ESTADO OR
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) NOT IN ( 3,4 ) AND PP_ESTADO = 'DF' ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1)* 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,11,1)* 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,12,1)* 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,13,1)* 0 );
--
V_CONTROLE_1 := ( 11 - MOD( V_MULTIPLICACAO, 11 ) );
--
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1)* 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,11,1)* 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,12,1)* 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,13,1)* 0 );
--
V_CONTROLE_2 := ( 11 - MOD( V_MULTIPLICACAO, 11 ) );
--
IF ( ( V_CONTROLE_1 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO-1,1 ) ) OR
( V_CONTROLE_2 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,1 ) ) ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO IN ( 'AL', 'RN' ) THEN
V_TAMANHO := 9;
--
IF PP_ESTADO = 'AL' THEN
V_ID_ESTADO := 4;
ELSIF PP_ESTADO = 'RN' THEN
V_ID_ESTADO := 0;
END IF;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) <> 2 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) <> V_ID_ESTADO OR
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) NOT IN ( 0,3,5,7,8 ) AND PP_ESTADO = 'AL' ) OR
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) NOT IN ( 0,1,2,3 ) AND PP_ESTADO = 'RN' ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 );
--
V_MULTIPLICACAO := V_MULTIPLICACAO * 10;
--
IF MOD( V_MULTIPLICACAO, 11 ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'AM' THEN
V_TAMANHO := 9;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) <> 0 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) NOT IN ( 4,7 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 );
--
IF ( 11 - MOD( V_MULTIPLICACAO, 11 ) ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL, V_TAMANHO, 1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'AP' THEN
V_TAMANHO := 9;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1) <> 0 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1) <> 3 THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
--
ELSIF PP_NR_INSCRICAO_ESTADUAL >= 030190230 THEN
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 );
--
ELSIF PP_NR_INSCRICAO_ESTADUAL >= 030170010 AND PP_NR_INSCRICAO_ESTADUAL <= 030190229 THEN
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 );
--
V_MULTIPLICACAO := V_MULTIPLICACAO + (5+(4*1));
--
ELSIF PP_NR_INSCRICAO_ESTADUAL <= 030170009 THEN
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 );
--
V_MULTIPLICACAO := V_MULTIPLICACAO + (5+(4*0));
END IF;
--
IF ( 11 - MOD( V_MULTIPLICACAO , 11 ) ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
IF PP_ESTADO = 'BA' THEN
V_TAMANHO := 8;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
--
ELSIF SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1) IN ( 0,1,2,3,4,5,8 ) THEN
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 1,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 2,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 3,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 4,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 5,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 6,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 7,1 ) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 8,1 ) * 0 );
--
V_CONTROLE_1 := ( 10 - MOD( V_MULTIPLICACAO, 10 ) );
--
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 1,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 2,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 3,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 4,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 5,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 6,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 7,1 ) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 8,1 ) * 2 );
--
V_CONTROLE_2 := ( 10 - MOD( V_MULTIPLICACAO, 10 ) );
--
IF ( ( V_CONTROLE_2 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL, V_TAMANHO-1,1 ) ) OR
( V_CONTROLE_1 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL, V_TAMANHO,1 ) ) ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
--
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 1,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 2,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 3,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 4,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 5,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 6,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 7,1 ) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 8,1 ) * 0 );
--
V_CONTROLE_1 := ( 11 - MOD( V_MULTIPLICACAO , 11 ) );
--
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 1,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 2,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 3,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 4,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 5,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 6,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 7,1 ) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 8,1 ) * 2 );
--
V_CONTROLE_2 := ( 11 - MOD( V_MULTIPLICACAO , 11 ) );
--
IF ( ( V_CONTROLE_2 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO-1,1 ) ) OR
( V_CONTROLE_1 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,1 ) ) ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'CE' THEN
V_TAMANHO := 9;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) <> 0 THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 1,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 2,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 3,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 3,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 8,1 ) * 2 );
-- + ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL, 9,1 ) * 0 );
--
IF ( 11 - MOD( V_MULTIPLICACAO , 11 ) ) IN ( 10,11 ) THEN
V_CONTROLE_1 := 0;
END IF;
--
IF V_CONTROLE_1 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'ES' THEN
V_TAMANHO := 9;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) <> 0 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) NOT IN ( 0,8 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1) * 0 );
--
IF ( 11 - MOD( V_MULTIPLICACAO , 11 ) ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL, V_TAMANHO, 1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'GO' THEN
V_TAMANHO := 9;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) <> 1 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) NOT IN ( 0,1,5 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
--
ELSIF PP_NR_INSCRICAO_ESTADUAL >= 030170010 AND PP_NR_INSCRICAO_ESTADUAL <= 030190229 THEN
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 );
--
V_MULTIPLICACAO := V_MULTIPLICACAO + (5+(4*1));
--
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 );
END IF;
--
IF ( 11 - MOD( V_MULTIPLICACAO , 11 ) ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL, V_TAMANHO,1) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
IF PP_ESTADO IN ( 'MA' , 'MS' , 'PA' , 'PB' , 'PI' ) THEN
V_TAMANHO := 9;
--
IF PP_ESTADO IN ( 'MA' , 'PA' , 'PB' , 'PI' ) THEN
V_CONTROLE_1 := 1;
--
ELSIF PP_ESTADO = 'MS' THEN
V_CONTROLE_1 := 2;
END IF;
--
IF PP_ESTADO = 'MA' THEN
V_CONTROLE_2 := 2;
--
ELSIF PP_ESTADO = 'MS' THEN
V_CONTROLE_2 := 8;
--
ELSIF PP_ESTADO = 'PA' THEN
V_CONTROLE_2 := 5;
--
ELSIF PP_ESTADO = 'PB' THEN
V_CONTROLE_2 := 6;
--
ELSIF PP_ESTADO = 'PI' THEN
V_CONTROLE_2 := 9;
END IF;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) <> V_CONTROLE_1 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) <> V_CONTROLE_2 THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
--
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 );
--
IF ( 11 - MOD( V_MULTIPLICACAO , 11 ) ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL, V_TAMANHO, 1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'MG' THEN
V_TAMANHO := 13;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
--
ELSE
V_MULTIPLICACAO := TRUNC( ( ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 1 ) / 10 ) ) +
TRUNC( ( ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 2 ) / 10 ) ) +
TRUNC( ( ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 1 ) / 10 ) ) +
TRUNC( ( ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 1 ) / 10 ) ) +
TRUNC( ( ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 2 ) / 10 ) ) +
TRUNC( ( ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 1 ) / 10 ) ) +
TRUNC( ( ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 2 ) / 10 ) ) +
TRUNC( ( ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 1 ) / 10 ) ) +
TRUNC( ( ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 2 ) / 10 ) ) +
TRUNC( ( ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1) * 1 ) / 10 ) ) +
TRUNC( ( ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,11,1) * 2 ) / 10 ) ) +
TRUNC( ( ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,12,1) * 0 ) / 10 ) ) +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,13,1) * 0 +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 1 +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 2 +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 1 +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 1 +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 2 +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 1 +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 2 +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 1 +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 2 +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1) * 1 +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,11,1) * 2 +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,12,1) * 0 +
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,13,1) * 0;
--
V_CONTROLE_1 := ( 10 - MOD( V_MULTIPLICACAO , 10 ) );
--
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) *11 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) *10 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,11,1) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,12,1) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,13,1) * 0 );
--
V_CONTROLE_2 := ( 11 - MOD( V_MULTIPLICACAO , 11 ) );
--
IF ( ( V_CONTROLE_1 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL, V_TAMANHO-1, 1 ) ) OR
( V_CONTROLE_2 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL, V_TAMANHO, 1 ) ) ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'muito' THEN
V_TAMANHO := 11;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,11,1) * 0 );
--
IF ( 11 - MOD( V_MULTIPLICACAO , 11 ) ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'PE' THEN
V_TAMANHO := 14;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) <> 1 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) <> 8 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) <> 0 THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
--
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 1 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,11,1) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,12,1) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,13,1) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,14,1) * 0 );
--
V_CONTROLE_1 := ( 11 - MOD( V_MULTIPLICACAO , 11 ) );
--
IF V_CONTROLE_1 IN ( 11,10 ) THEN
V_CONTROLE_1 := 0;
END IF;
--
IF V_CONTROLE_1 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL, V_TAMANHO, 1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'PR' THEN
V_TAMANHO := 10;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1) * 0 );
--
V_CONTROLE_1 := ( 11 - MOD( V_MULTIPLICACAO , 11 ) );
--
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1) * 0 );
--
V_CONTROLE_2 := ( 11 - MOD( V_MULTIPLICACAO , 11 ) );
--
IF V_CONTROLE_1 IN ( 11,10 ) THEN
V_CONTROLE_1 := 0;
END IF;
--
IF V_CONTROLE_2 IN ( 11,10 ) THEN
V_CONTROLE_2 := 0;
END IF;
--
IF ( ( V_CONTROLE_1 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO-1,1 ) ) OR
( V_CONTROLE_2 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,1 ) ) ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'RN' THEN
V_TAMANHO := 9;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) <> 2 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) <> 0 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) > 3 THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
--
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 );
--
V_MULTIPLICACAO := V_MULTIPLICACAO * 10;
--
IF MOD( V_MULTIPLICACAO , 11 ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL, V_TAMANHO, 1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'RJ' THEN
V_TAMANHO := 8;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) NOT IN ( 1,7,8,9 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 0 );
--
IF ( 11 - MOD( PP_NR_INSCRICAO_ESTADUAL , 11 ) ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'RO' THEN -- Formula para empresas fundadas após 08/2000;
V_TAMANHO := 14;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,11,1) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,12,1) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,13,1) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,14,1) * 0 );
--
IF ( 11 - MOD( V_MULTIPLICACAO , 11 ) ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'RO' THEN -- Para empresas fundadas até 07/2000;
V_TAMANHO := 9;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) = 0 THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 );
--
V_MULTIPLICACAO := V_MULTIPLICACAO + (5+(4*1));
--
IF ( 11 - MOD( V_MULTIPLICACAO , 11 ) ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL, V_TAMANHO,1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'RR' THEN
V_TAMANHO := 9;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) <> 2 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) <> 4 THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 1 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 );
--
IF MOD( PP_NR_INSCRICAO_ESTADUAL,9 ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL, V_TAMANHO,1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'RS' THEN
V_TAMANHO := 10;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) > 4 THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 2 ); -- +
-- ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1) * 0 ) +
--
V_CONTROLE_1 := ( 11 - MOD( V_MULTIPLICACAO , 11 ) );
--
IF V_CONTROLE_1 IN ( 10,11 ) THEN
V_CONTROLE_1 := 0;
END IF;
--
IF V_CONTROLE_1 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO IN ( 'SC' , 'SE' ) THEN
V_TAMANHO := 9;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 );
--
V_CONTROLE_1 := ( 11 - MOD( V_MULTIPLICACAO , 11 ) );
--
IF V_CONTROLE_1 < 0 THEN
V_CONTROLE_1 := V_CONTROLE_1 * (-1);
END IF;
--
IF V_CONTROLE_1 IN ( 0,1 ) THEN
V_CONTROLE_1 := 0;
END IF;
--
IF V_CONTROLE_1 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'SP' THEN
IF SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) = 'P' THEN
V_TAMANHO := 13;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) <> 'P' THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 1 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 10) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,11,1) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,12,1) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,13,1) * 0 );
--
V_CONTROLE_1 := MOD( V_MULTIPLICACAO , 11 );
--
IF V_CONTROLE_1 = 10 THEN
V_CONTROLE_1 := 0;
END IF;
--
IF V_CONTROLE_1 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,4 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
ELSE
V_TAMANHO := 12;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 1 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 10); /* +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,11,1) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,12,1) * 0 ); */
--
V_CONTROLE_1 := MOD( V_MULTIPLICACAO , 11 );
--
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 10) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,11,1) * 2 ); /* +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,12,1) * 0 ); */
--
V_CONTROLE_2 := MOD( V_MULTIPLICACAO , 11 );
--
IF V_CONTROLE_1 = 10 THEN
V_CONTROLE_1 := 0;
END IF;
--
IF V_CONTROLE_2 = 10 THEN
V_CONTROLE_2 := 0;
END IF;
--
IF ( ( V_CONTROLE_1 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO-3,1 ) ) OR
( V_CONTROLE_2 <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,1 ) ) ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
END IF;
IF PP_ESTADO = 'TO' THEN
V_TAMANHO := 11;
--
IF LENGTH( TRIM( PP_NR_INSCRICAO_ESTADUAL ) ) <> V_TAMANHO OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) <> 2 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) <> 9 OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) NOT IN ( 0,9 ) OR
SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) NOT IN ( 1,2,3,9 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_MULTIPLICACAO := ( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,1,1 ) * 9 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,2,1 ) * 8 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,3,1 ) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,4,1 ) * 0 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,5,1 ) * 7 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,6,1 ) * 6 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,7,1 ) * 5 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,8,1 ) * 4 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,9,1 ) * 3 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,10,1) * 2 ) +
( SUBSTR( PP_NR_INSCRICAO_ESTADUAL,11,1) * 0 );
--
IF ( 11 - MOD( V_MULTIPLICACAO , 11 ) ) <> SUBSTR( PP_NR_INSCRICAO_ESTADUAL,V_TAMANHO,1 ) THEN
-- Inscrição com erro!
V_TEM_ERRO := TRUE;
ELSE
V_TEM_ERRO := FALSE;
END IF;
END IF;
END IF;
--
RETURN V_TEM_ERRO;
END;
END FCT_VERIFICA_INSCR_ESTADUAL;
-- Fonte: http://www.oraclebr.com.br/codigo/codigo.php?seq=25
alguém conhece essa validação ou sabe se funciona 100%?
RodrigoValentim
Moderador
Moderador
Mensagens: 367
Registrado em: Ter, 25 Mar 2008 3:41 pm
Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer

Campanha: Faça uma pesquisa antes de perguntar!!!

Não conheco essa pequena função, faz uns testes aí e verifica se o processo está 100%. Não custa nada, já que você tem toda base pronta para isso...

:)
hugo_roberto
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 12 Nov 2010 10:07 am
Localização: SP
Hugo Roberto Souza Santos

/* essa é quente */

Procedure que valida inscrição estadual

Selecionar tudo

create or replace function val_inscr(pp_estado                varchar2,
                                     pp_nr_inscricao_estadual varchar2)

  /* CRIADO POR HUGO ROBERTO SOUZA SANTOS EM 11/11/2010*/
  /* SE PREFERIREM PODEM USAR BOOLEANOS */


 return varchar2 is

  v_verificador varchar2(50);
  v_calculo     number;
  v_digito      number;

  function soma_algebrica(p_valor number) return number is
  
    v_contador  number := 0;
    v_resultado number := 0;
  
  begin
  
    for a in 1 .. length(p_valor) loop
    
      v_contador := v_contador + 1;
    
      v_resultado := v_resultado + substr(p_valor, v_contador, 1);
    
    end loop;
  
    return v_resultado;
  
  end;
  --

begin

  if pp_estado = 'AC' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 13 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> '01' then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 11, 1) * 2;
    
      v_digito := (11 - mod(v_calculo, 11));
    
      if v_digito >= 10 then
        v_digito := 0;
      end if;
    
      if v_digito <> substr(pp_nr_inscricao_estadual, 12, 1) then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 2;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 9;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 8;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 5;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 10, 1) * 4;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 11, 1) * 3;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 12, 1) * 2;
      
        v_digito := (11 - mod(v_calculo, 11));
      
        if v_digito >= 10 then
          v_digito := 0;
        end if;
      
        if v_digito <> substr(pp_nr_inscricao_estadual, 13, 1) then
        
          v_verificador := 'ERRADO';
        
        else
        
          v_verificador := 'CERTO';
        
        end if;
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'AL' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> '24' then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;
    
      v_digito := (11 - mod(v_calculo, 11));
    
      if v_digito >= 10 then
        v_digito := 0;
      end if;
    
      if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_verificador := 'CERTO';
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'AP' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> '03' then
    
      v_verificador := 'ERRADO';
    
    else
    
      if substr(pp_nr_inscricao_estadual, 1, 8) between 03000001 and
         03017000 then
        v_calculo := 5;
      end if;
    
      if substr(pp_nr_inscricao_estadual, 1, 8) between 03017001 and
         03019022 then
        v_calculo := 9;
      end if;
    
      if substr(pp_nr_inscricao_estadual, 1, 8) >= 03019023 then
        v_calculo := 0;
      end if;
    
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;
    
      v_digito := (11 - mod(v_calculo, 11));
    
      if v_digito = 10 then
      
        v_digito := 0;
      
      end if;
    
      if v_digito = 11 then
      
        if substr(pp_nr_inscricao_estadual, 1, 8) between 03000001 and
           03017000 then
          v_digito := 0;
        end if;
      
        if substr(pp_nr_inscricao_estadual, 1, 8) between 03017001 and
           03019022 then
          v_digito := 1;
        end if;
      
        if substr(pp_nr_inscricao_estadual, 1, 8) >= 03019023 then
          v_digito := 0;
        end if;
      
      end if;
    
      if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_verificador := 'CERTO';
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'MG' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 13 then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          1,
                          1) * 1;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          2,
                          1) * 2;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          3,
                          1) * 1;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          4,
                          1) * 2;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          5,
                          1) * 1;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          6,
                          1) * 2;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          7,
                          1) * 1;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          8,
                          1) * 2;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          9,
                          1) * 1;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          10,
                          1) * 2;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          11,
                          1) * 1;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          12,
                          1) * 2;
    
      v_digito := (trunc(soma_algebrica(v_calculo), -1) + 10) -
                  soma_algebrica(v_calculo);
    
      if v_digito <> substr(pp_nr_inscricao_estadual, 12, 1) then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 2;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 8;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 9;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 9, 1) * 10;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 10, 1) * 11;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 11, 1) * 2;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 12, 1) * 3;
      
        v_digito := (11 - mod(v_calculo, 11));
      
        if v_digito >= 10 then
          v_digito := 0;
        end if;
      
        if v_digito <> substr(pp_nr_inscricao_estadual, 13, 1) then
        
          v_verificador := 'ERRADO';
        
        else
        
          v_verificador := 'CERTO';
        
        end if;
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'SP' then
  
    if substr(pp_nr_inscricao_estadual, 1, 1) = 'P' then
      -- produtor rural
    
      if length(trim(pp_nr_inscricao_estadual)) <> 13 then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_calculo := substr(pp_nr_inscricao_estadual, 2, 1) * 1;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 8;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 9, 1) * 10;
      
        v_digito := mod(v_calculo, 11);
      
        if v_digito >= 10 then
        
          v_digito := 0;
        
        end if;
      
        if v_digito <> substr(pp_nr_inscricao_estadual, 10, 1)
        
         then
        
          v_verificador := 'ERRADO';
        
        else
        
          v_verificador := 'CERTO';
        
        end if;
      
      end if;
    
    else
    
      if length(trim(pp_nr_inscricao_estadual)) <> 12 then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 1;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 8;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 8, 1) * 10;
      
        v_digito := mod(v_calculo, 11);
      
        if v_digito >= 10 then
        
          v_digito := 0;
        
        end if;
      
        if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then
        
          v_verificador := 'ERRADO';
        
        else
        
          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 2, 1) * 2;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 3, 1) * 10;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 4, 1) * 9;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 5, 1) * 8;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 6, 1) * 7;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 7, 1) * 6;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 8, 1) * 5;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 9, 1) * 4;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 10, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 11, 1) * 2;
        
          v_digito := mod(v_calculo, 11);
        
          if v_digito >= 10 then
          
            v_digito := 0;
          
          end if;
        
          if v_digito <> substr(pp_nr_inscricao_estadual, 12, 1) then
          
            v_verificador := 'ERRADO';
          
          else
          
            v_verificador := 'CERTO';
          
          end if;
        
        end if;
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'RJ' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 8 then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 2;
    
      v_digito := 11 - mod(v_calculo, 11);
    
      if v_digito >= 10 then
      
        v_digito := 0;
      
      end if;
    
      if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_verificador := 'CERTO';
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'BA' then
  
    if length(trim(pp_nr_inscricao_estadual)) > 9 or
       length(trim(pp_nr_inscricao_estadual)) < 8 then
    
      v_verificador := 'ERRADO';
    
    else
    
      if length(trim(pp_nr_inscricao_estadual)) = 8 then
      
        if substr(pp_nr_inscricao_estadual, 1, 1) in (0, 1, 2, 3, 4, 5, 8) then
        
          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 7;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 2, 1) * 6;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 3, 1) * 5;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 4, 1) * 4;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 5, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 6, 1) * 2;
        
          v_digito := 10 - mod(v_calculo, 10);
        
          if v_digito >= 10 then
          
            v_digito := 0;
          
          end if;
        
          if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then
          
            v_verificador := 'ERRADO';
          
          else
          
            v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 2, 1) * 7;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 3, 1) * 6;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 4, 1) * 5;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 5, 1) * 4;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 6, 1) * 3;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 8, 1) * 2;
          
            v_digito := 10 - mod(v_calculo, 10);
          
            if v_digito >= 10 then
            
              v_digito := 0;
            
            end if;
          
            if v_digito <> substr(pp_nr_inscricao_estadual, 7, 1) then
            
              v_verificador := 'ERRADO';
            
            else
            
              v_verificador := 'CERTO';
            
            end if;
          
          end if;
        
        else
          ---
        
          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 7;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 2, 1) * 6;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 3, 1) * 5;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 4, 1) * 4;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 5, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 6, 1) * 2;
        
          v_digito := 11 - mod(v_calculo, 11);
        
          if v_digito >= 10 then
          
            v_digito := 0;
          
          end if;
        
          if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then
          
            v_verificador := 'ERRADO';
          
          else
          
            v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 2, 1) * 7;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 3, 1) * 6;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 4, 1) * 5;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 5, 1) * 4;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 6, 1) * 3;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 8, 1) * 2;
          
            v_digito := 11 - mod(v_calculo, 11);
          
            if v_digito >= 10 then
            
              v_digito := 0;
            
            end if;
          
            if v_digito <> substr(pp_nr_inscricao_estadual, 7, 1) then
            
              v_verificador := 'ERRADO';
            
            else
            
              v_verificador := 'CERTO';
            
            end if;
          
          end if;
        
        end if;
      
      else
      
        if substr(pp_nr_inscricao_estadual, 2, 1) in (0, 1, 2, 3, 4, 5, 8) then
        
          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8;
        
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 2, 1) * 7;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 3, 1) * 6;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 4, 1) * 5;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 5, 1) * 4;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 6, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 7, 1) * 2;
        
          v_digito := 10 - mod(v_calculo, 10);
        
          if v_digito >= 10 then
          
            v_digito := 0;
          
          end if;
        
          if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then
          
            v_verificador := 'ERRADO';
          
          else
          
            v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 2, 1) * 8;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 3, 1) * 7;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 4, 1) * 6;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 5, 1) * 5;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 6, 1) * 4;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 7, 1) * 3;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 9, 1) * 2;
          
            v_digito := 10 - mod(v_calculo, 10);
          
            if v_digito >= 10 then
            
              v_digito := 0;
            
            end if;
          
            if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then
            
              v_verificador := 'ERRADO';
            
            else
            
              v_verificador := 'CERTO';
            
            end if;
          
          end if;
        
        else
        
          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 2, 1) * 7;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 3, 1) * 6;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 4, 1) * 5;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 5, 1) * 4;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 6, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 7, 1) * 2;
        
          v_digito := 11 - mod(v_calculo, 11);
        
          if v_digito >= 10 then
          
            v_digito := 0;
          
          end if;
        
          if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then
          
            v_verificador := 'ERRADO';
          
          else
          
            v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 2, 1) * 8;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 3, 1) * 7;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 4, 1) * 6;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 5, 1) * 5;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 6, 1) * 4;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 7, 1) * 3;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 9, 1) * 2;
          
            v_digito := 11 - mod(v_calculo, 11);
          
            if v_digito >= 10 then
            
              v_digito := 0;
            
            end if;
          
            if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then
            
              v_verificador := 'ERRADO';
            
            else
            
              v_verificador := 'CERTO';
            
            end if;
          
          end if;
        
        end if;
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'RS' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 10 then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 2;
    
      v_digito := 11 - mod(v_calculo, 11);
    
      if v_digito > 10 then
      
        v_digito := 0;
      
      end if;
    
      if substr(pp_nr_inscricao_estadual, 10, 1) <> v_digito then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_verificador := 'CERTO';
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado in ('AM', 'CE', 'ES', 'PB', 'PI', 'SC', 'SE') then
  
    if length(pp_nr_inscricao_estadual) <> 9 then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;
    
      v_digito := 11 - mod(v_calculo, 11);
    
      if v_digito >= 10 then
      
        v_digito := 0;
      
      end if;
    
      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_verificador := 'CERTO';
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  --

  if pp_estado = 'GO' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 or
       (substr(pp_nr_inscricao_estadual, 1, 2) <> 10 and
        substr(pp_nr_inscricao_estadual, 1, 2) <> 11 and
        substr(pp_nr_inscricao_estadual, 1, 2) <> 15) then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;
    
      v_digito := 11 - mod(v_calculo, 11);
    
      if v_digito = 10 then
      
        v_digito := 0;
      
      end if;
    
      if v_digito = 11 then
      
        v_digito := 1;
      
      end if;
    
      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_verificador := 'CERTO';
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'MA' then
  
    if length(pp_nr_inscricao_estadual) <> 9 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> 12 then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;
    
      v_digito := 11 - mod(v_calculo, 11);
    
      if v_digito >= 10 then
      
        v_digito := 0;
      
      end if;
    
      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_verificador := 'CERTO';
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'muito' then
  
    if length(pp_nr_inscricao_estadual) <> 11 then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 2;
    
      v_digito := 11 - mod(v_calculo, 11);
    
      if v_digito >= 10 then
      
        v_digito := 0;
      
      end if;
    
      if substr(pp_nr_inscricao_estadual, 11, 1) <> v_digito then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_verificador := 'CERTO';
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'MS' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> 28 then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;
    
      v_digito := 11 - mod(v_calculo, 11);
    
      if v_digito = 10 then
      
        v_digito := 0;
      
      end if;
    
      if v_digito = 11 then
      
        v_digito := 1;
      
      end if;
    
      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_verificador := 'CERTO';
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'PA' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> 15 then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;
    
      v_digito := 11 - mod(v_calculo, 11);
    
      if v_digito >= 10 then
      
        v_digito := 0;
      
      end if;
    
      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_verificador := 'CERTO';
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'DF' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 13 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> 07 then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 11, 1) * 2;
    
      v_digito := 11 - mod(v_calculo, 11);
    
      if v_digito >= 10 then
      
        v_digito := 0;
      
      end if;
    
      if substr(pp_nr_inscricao_estadual, 12, 1) <> v_digito then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 2;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 9;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 8;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 5;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 10, 1) * 4;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 11, 1) * 3;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 12, 1) * 2;
      
        v_digito := 11 - mod(v_calculo, 11);
      
        if v_digito >= 10 then
        
          v_digito := 0;
        
        end if;
      
        if substr(pp_nr_inscricao_estadual, 13, 1) <> v_digito then
        
          v_verificador := 'ERRADO';
        
        else
        
          v_verificador := 'CERTO';
        
        end if;
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'TO' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 11 or
       (substr(pp_nr_inscricao_estadual, 3, 2) <> 01 and
        substr(pp_nr_inscricao_estadual, 3, 2) <> 02 and
        substr(pp_nr_inscricao_estadual, 3, 2) <> 03 and
        substr(pp_nr_inscricao_estadual, 3, 2) <> 99) then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 2;
    
      v_digito := 11 - mod(v_calculo, 11);
    
      if v_digito >= 10 then
      
        v_digito := 0;
      
      end if;
    
      if substr(pp_nr_inscricao_estadual, 11, 1) <> v_digito then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_verificador := 'CERTO';
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'PR' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 10 then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;
    
      v_digito := 11 - mod(v_calculo, 11);
    
      if v_digito >= 10 then
      
        v_digito := 0;
      
      end if;
    
      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 2;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 2;
      
        v_digito := 11 - mod(v_calculo, 11);
      
        if v_digito >= 10 then
        
          v_digito := 0;
        
        end if;
      
        if substr(pp_nr_inscricao_estadual, 10, 1) <> v_digito then
        
          v_verificador := 'ERRADO';
        
        else
        
          v_verificador := 'CERTO';
        
        end if;
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'RO' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 14 then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 11, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 12, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 13, 1) * 2;
    
      v_digito := 11 - mod(v_calculo, 11);
    
      if v_digito = 10 then
      
        v_digito := 0;
      
      end if;
    
      if v_digito = 11 then
      
        v_digito := 1;
      
      end if;
    
      if substr(pp_nr_inscricao_estadual, 14, 1) <> v_digito then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_verificador := 'CERTO';
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'RR' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> 24 then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 1;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 8;
    
      v_digito := mod(v_calculo, 9);
    
      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_verificador := 'CERTO';
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'PE' then
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 then
    
      v_verificador := 'ERRADO';
    
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 2;
    
      v_digito := 11 - mod(v_calculo, 11);
    
      if v_digito >= 10 then
      
        v_digito := 0;
      
      end if;
    
      if substr(pp_nr_inscricao_estadual, 8, 1) <> v_digito then
      
        v_verificador := 'ERRADO';
      
      else
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;
      
        v_digito := 11 - mod(v_calculo, 11);
      
        if v_digito >= 10 then
        
          v_digito := 0;
        
        end if;
      
        if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then
        
          v_verificador := 'ERRADO';
        
        else
        
          v_verificador := 'CERTO';
        
        end if;
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

  if pp_estado = 'RN' then
  
    if substr(pp_nr_inscricao_estadual, 1, 2) <> 20 then
    
      v_verificador := 'ERRADO';
    
    else
    
      if length(trim(pp_nr_inscricao_estadual)) = 9 then
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;
        v_calculo := v_calculo * 10;
      
        v_digito := mod(v_calculo, 11);
      
        if v_digito >= 10 then
        
          v_digito := 0;
        
        end if;
      
        if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then
        
          v_verificador := 'ERRADO';
        
        else
        
          v_verificador := 'CERTO';
        
        end if;
      
      else
      
        if length(trim(pp_nr_inscricao_estadual)) <> 10 then
        
          v_verificador := 'ERRADO';
        
        else
        
          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 10;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 2, 1) * 9;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 3, 1) * 8;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 4, 1) * 7;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 5, 1) * 6;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 6, 1) * 5;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 7, 1) * 4;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 8, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 9, 1) * 2;
          v_calculo := v_calculo * 10;
        
          v_digito := mod(v_calculo, 11);
        
          if v_digito >= 10 then
          
            v_digito := 0;
          
          end if;
        
          if substr(pp_nr_inscricao_estadual, 10, 1) <> v_digito then
          
            v_verificador := 'ERRADO';
          
          else
          
            v_verificador := 'CERTO';
          
          end if;
        
        end if;
      
      end if;
    
    end if;
  
    return v_verificador;
  
  end if;

end;
esttevan
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qua, 07 Out 2009 10:11 am
Localização: Nova Hartz - RS

não esta validando a regra que esta no sintegra para o estado de Goias.
Quando o resto da divisão for um (1), e a inscrição for maior ou igual a 10103105 e menor ou igual a 10119997, o dígito verificador será um (1);
fonte: http://www.sintegra.gov.br/Cad_Estados/cad_GO.html

Estevan
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Esse código poderia passar por um singelo refactoring. Dar manutenção nele na forma que está é uma tarefa bestial.
hugo_roberto
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 12 Nov 2010 10:07 am
Localização: SP
Hugo Roberto Souza Santos

sinta-se a vontade.
hugo_roberto
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 12 Nov 2010 10:07 am
Localização: SP
Hugo Roberto Souza Santos

olha, eu acho muito mais bestial entrar no fórum para não contribuir com porra nenhuma.
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

Oi Hugo,

Acredito que o Francisco não teve intenção alguma de ofender. Cada um têm uma opinião e acredito que o fórum está aqui pra isto. Acho que você se fez entender já na primeira resposta ao post dele, então vamos parar por aqui e seguir em frente, porque desentendimentos entre o pessoal aqui não fará bem algum ao grupo. 8)

A sua contribuição já foi feita e com certeza é muito válida para outras pessoas que venham a necessitar de uma função do tipo.

Se morar em Campinas eu te pago uma cervejinha pra acalmar os ânimos... :wink:
hugo_roberto
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 12 Nov 2010 10:07 am
Localização: SP
Hugo Roberto Souza Santos

opa. tudo bem !

achei a palavra bestial de alguma forma ofensiva.

aceitaria numa boa que ele escrevesse o código com melhores práticas e postasse no fórum.

quanto a cervejinha, marcaremos em outra hora estou na capital.

obrigado e uma grande abraço.
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Não foi com intenção de ofender não, me desculpe se pareceu.

E o "singelo" não foi sarcasmo não, pois o mais importante é que funciona, e você ter tido a boa vontade de contribuir com o pessoal que possa estar suando para fazer o mesmo.
racelike
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Seg, 12 Set 2011 4:10 pm
Localização: Fortaleza-CE

Pessoal, segue novamente o código, sem o DMBS_OUTPUT.... do final.

Selecionar tudo

create or replace function val_inscr(pp_estado                varchar2,
                                     pp_nr_inscricao_estadual varchar2)

  /* CRIADO POR HUGO ROBERTO SOUZA SANTOS EM 11/11/2010*/
  /* SE PREFERIREM PODEM USAR BOOLEANOS */

  /* Correção da validação do 'MS' (Tarcisio Holanda, 10/09/11)
   * Correção da validação do 'RS' (Tarcisio Holanda, 10/09/11)
   * Correção da validação de 'GO' (Tarcisio Holanda, 10/09/11)
   * Correção da validação de 'MG' (Carlos Lopes, 10/09/11)
   */


 return varchar2 is

  v_verificador varchar2(50);
  v_calculo     number;
  v_digito      number;

  function soma_algebrica(p_valor number) return number is

    v_contador  number := 0;
    v_resultado number := 0;

  begin

    for a in 1 .. length(p_valor) loop

      v_contador := v_contador + 1;

      v_resultado := v_resultado + substr(p_valor, v_contador, 1);

    end loop;

    return v_resultado;

  end;
  --

begin

  if pp_estado = 'AC' then

    if length(trim(pp_nr_inscricao_estadual)) <> 13 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> '01' then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 11, 1) * 2;

      v_digito := (11 - mod(v_calculo, 11));

      if v_digito >= 10 then
        v_digito := 0;
      end if;

      if v_digito <> substr(pp_nr_inscricao_estadual, 12, 1) then

        v_verificador := 'ERRADO';

      else

        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 2;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 9;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 8;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 5;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 10, 1) * 4;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 11, 1) * 3;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 12, 1) * 2;

        v_digito := (11 - mod(v_calculo, 11));

        if v_digito >= 10 then
          v_digito := 0;
        end if;

        if v_digito <> substr(pp_nr_inscricao_estadual, 13, 1) then

          v_verificador := 'ERRADO';

        else

          v_verificador := 'CERTO';

        end if;

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'AL' then

    if length(trim(pp_nr_inscricao_estadual)) <> 9 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> '24' then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;

      v_digito := (11 - mod(v_calculo, 11));

      if v_digito >= 10 then
        v_digito := 0;
      end if;

      if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then

        v_verificador := 'ERRADO';

      else

        v_verificador := 'CERTO';

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'AP' then

    if length(trim(pp_nr_inscricao_estadual)) <> 9 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> '03' then

      v_verificador := 'ERRADO';

    else

      if substr(pp_nr_inscricao_estadual, 1, 8) between 03000001 and
         03017000 then
        v_calculo := 5;
      end if;

      if substr(pp_nr_inscricao_estadual, 1, 8) between 03017001 and
         03019022 then
        v_calculo := 9;
      end if;

      if substr(pp_nr_inscricao_estadual, 1, 8) >= 03019023 then
        v_calculo := 0;
      end if;

      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;

      v_digito := (11 - mod(v_calculo, 11));

      if v_digito = 10 then

        v_digito := 0;

      end if;

      if v_digito = 11 then

        if substr(pp_nr_inscricao_estadual, 1, 8) between 03000001 and
           03017000 then
          v_digito := 0;
        end if;

        if substr(pp_nr_inscricao_estadual, 1, 8) between 03017001 and
           03019022 then
          v_digito := 1;
        end if;

        if substr(pp_nr_inscricao_estadual, 1, 8) >= 03019023 then
          v_digito := 0;
        end if;

      end if;

      if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then

        v_verificador := 'ERRADO';

      else

        v_verificador := 'CERTO';

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'MG' then

    if length(trim(pp_nr_inscricao_estadual)) <> 13 then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          1,
                          1) * 1;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          2,
                          1) * 2;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          3,
                          1) * 1;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          4,
                          1) * 2;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          5,
                          1) * 1;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          6,
                          1) * 2;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          7,
                          1) * 1;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          8,
                          1) * 2;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          9,
                          1) * 1;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          10,
                          1) * 2;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          11,
                          1) * 1;
      v_calculo := v_calculo ||
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 ||
                          substr(pp_nr_inscricao_estadual, 4, 8),
                          12,
                          1) * 2;

	  if soma_algebrica(v_calculo) <> trunc(soma_algebrica(v_calculo), -1) then

			v_digito := (trunc(soma_algebrica(v_calculo), -1) + 10) -
						soma_algebrica(v_calculo);

      else

			v_digito := 0;

      end if;

      if v_digito <> substr(pp_nr_inscricao_estadual, 12, 1) then

        v_verificador := 'ERRADO';

      else

        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 2;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 11;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 10;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 9;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 8;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 11, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 12, 1) * 2;

        v_digito := (11 - mod(v_calculo, 11));

        if v_digito >= 10 then
          v_digito := 0;
        end if;

        if v_digito <> substr(pp_nr_inscricao_estadual, 13, 1) then

          v_verificador := 'ERRADO';

        else

          v_verificador := 'CERTO';

        end if;

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'SP' then

    if substr(pp_nr_inscricao_estadual, 1, 1) = 'P' then
      -- produtor rural

      if length(trim(pp_nr_inscricao_estadual)) <> 13 then

        v_verificador := 'ERRADO';

      else

        v_calculo := substr(pp_nr_inscricao_estadual, 2, 1) * 1;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 8;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 9, 1) * 10;

        v_digito := mod(v_calculo, 11);

        if v_digito >= 10 then

          v_digito := 0;

        end if;

        if v_digito <> substr(pp_nr_inscricao_estadual, 10, 1)

         then

          v_verificador := 'ERRADO';

        else

          v_verificador := 'CERTO';

        end if;

      end if;

    else

      if length(trim(pp_nr_inscricao_estadual)) <> 12 then

        v_verificador := 'ERRADO';

      else

        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 1;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 8;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 8, 1) * 10;

        v_digito := mod(v_calculo, 11);

        if v_digito >= 10 then

          v_digito := 0;

        end if;

        if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then

          v_verificador := 'ERRADO';

        else

          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 2, 1) * 2;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 3, 1) * 10;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 4, 1) * 9;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 5, 1) * 8;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 6, 1) * 7;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 7, 1) * 6;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 8, 1) * 5;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 9, 1) * 4;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 10, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 11, 1) * 2;

          v_digito := mod(v_calculo, 11);

          if v_digito >= 10 then

            v_digito := 0;

          end if;

          if v_digito <> substr(pp_nr_inscricao_estadual, 12, 1) then

            v_verificador := 'ERRADO';

          else

            v_verificador := 'CERTO';

          end if;

        end if;

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'RJ' then

    if length(trim(pp_nr_inscricao_estadual)) <> 8 then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 2;

      v_digito := 11 - mod(v_calculo, 11);

      if v_digito >= 10 then

        v_digito := 0;

      end if;

      if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then

        v_verificador := 'ERRADO';

      else

        v_verificador := 'CERTO';

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'BA' then

    if length(trim(pp_nr_inscricao_estadual)) > 9 or
       length(trim(pp_nr_inscricao_estadual)) < 8 then

      v_verificador := 'ERRADO';

    else

      if length(trim(pp_nr_inscricao_estadual)) = 8 then

        if substr(pp_nr_inscricao_estadual, 1, 1) in (0, 1, 2, 3, 4, 5, 8) then

          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 7;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 2, 1) * 6;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 3, 1) * 5;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 4, 1) * 4;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 5, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 6, 1) * 2;

          v_digito := 10 - mod(v_calculo, 10);

          if v_digito >= 10 then

            v_digito := 0;

          end if;

          if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then

            v_verificador := 'ERRADO';

          else

            v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 2, 1) * 7;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 3, 1) * 6;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 4, 1) * 5;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 5, 1) * 4;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 6, 1) * 3;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 8, 1) * 2;

            v_digito := 10 - mod(v_calculo, 10);

            if v_digito >= 10 then

              v_digito := 0;

            end if;

            if v_digito <> substr(pp_nr_inscricao_estadual, 7, 1) then

              v_verificador := 'ERRADO';

            else

              v_verificador := 'CERTO';

            end if;

          end if;

        else
          ---

          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 7;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 2, 1) * 6;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 3, 1) * 5;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 4, 1) * 4;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 5, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 6, 1) * 2;

          v_digito := 11 - mod(v_calculo, 11);

          if v_digito >= 10 then

            v_digito := 0;

          end if;

          if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then

            v_verificador := 'ERRADO';

          else

            v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 2, 1) * 7;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 3, 1) * 6;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 4, 1) * 5;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 5, 1) * 4;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 6, 1) * 3;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 8, 1) * 2;

            v_digito := 11 - mod(v_calculo, 11);

            if v_digito >= 10 then

              v_digito := 0;

            end if;

            if v_digito <> substr(pp_nr_inscricao_estadual, 7, 1) then

              v_verificador := 'ERRADO';

            else

              v_verificador := 'CERTO';

            end if;

          end if;

        end if;

      else

        if substr(pp_nr_inscricao_estadual, 2, 1) in (0, 1, 2, 3, 4, 5, 8) then

          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8;

          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 2, 1) * 7;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 3, 1) * 6;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 4, 1) * 5;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 5, 1) * 4;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 6, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 7, 1) * 2;

          v_digito := 10 - mod(v_calculo, 10);

          if v_digito >= 10 then

            v_digito := 0;

          end if;

          if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then

            v_verificador := 'ERRADO';

          else

            v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 2, 1) * 8;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 3, 1) * 7;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 4, 1) * 6;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 5, 1) * 5;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 6, 1) * 4;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 7, 1) * 3;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 9, 1) * 2;

            v_digito := 10 - mod(v_calculo, 10);

            if v_digito >= 10 then

              v_digito := 0;

            end if;

            if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then

              v_verificador := 'ERRADO';

            else

              v_verificador := 'CERTO';

            end if;

          end if;

        else

          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 2, 1) * 7;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 3, 1) * 6;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 4, 1) * 5;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 5, 1) * 4;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 6, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 7, 1) * 2;

          v_digito := 11 - mod(v_calculo, 11);

          if v_digito >= 10 then

            v_digito := 0;

          end if;

          if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then

            v_verificador := 'ERRADO';

          else

            v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 2, 1) * 8;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 3, 1) * 7;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 4, 1) * 6;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 5, 1) * 5;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 6, 1) * 4;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 7, 1) * 3;
            v_calculo := v_calculo +
                         substr(pp_nr_inscricao_estadual, 9, 1) * 2;

            v_digito := 11 - mod(v_calculo, 11);

            if v_digito >= 10 then

              v_digito := 0;

            end if;

            if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then

              v_verificador := 'ERRADO';

            else

              v_verificador := 'CERTO';

            end if;

          end if;

        end if;

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'RS' then

    if length(trim(pp_nr_inscricao_estadual)) <> 10 then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 2;

      v_digito := 11 - mod(v_calculo, 11);

      if v_digito >= 10 then

        v_digito := 0;

      end if;

      if substr(pp_nr_inscricao_estadual, 10, 1) <> v_digito then

        v_verificador := 'ERRADO';

      else

        v_verificador := 'CERTO';

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado in ('AM', 'CE', 'ES', 'PB', 'PI', 'SC', 'SE') then

    if length(pp_nr_inscricao_estadual) <> 9 then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;

      v_digito := 11 - mod(v_calculo, 11);

      if v_digito >= 10 then

        v_digito := 0;

      end if;

      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then

        v_verificador := 'ERRADO';

      else

        v_verificador := 'CERTO';

      end if;

    end if;

    return v_verificador;

  end if;

  --

  if pp_estado = 'GO' then

    if length(trim(pp_nr_inscricao_estadual)) <> 9 or
       (substr(pp_nr_inscricao_estadual, 1, 2) <> 10 and
        substr(pp_nr_inscricao_estadual, 1, 2) <> 11 and
        substr(pp_nr_inscricao_estadual, 1, 2) <> 15) then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;

      v_digito := 11 - mod(v_calculo, 11);

      if substr(pp_nr_inscricao_estadual, 1, 8) = '11094402' and
         (substr(pp_nr_inscricao_estadual, 9, 1) = '0' or substr(pp_nr_inscricao_estadual, 9, 1) = '1') then

         v_verificador := 'CERTO';

      else

          if v_digito = 11 then

              v_digito := 0;

          end if;

          if v_digito = 10 then

             if to_number(substr(pp_nr_inscricao_estadual, 1, 8)) >= 10103105 and
                to_number(substr(pp_nr_inscricao_estadual, 1, 8)) <= 10119997 then

                 v_digito := 1;

             else

                 v_digito := 0;

             end if;

          end if;

          if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then

             v_verificador := 'ERRADO';

          else

             v_verificador := 'CERTO';

          end if;

      end if;

     end if;

    return v_verificador;

  end if;

  if pp_estado = 'MA' then

    if length(pp_nr_inscricao_estadual) <> 9 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> 12 then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;

      v_digito := 11 - mod(v_calculo, 11);

      if v_digito >= 10 then

        v_digito := 0;

      end if;

      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then

        v_verificador := 'ERRADO';

      else

        v_verificador := 'CERTO';

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'muito' then

    if length(pp_nr_inscricao_estadual) <> 11 then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 2;

      v_digito := 11 - mod(v_calculo, 11);

      if v_digito >= 10 then

        v_digito := 0;

      end if;

      if substr(pp_nr_inscricao_estadual, 11, 1) <> v_digito then

        v_verificador := 'ERRADO';

      else

        v_verificador := 'CERTO';

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'MS' then

    if length(trim(pp_nr_inscricao_estadual)) <> 9 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> 28 then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;

      v_digito := 11 - mod(v_calculo, 11);

      if v_digito >= 10 then

        v_digito := 0;

      end if;

      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then

        v_verificador := 'ERRADO';

      else

        v_verificador := 'CERTO';

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'PA' then

    if length(trim(pp_nr_inscricao_estadual)) <> 9 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> 15 then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;

      v_digito := 11 - mod(v_calculo, 11);

      if v_digito >= 10 then

        v_digito := 0;

      end if;

      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then

        v_verificador := 'ERRADO';

      else

        v_verificador := 'CERTO';

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'DF' then

    if length(trim(pp_nr_inscricao_estadual)) <> 13 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> 07 then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 11, 1) * 2;

      v_digito := 11 - mod(v_calculo, 11);

      if v_digito >= 10 then

        v_digito := 0;

      end if;

      if substr(pp_nr_inscricao_estadual, 12, 1) <> v_digito then

        v_verificador := 'ERRADO';

      else

        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 2;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 9;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 8;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 5;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 10, 1) * 4;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 11, 1) * 3;
        v_calculo := v_calculo +
                     substr(pp_nr_inscricao_estadual, 12, 1) * 2;

        v_digito := 11 - mod(v_calculo, 11);

        if v_digito >= 10 then

          v_digito := 0;

        end if;

        if substr(pp_nr_inscricao_estadual, 13, 1) <> v_digito then

          v_verificador := 'ERRADO';

        else

          v_verificador := 'CERTO';

        end if;

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'TO' then

    if length(trim(pp_nr_inscricao_estadual)) <> 11 or
       (substr(pp_nr_inscricao_estadual, 3, 2) <> 01 and
        substr(pp_nr_inscricao_estadual, 3, 2) <> 02 and
        substr(pp_nr_inscricao_estadual, 3, 2) <> 03 and
        substr(pp_nr_inscricao_estadual, 3, 2) <> 99) then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 2;

      v_digito := 11 - mod(v_calculo, 11);

      if v_digito >= 10 then

        v_digito := 0;

      end if;

      if substr(pp_nr_inscricao_estadual, 11, 1) <> v_digito then

        v_verificador := 'ERRADO';

      else

        v_verificador := 'CERTO';

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'PR' then

    if length(trim(pp_nr_inscricao_estadual)) <> 10 then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;

      v_digito := 11 - mod(v_calculo, 11);

      if v_digito >= 10 then

        v_digito := 0;

      end if;

      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then

        v_verificador := 'ERRADO';

      else

        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 2;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 2;

        v_digito := 11 - mod(v_calculo, 11);

        if v_digito >= 10 then

          v_digito := 0;

        end if;

        if substr(pp_nr_inscricao_estadual, 10, 1) <> v_digito then

          v_verificador := 'ERRADO';

        else

          v_verificador := 'CERTO';

        end if;

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'RO' then

    if length(trim(pp_nr_inscricao_estadual)) <> 14 then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 9;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 11, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 12, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 13, 1) * 2;

      v_digito := 11 - mod(v_calculo, 11);

      if v_digito = 10 then

        v_digito := 0;

      end if;

      if v_digito = 11 then

        v_digito := 1;

      end if;

      if substr(pp_nr_inscricao_estadual, 14, 1) <> v_digito then

        v_verificador := 'ERRADO';

      else

        v_verificador := 'CERTO';

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'RR' then

    if length(trim(pp_nr_inscricao_estadual)) <> 9 or
       substr(pp_nr_inscricao_estadual, 1, 2) <> 24 then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 1;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 2;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 8;

      v_digito := mod(v_calculo, 9);

      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then

        v_verificador := 'ERRADO';

      else

        v_verificador := 'CERTO';

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'PE' then

    if length(trim(pp_nr_inscricao_estadual)) <> 9 then

      v_verificador := 'ERRADO';

    else

      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 7;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 6;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 5;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 4;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 3;
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 2;

      v_digito := 11 - mod(v_calculo, 11);

      if v_digito >= 10 then

        v_digito := 0;

      end if;

      if substr(pp_nr_inscricao_estadual, 8, 1) <> v_digito then

        v_verificador := 'ERRADO';

      else

        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;

        v_digito := 11 - mod(v_calculo, 11);

        if v_digito >= 10 then

          v_digito := 0;

        end if;

        if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then

          v_verificador := 'ERRADO';

        else

          v_verificador := 'CERTO';

        end if;

      end if;

    end if;

    return v_verificador;

  end if;

  if pp_estado = 'RN' then

    if substr(pp_nr_inscricao_estadual, 1, 2) <> 20 then

      v_verificador := 'ERRADO';

    else

      if length(trim(pp_nr_inscricao_estadual)) = 9 then

        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3;
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2;
        v_calculo := v_calculo * 10;

        v_digito := mod(v_calculo, 11);

        if v_digito >= 10 then

          v_digito := 0;

        end if;

        if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then

          v_verificador := 'ERRADO';

        else

          v_verificador := 'CERTO';

        end if;

      else

        if length(trim(pp_nr_inscricao_estadual)) <> 10 then

          v_verificador := 'ERRADO';

        else

          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 10;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 2, 1) * 9;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 3, 1) * 8;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 4, 1) * 7;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 5, 1) * 6;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 6, 1) * 5;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 7, 1) * 4;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 8, 1) * 3;
          v_calculo := v_calculo +
                       substr(pp_nr_inscricao_estadual, 9, 1) * 2;
          v_calculo := v_calculo * 10;

          v_digito := mod(v_calculo, 11);

          if v_digito >= 10 then

            v_digito := 0;

          end if;

          if substr(pp_nr_inscricao_estadual, 10, 1) <> v_digito then

            v_verificador := 'ERRADO';

          else

            v_verificador := 'CERTO';

          end if;

        end if;

      end if;

    end if;

    return v_verificador;

  end if;


  if v_verificador is null then

       return 'UF INVÁLIDA';

  end if;

end;
racelike
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Seg, 12 Set 2011 4:10 pm
Localização: Fortaleza-CE

Pessoal, identificamos um problema com a validação de Tocantins.

O código que está aí está correto, onde o número deve ter 11 dígitos. Mas a DLL oficial de validação considera como correto quando um número é passado com 9 dígitos, pois existem 2 números fixos na regra que não são usados no cálculo do dígito.

Já até fizemos o ajuste, ficando igual ao resultado da DLL, mas vamos tentar validar isto em definitivo com o Sefaz/TO.
racelike
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Seg, 12 Set 2011 4:10 pm
Localização: Fortaleza-CE

Segue abaixo o código novamente, com o algoritmo de Tocantins corrigido. Na verdade o correto mesmo são os números com 9 dígitos. O site do Sintegra está desatualizado. Segue a referência correta no site da Sefaz/TO: http://www.sefaz.to.gov.br/calculodv2.php


Selecionar tudo

create or replace function val_inscr(pp_estado                varchar2,
                                     pp_nr_inscricao_estadual varchar2) 

  /* CRIADO POR HUGO ROBERTO SOUZA SANTOS EM 11/11/2010*/ 
  /* SE PREFERIREM PODEM USAR BOOLEANOS */ 
  
  /* Correção da validação do 'MS' (Tarcisio Holanda, 10/09/11)
   * Correção da validação do 'RS' (Tarcisio Holanda, 10/09/11)
   * Correção da validação de 'GO' (Tarcisio Holanda, 10/09/11)
   * Correção da validação de 'MG' (Carlos Lopes, 10/09/11)
   * Correção da validação de 'TO' (Carlos Lopes, 14/09/11)
   */


 return varchar2 is 

  v_verificador varchar2(50); 
  v_calculo     number; 
  v_digito      number; 

  function soma_algebrica(p_valor number) return number is 
  
    v_contador  number := 0; 
    v_resultado number := 0; 
  
  begin 
  
    for a in 1 .. length(p_valor) loop 
    
      v_contador := v_contador + 1; 
    
      v_resultado := v_resultado + substr(p_valor, v_contador, 1); 
    
    end loop; 
  
    return v_resultado; 
  
  end; 
  -- 

begin 

  if pp_estado = 'AC' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 13 or 
       substr(pp_nr_inscricao_estadual, 1, 2) <> '01' then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 2; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 9; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 8; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 11, 1) * 2; 
    
      v_digito := (11 - mod(v_calculo, 11)); 
    
      if v_digito >= 10 then 
        v_digito := 0; 
      end if; 
    
      if v_digito <> substr(pp_nr_inscricao_estadual, 12, 1) then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 5; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 4; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 3; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 2; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 9; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 8; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 6; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 5; 
        v_calculo := v_calculo + 
                     substr(pp_nr_inscricao_estadual, 10, 1) * 4; 
        v_calculo := v_calculo + 
                     substr(pp_nr_inscricao_estadual, 11, 1) * 3; 
        v_calculo := v_calculo + 
                     substr(pp_nr_inscricao_estadual, 12, 1) * 2; 
      
        v_digito := (11 - mod(v_calculo, 11)); 
      
        if v_digito >= 10 then 
          v_digito := 0; 
        end if; 
      
        if v_digito <> substr(pp_nr_inscricao_estadual, 13, 1) then 
        
          v_verificador := 'ERRADO'; 
        
        else 
        
          v_verificador := 'CERTO'; 
        
        end if; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'AL' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 or 
       substr(pp_nr_inscricao_estadual, 1, 2) <> '24' then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2; 
    
      v_digito := (11 - mod(v_calculo, 11)); 
    
      if v_digito >= 10 then 
        v_digito := 0; 
      end if; 
    
      if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_verificador := 'CERTO'; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'AP' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 or 
       substr(pp_nr_inscricao_estadual, 1, 2) <> '03' then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      if substr(pp_nr_inscricao_estadual, 1, 8) between 03000001 and 
         03017000 then 
        v_calculo := 5; 
      end if; 
    
      if substr(pp_nr_inscricao_estadual, 1, 8) between 03017001 and 
         03019022 then 
        v_calculo := 9; 
      end if; 
    
      if substr(pp_nr_inscricao_estadual, 1, 8) >= 03019023 then 
        v_calculo := 0; 
      end if; 
    
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 1, 1) * 9; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2; 
    
      v_digito := (11 - mod(v_calculo, 11)); 
    
      if v_digito = 10 then 
      
        v_digito := 0; 
      
      end if; 
    
      if v_digito = 11 then 
      
        if substr(pp_nr_inscricao_estadual, 1, 8) between 03000001 and 
           03017000 then 
          v_digito := 0; 
        end if; 
      
        if substr(pp_nr_inscricao_estadual, 1, 8) between 03017001 and 
           03019022 then 
          v_digito := 1; 
        end if; 
      
        if substr(pp_nr_inscricao_estadual, 1, 8) >= 03019023 then 
          v_digito := 0; 
        end if; 
      
      end if; 
    
      if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_verificador := 'CERTO'; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'MG' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 13 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 || 
                          substr(pp_nr_inscricao_estadual, 4, 8), 
                          1, 
                          1) * 1; 
      v_calculo := v_calculo || 
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 || 
                          substr(pp_nr_inscricao_estadual, 4, 8), 
                          2, 
                          1) * 2; 
      v_calculo := v_calculo || 
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 || 
                          substr(pp_nr_inscricao_estadual, 4, 8), 
                          3, 
                          1) * 1; 
      v_calculo := v_calculo || 
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 || 
                          substr(pp_nr_inscricao_estadual, 4, 8), 
                          4, 
                          1) * 2; 
      v_calculo := v_calculo || 
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 || 
                          substr(pp_nr_inscricao_estadual, 4, 8), 
                          5, 
                          1) * 1; 
      v_calculo := v_calculo || 
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 || 
                          substr(pp_nr_inscricao_estadual, 4, 8), 
                          6, 
                          1) * 2; 
      v_calculo := v_calculo || 
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 || 
                          substr(pp_nr_inscricao_estadual, 4, 8), 
                          7, 
                          1) * 1; 
      v_calculo := v_calculo || 
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 || 
                          substr(pp_nr_inscricao_estadual, 4, 8), 
                          8, 
                          1) * 2; 
      v_calculo := v_calculo || 
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 || 
                          substr(pp_nr_inscricao_estadual, 4, 8), 
                          9, 
                          1) * 1; 
      v_calculo := v_calculo || 
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 || 
                          substr(pp_nr_inscricao_estadual, 4, 8), 
                          10, 
                          1) * 2; 
      v_calculo := v_calculo || 
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 || 
                          substr(pp_nr_inscricao_estadual, 4, 8), 
                          11, 
                          1) * 1; 
      v_calculo := v_calculo || 
                   substr(substr(pp_nr_inscricao_estadual, 1, 3) || 0 || 
                          substr(pp_nr_inscricao_estadual, 4, 8), 
                          12, 
                          1) * 2; 
    
	  if soma_algebrica(v_calculo) <> trunc(soma_algebrica(v_calculo), -1) then

			v_digito := (trunc(soma_algebrica(v_calculo), -1) + 10) -
						soma_algebrica(v_calculo);            

      else

			v_digito := 0;

      end if;
	
      if v_digito <> substr(pp_nr_inscricao_estadual, 12, 1) then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 3; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 2; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 11; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 10; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 9; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 8; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 6; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 5; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 4; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 11, 1) * 3; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 12, 1) * 2; 
      
        v_digito := (11 - mod(v_calculo, 11)); 
      
        if v_digito >= 10 then 
          v_digito := 0; 
        end if; 
      
        if v_digito <> substr(pp_nr_inscricao_estadual, 13, 1) then 
        
          v_verificador := 'ERRADO'; 
        
        else 
        
          v_verificador := 'CERTO'; 
        
        end if; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'SP' then 
  
    if substr(pp_nr_inscricao_estadual, 1, 1) = 'P' then 
      -- produtor rural 
    
      if length(trim(pp_nr_inscricao_estadual)) <> 13 then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_calculo := substr(pp_nr_inscricao_estadual, 2, 1) * 1; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 3; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 4; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 6; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 8; 
        v_calculo := v_calculo + 
                     substr(pp_nr_inscricao_estadual, 9, 1) * 10; 
      
        v_digito := mod(v_calculo, 11); 
      
        if v_digito >= 10 then 
        
          v_digito := 0; 
        
        end if; 
      
        if v_digito <> substr(pp_nr_inscricao_estadual, 10, 1) 
        
         then 
        
          v_verificador := 'ERRADO'; 
        
        else 
        
          v_verificador := 'CERTO'; 
        
        end if; 
      
      end if; 
    
    else 
    
      if length(trim(pp_nr_inscricao_estadual)) <> 12 then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 1; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 3; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 4; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 5; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 6; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 7; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 8; 
        v_calculo := v_calculo + 
                     substr(pp_nr_inscricao_estadual, 8, 1) * 10; 
      
        v_digito := mod(v_calculo, 11); 
      
        if v_digito >= 10 then 
        
          v_digito := 0; 
        
        end if; 
      
        if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then 
        
          v_verificador := 'ERRADO'; 
        
        else 
        
          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 3; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 2, 1) * 2; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 3, 1) * 10; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 4, 1) * 9; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 5, 1) * 8; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 6, 1) * 7; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 7, 1) * 6; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 8, 1) * 5; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 9, 1) * 4; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 10, 1) * 3; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 11, 1) * 2; 
        
          v_digito := mod(v_calculo, 11); 
        
          if v_digito >= 10 then 
          
            v_digito := 0; 
          
          end if; 
        
          if v_digito <> substr(pp_nr_inscricao_estadual, 12, 1) then 
          
            v_verificador := 'ERRADO'; 
          
          else 
          
            v_verificador := 'CERTO'; 
          
          end if; 
        
        end if; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'RJ' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 8 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 2; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 2; 
    
      v_digito := 11 - mod(v_calculo, 11); 
    
      if v_digito >= 10 then 
      
        v_digito := 0; 
      
      end if; 
    
      if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_verificador := 'CERTO'; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'BA' then 
  
    if length(trim(pp_nr_inscricao_estadual)) > 9 or 
       length(trim(pp_nr_inscricao_estadual)) < 8 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      if length(trim(pp_nr_inscricao_estadual)) = 8 then 
      
        if substr(pp_nr_inscricao_estadual, 1, 1) in (0, 1, 2, 3, 4, 5, 8) then 
        
          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 7; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 2, 1) * 6; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 3, 1) * 5; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 4, 1) * 4; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 5, 1) * 3; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 6, 1) * 2; 
        
          v_digito := 10 - mod(v_calculo, 10); 
        
          if v_digito >= 10 then 
          
            v_digito := 0; 
          
          end if; 
        
          if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then 
          
            v_verificador := 'ERRADO'; 
          
          else 
          
            v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 2, 1) * 7; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 3, 1) * 6; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 4, 1) * 5; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 5, 1) * 4; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 6, 1) * 3; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 8, 1) * 2; 
          
            v_digito := 10 - mod(v_calculo, 10); 
          
            if v_digito >= 10 then 
            
              v_digito := 0; 
            
            end if; 
          
            if v_digito <> substr(pp_nr_inscricao_estadual, 7, 1) then 
            
              v_verificador := 'ERRADO'; 
            
            else 
            
              v_verificador := 'CERTO'; 
            
            end if; 
          
          end if; 
        
        else 
          --- 
        
          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 7; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 2, 1) * 6; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 3, 1) * 5; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 4, 1) * 4; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 5, 1) * 3; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 6, 1) * 2; 
        
          v_digito := 11 - mod(v_calculo, 11); 
        
          if v_digito >= 10 then 
          
            v_digito := 0; 
          
          end if; 
        
          if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then 
          
            v_verificador := 'ERRADO'; 
          
          else 
          
            v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 2, 1) * 7; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 3, 1) * 6; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 4, 1) * 5; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 5, 1) * 4; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 6, 1) * 3; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 8, 1) * 2; 
          
            v_digito := 11 - mod(v_calculo, 11); 
          
            if v_digito >= 10 then 
            
              v_digito := 0; 
            
            end if; 
          
            if v_digito <> substr(pp_nr_inscricao_estadual, 7, 1) then 
            
              v_verificador := 'ERRADO'; 
            
            else 
            
              v_verificador := 'CERTO'; 
            
            end if; 
          
          end if; 
        
        end if; 
      
      else 
      
        if substr(pp_nr_inscricao_estadual, 2, 1) in (0, 1, 2, 3, 4, 5, 8) then 
        
          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8; 
        
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 2, 1) * 7; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 3, 1) * 6; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 4, 1) * 5; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 5, 1) * 4; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 6, 1) * 3; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 7, 1) * 2; 
        
          v_digito := 10 - mod(v_calculo, 10); 
        
          if v_digito >= 10 then 
          
            v_digito := 0; 
          
          end if; 
        
          if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then 
          
            v_verificador := 'ERRADO'; 
          
          else 
          
            v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 2, 1) * 8; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 3, 1) * 7; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 4, 1) * 6; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 6, 1) * 4; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 7, 1) * 3; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 9, 1) * 2; 
          
            v_digito := 10 - mod(v_calculo, 10); 
          
            if v_digito >= 10 then 
            
              v_digito := 0; 
            
            end if; 
          
            if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then 
            
              v_verificador := 'ERRADO'; 
            
            else 
            
              v_verificador := 'CERTO'; 
            
            end if; 
          
          end if; 
        
        else 
        
          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 2, 1) * 7; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 3, 1) * 6; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 4, 1) * 5; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 5, 1) * 4; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 6, 1) * 3; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 7, 1) * 2; 
        
          v_digito := 11 - mod(v_calculo, 11); 
        
          if v_digito >= 10 then 
          
            v_digito := 0; 
          
          end if; 
        
          if v_digito <> substr(pp_nr_inscricao_estadual, 9, 1) then 
          
            v_verificador := 'ERRADO'; 
          
          else 
          
            v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 2, 1) * 8; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 3, 1) * 7; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 4, 1) * 6; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 6, 1) * 4; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 7, 1) * 3; 
            v_calculo := v_calculo + 
                         substr(pp_nr_inscricao_estadual, 9, 1) * 2; 
          
            v_digito := 11 - mod(v_calculo, 11); 
          
            if v_digito >= 10 then 
            
              v_digito := 0; 
            
            end if; 
          
            if v_digito <> substr(pp_nr_inscricao_estadual, 8, 1) then 
            
              v_verificador := 'ERRADO'; 
            
            else 
            
              v_verificador := 'CERTO'; 
            
            end if; 
          
          end if; 
        
        end if; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'RS' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 10 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 2; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 9; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 8; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 2; 
    
      v_digito := 11 - mod(v_calculo, 11); 
    
      if v_digito >= 10 then 
      
        v_digito := 0; 
      
      end if; 
    
      if substr(pp_nr_inscricao_estadual, 10, 1) <> v_digito then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_verificador := 'CERTO'; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado in ('AM', 'CE', 'ES', 'PB', 'PI', 'SC', 'SE') then 
  
    if length(pp_nr_inscricao_estadual) <> 9 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2; 
    
      v_digito := 11 - mod(v_calculo, 11); 
    
      if v_digito >= 10 then 
      
        v_digito := 0; 
      
      end if; 
    
      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_verificador := 'CERTO'; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  -- 

  if pp_estado = 'GO' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 or 
       (substr(pp_nr_inscricao_estadual, 1, 2) <> 10 and 
        substr(pp_nr_inscricao_estadual, 1, 2) <> 11 and 
        substr(pp_nr_inscricao_estadual, 1, 2) <> 15) then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2; 
      
      v_digito := 11 - mod(v_calculo, 11);     
      
      if substr(pp_nr_inscricao_estadual, 1, 8) = '11094402' and 
         (substr(pp_nr_inscricao_estadual, 9, 1) = '0' or substr(pp_nr_inscricao_estadual, 9, 1) = '1') then
         
         v_verificador := 'CERTO'; 

      else
      
          if v_digito = 11 then

              v_digito := 0;

          end if;
          
          if v_digito = 10 then
          
             if to_number(substr(pp_nr_inscricao_estadual, 1, 8)) >= 10103105 and 
                to_number(substr(pp_nr_inscricao_estadual, 1, 8)) <= 10119997 then

                 v_digito := 1;
          
             else
              
                 v_digito := 0;
                 
             end if;
             
          end if;
    
          if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then 
      
             v_verificador := 'ERRADO'; 
      
          else 
      
             v_verificador := 'CERTO'; 
      
          end if; 
    
      end if; 

     end if;
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'MA' then 
  
    if length(pp_nr_inscricao_estadual) <> 9 or 
       substr(pp_nr_inscricao_estadual, 1, 2) <> 12 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2; 
    
      v_digito := 11 - mod(v_calculo, 11); 
    
      if v_digito >= 10 then 
      
        v_digito := 0; 
      
      end if; 
    
      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_verificador := 'CERTO'; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'muito' then 
  
    if length(pp_nr_inscricao_estadual) <> 11 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 2; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 9; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 8; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 2; 
    
      v_digito := 11 - mod(v_calculo, 11); 
    
      if v_digito >= 10 then 
      
        v_digito := 0; 
      
      end if; 
    
      if substr(pp_nr_inscricao_estadual, 11, 1) <> v_digito then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_verificador := 'CERTO'; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'MS' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 or 
       substr(pp_nr_inscricao_estadual, 1, 2) <> 28 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2; 
    
      v_digito := 11 - mod(v_calculo, 11); 
    
      if v_digito >= 10 then 
      
        v_digito := 0; 
      
      end if; 
    
      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_verificador := 'CERTO'; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'PA' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 or 
       substr(pp_nr_inscricao_estadual, 1, 2) <> 15 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2; 
    
      v_digito := 11 - mod(v_calculo, 11); 
    
      if v_digito >= 10 then 
      
        v_digito := 0; 
      
      end if; 
    
      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_verificador := 'CERTO'; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'DF' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 13 or 
       substr(pp_nr_inscricao_estadual, 1, 2) <> 07 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 2; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 9; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 8; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 11, 1) * 2; 
    
      v_digito := 11 - mod(v_calculo, 11); 
    
      if v_digito >= 10 then 
      
        v_digito := 0; 
      
      end if; 
    
      if substr(pp_nr_inscricao_estadual, 12, 1) <> v_digito then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 5; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 4; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 3; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 2; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 9; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 8; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 6; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 5; 
        v_calculo := v_calculo + 
                     substr(pp_nr_inscricao_estadual, 10, 1) * 4; 
        v_calculo := v_calculo + 
                     substr(pp_nr_inscricao_estadual, 11, 1) * 3; 
        v_calculo := v_calculo + 
                     substr(pp_nr_inscricao_estadual, 12, 1) * 2; 
      
        v_digito := 11 - mod(v_calculo, 11); 
      
        if v_digito >= 10 then 
        
          v_digito := 0; 
        
        end if; 
      
        if substr(pp_nr_inscricao_estadual, 13, 1) <> v_digito then 
        
          v_verificador := 'ERRADO'; 
        
        else 
        
          v_verificador := 'CERTO'; 
        
        end if; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'TO' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 then
    
	    v_verificador := 'ERRADO';
       
    else
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9; 
			v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8; 
			v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7; 
			v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6; 
			v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
			v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4; 
			v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3; 
			v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2; 
    
			v_digito := 11 - mod(v_calculo, 11); 
    
			if v_digito >= 10 then 
      
         v_digito := 0; 
             
			end if; 
    
			if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then 
      
         v_verificador := 'ERRADO'; 
              
			else 
      
         v_verificador := 'CERTO'; 
              
			end if;
    
	  end if;
  
    return v_verificador;  
    
  end if;

  if pp_estado = 'PR' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 10 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 2; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2; 
    
      v_digito := 11 - mod(v_calculo, 11); 
    
      if v_digito >= 10 then 
      
        v_digito := 0; 
      
      end if; 
    
      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 4; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 3; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 2; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 7; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 6; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 5; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 4; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 3; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 2; 
      
        v_digito := 11 - mod(v_calculo, 11); 
      
        if v_digito >= 10 then 
        
          v_digito := 0; 
        
        end if; 
      
        if substr(pp_nr_inscricao_estadual, 10, 1) <> v_digito then 
        
          v_verificador := 'ERRADO'; 
        
        else 
        
          v_verificador := 'CERTO'; 
        
        end if; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'RO' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 14 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 2; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 9; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 8; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 9, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 10, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 11, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 12, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 13, 1) * 2; 
    
      v_digito := 11 - mod(v_calculo, 11); 
    
      if v_digito = 10 then 
      
        v_digito := 0; 
      
      end if; 
    
      if v_digito = 11 then 
      
        v_digito := 1; 
      
      end if; 
    
      if substr(pp_nr_inscricao_estadual, 14, 1) <> v_digito then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_verificador := 'CERTO'; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'RR' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 or 
       substr(pp_nr_inscricao_estadual, 1, 2) <> 24 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 1; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 2; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 8; 
    
      v_digito := mod(v_calculo, 9); 
    
      if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_verificador := 'CERTO'; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'PE' then 
  
    if length(trim(pp_nr_inscricao_estadual)) <> 9 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 8; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 7; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 6; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 5; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 4; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 3; 
      v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 2; 
    
      v_digito := 11 - mod(v_calculo, 11); 
    
      if v_digito >= 10 then 
      
        v_digito := 0; 
      
      end if; 
    
      if substr(pp_nr_inscricao_estadual, 8, 1) <> v_digito then 
      
        v_verificador := 'ERRADO'; 
      
      else 
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2; 
      
        v_digito := 11 - mod(v_calculo, 11); 
      
        if v_digito >= 10 then 
        
          v_digito := 0; 
        
        end if; 
      
        if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then 
        
          v_verificador := 'ERRADO'; 
        
        else 
        
          v_verificador := 'CERTO'; 
        
        end if; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 

  if pp_estado = 'RN' then 
  
    if substr(pp_nr_inscricao_estadual, 1, 2) <> 20 then 
    
      v_verificador := 'ERRADO'; 
    
    else 
    
      if length(trim(pp_nr_inscricao_estadual)) = 9 then 
      
        v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 9; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 2, 1) * 8; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 3, 1) * 7; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 4, 1) * 6; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 5, 1) * 5; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 6, 1) * 4; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 7, 1) * 3; 
        v_calculo := v_calculo + substr(pp_nr_inscricao_estadual, 8, 1) * 2; 
        v_calculo := v_calculo * 10; 
      
        v_digito := mod(v_calculo, 11); 
      
        if v_digito >= 10 then 
        
          v_digito := 0; 
        
        end if; 
      
        if substr(pp_nr_inscricao_estadual, 9, 1) <> v_digito then 
        
          v_verificador := 'ERRADO'; 
        
        else 
        
          v_verificador := 'CERTO'; 
        
        end if; 
      
      else 
      
        if length(trim(pp_nr_inscricao_estadual)) <> 10 then 
        
          v_verificador := 'ERRADO'; 
        
        else 
        
          v_calculo := substr(pp_nr_inscricao_estadual, 1, 1) * 10; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 2, 1) * 9; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 3, 1) * 8; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 4, 1) * 7; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 5, 1) * 6; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 6, 1) * 5; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 7, 1) * 4; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 8, 1) * 3; 
          v_calculo := v_calculo + 
                       substr(pp_nr_inscricao_estadual, 9, 1) * 2; 
          v_calculo := v_calculo * 10; 
        
          v_digito := mod(v_calculo, 11); 
        
          if v_digito >= 10 then 
          
            v_digito := 0; 
          
          end if; 
        
          if substr(pp_nr_inscricao_estadual, 10, 1) <> v_digito then 
          
            v_verificador := 'ERRADO'; 
          
          else 
          
            v_verificador := 'CERTO'; 
          
          end if; 
        
        end if; 
      
      end if; 
    
    end if; 
  
    return v_verificador; 
  
  end if; 
  
  
  if v_verificador is null then
    
       return 'UF INVÁLIDA';
       
  end if;   

end;
Responder
  • Informação
  • Quem está online

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