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:
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