Ir para conteúdo
Fórum Script Brasil

Alex.Vasc

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre Alex.Vasc

Alex.Vasc's Achievements

0

Reputação

  1. Olá, Segue abaixo função SQLServer 2005 para validação do IE (Inscrição Estadual) inicialmente para o estado de São Paulo. Quando terminar os demais eu faço outro post. O retorno da função é: 0 - Validação com Erro 1 - Validação OK Para testar: I – Industriais e comerciantes (exceto produtores rurais a eles não equiparados): > Formato: 12 dígitos sendo que o 9º e o 12º são dígitos verificadores > Exemplo: Inscrição Estadual 110.042.490.114 --- II – Inscrição estadual de Produtor Rural (Não equiparado a industrial ou comerciante, cujas inscrições obedecem a Regra descrita no item anterior): > Formato: - P0MMMSSSSD000 - 13 caracteres dos quais o 10º caracter contado a partir da esquerda ("D") é o dígito verificador - Inicia sempre com "P" e apresenta a sequência 0MMMSSSSD000, onde: 0MMMSSSS-algarismos que serão utilizados no cálculo do dígito verificador "D" "D" - Dígito verificador que consiste os 8 (oito)dígitos imediatamente anteriores 000 - 3 (três) dígitos que compõem o nº de inscrição mas não utilizados no cálculo do dígito verificador > Exemplo: Inscrição Estadual P-01100424.3/002 Fonte de informações: http://www.sefaz.mt.gov.br/portal/Tributar...cador/dv-SP.php http://forum.imasters.uol.com.br/index.php...dos-os-estados/ Abraços, Alexandre. --------- if exists (select * from sysobjects where id = object_id ('ST_FN_CALCULADIGIE')) drop function dbo.ST_FN_CALCULADIGIE go create function dbo.ST_FN_CALCULADIGIE (@vINSCRICAO varchar(16), @vESTADO char(2)) returns numeric(1) as begin declare @nRETURN numeric(1) declare @nPOS integer declare @vIE varchar(14) declare @nVALORBASE integer declare @nDIGITO integer declare @vCHAR char(1) declare @nSOMA integer if len(@vESTADO) != 2 return 0 else set @vESTADO = upper(@vESTADO) if len(@vINSCRICAO) = 0 return 0 else set @vINSCRICAO = upper(@vINSCRICAO) set @nPOS = 1 set @vIE = '' --Retira CARACTERES inválidos da INSCRIÇÃO ESTADUAL. while @nPOS <= len(@vINSCRICAO) begin set @vCHAR = substring(@vINSCRICAO, @nPOS, 1) if charindex(@vCHAR, '0123456789P') > 0 set @vIE = @vIE + @vCHAR set @nPOS = @nPOS + 1 end if upper(@vESTADO) = 'SP' begin if substring(@vIE, 1, 1) = 'P' begin -- Exemplo: P011004243002 if len(@vIE) != 13 return 0 set @nVALORBASE = 1 set @nSOMA = 0 set @nPOS = 2 while @nPOS <= 9 begin set @vCHAR = substring(@vIE, @nPOS, 1) set @nSOMA = @nSOMA + (convert(integer, @vCHAR) * @nVALORBASE) set @nPOS = @nPOS + 1 set @nVALORBASE = @nVALORBASE + 1 if @nVALORBASE = 2 set @nVALORBASE = 3 if @nVALORBASE = 9 set @nVALORBASE = 10 end set @nDIGITO = @nSOMA % 11 if @nDIGITO > 9 set @nDIGITO = 0 if @nDIGITO != convert(integer, substring(@vIE, 10, 1)) set @nRETURN = 0 else set @nRETURN = 1 end else begin set @vIE = right(replicate('0', 12) + rtrim(ltrim(@vIE)), 12) set @nVALORBASE = 1 set @nSOMA = 0 set @nPOS = 1 while @nPOS <= 7 begin set @vCHAR = substring(@vIE, @nPOS, 1) set @nSOMA = @nSOMA + (convert(integer, @vCHAR) * @nVALORBASE) set @nPOS = @nPOS + 1 set @nVALORBASE = @nVALORBASE + 1 if @nVALORBASE = 2 set @nVALORBASE = 3 if @nVALORBASE = 9 set @nVALORBASE = 10 end set @nDIGITO = @nSOMA % 11 if @nDIGITO > 9 set @nDIGITO = 0 if @nDIGITO != convert(integer, substring(@vIE, 9, 1)) return 0 else begin set @nVALORBASE = 3 set @nSOMA = 0 set @nPOS = 1 while @nPOS <= 11 begin set @vCHAR = substring(@vIE, @nPOS, 1) set @nSOMA = @nSOMA + (convert(numeric(1), @vCHAR) * @nVALORBASE) set @nPOS = @nPOS + 1 set @nVALORBASE = @nVALORBASE - 1 if @nVALORBASE = 1 set @nVALORBASE = 10 end set @nDIGITO = @nSOMA % 11 if @nDIGITO > 9 set @nDIGITO = 0 if @nDIGITO != convert(integer, substring(@vIE, 12, 1)) set @nRETURN = 0 else set @nRETURN = 1 end end end return @nRETURN end -------
×
×
  • Criar Novo...