none
Validar Inscrição Estadual RRS feed

  • Pergunta

  • Pessoal,

    Alguém já fez uma procedure para validação de inscrição estadual?

    No site tem um programa validador para download, tentei usar a DLL pelo sql, mas não funcionou aqui pois minha máquina é 64x e a DLL é 32x.

    http://www.sintegra.gov.br/insc_est.html

    Alguém já fez esta validação?

    att,


    "Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta."

    Érica Tohoma | http://bloggirlsa.wordpress.com

    quinta-feira, 11 de julho de 2013 19:14

Respostas

  • Érica,

    Terminei a minha, até vou postar aqui:

    /**
    Author: Rodrigo Ebner
    Email: rodrigoebner@hotmail.com
    **/
    
    CREATE FUNCTION [dbo].[validaIE] 
    (	
    	-- Add the parameters for the function here
    	@uf varchar(2),
    	@ie varchar(18)
    )
    RETURNS INT 
    BEGIN
    	DECLARE @counter INT;
    	DECLARE @b INT;
    	DECLARE @soma INT;	
    	DECLARE @dig INT;
    	
    	--auxiliares
    	DECLARE @p INT;
    	DECLARE @d INT;
    	DECLARE @i VARCHAR(18);
    	DECLARE @die VARCHAR(13);
    	
    	IF LEN(@ie) > 0 AND LEN(@uf) = 2
    	BEGIN		
    		--retira caracteres especiais da IE
    		SET @ie = REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(@ie)), '.', ''), '-', ''), '/', '');		
    		
    		-- verifica IE para o estado AC
    		IF @uf = 'AC' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 13 OR SUBSTRING(@ie, 1, 2) <> '01'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 4;
    			SET @soma = 0;			
    			WHILE @counter < 12
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 12, 1)
    				RETURN (0);
    			
    			--calcula segundo digito verificador
    			SET @counter = 1;
    			SET @b = 5;
    			SET @soma = 0;
    			WHILE @counter < 13
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 13, 1)
    				RETURN (0);							
    			
    		END
    		--AC
    		
    		-- verifica IE para o estado AL
    		ELSE IF @uf = 'AL' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) <> '24'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @soma = @soma * 10;
    			SET @dig = @soma - FLOOR(@soma / 11) * 11;
    			IF @dig = 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--AL
    		
    		-- verifica IE para o estado AM
    		ELSE IF @uf = 'AM' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			IF @soma < 11
    				SET @dig = 11 - @soma;
    			ELSE
    				IF @soma % 11 <= 1
    					SET @dig = 0;
    				ELSE
    					SET @dig = 11 - (@soma % 11);			
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--AM
    		
    		-- verifica IE para o estado AP
    		ELSE IF @uf = 'AP' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);			
    			
    			--calcula primeiro digito verificador
    			SET @p = 0;
    			SET @d = 0;
    			SET @i = SUBSTRING(@ie, 1, 8);			
    			IF @i >= 3000001 AND @i <= 3017000
    			BEGIN
    				SET @p = 5;
    				SET @d = 0;
    			END
    			ELSE IF @i >= 3017001 AND @i <= 3019022
    			BEGIN
    				SET @p = 9;
    				SET @d = 1;
    			END
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = @p;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@i, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig = 10
    				SET @dig = 0;
    			ELSE IF @dig = 11
    				SET @dig = @d;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--AP
    		
    		-- verifica IE para o estado BA
    		ELSE IF @uf = 'BA' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 8
    				RETURN(0);
    			
    			--calcula segundo digito verificador
    			SET @counter = 1;
    			SET @b = 7;
    			SET @soma = 0;			
    			WHILE @counter < 7
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			IF SUBSTRING(@ie, 1, 1) IN('0','1','2','3','4','5','8')
    				SET @dig = 10 - (@soma % 10);
    			ELSE
    			BEGIN
    				SET @dig = 11 - (@soma % 11);
    				IF @dig <= 1
    					SET @dig = 0;
    			END
    			IF @dig <> SUBSTRING(@ie, 8, 1)
    				RETURN (0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 8;
    			SET @soma = 0;
    			WHILE @counter < 9
    			BEGIN			  
    			  IF @counter <> 7
    			  BEGIN
    				SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    				SET @b = @b -1;
    			  END
    			  SET @counter = @counter + 1;			  
    			END
    			IF SUBSTRING(@ie, 1, 1) IN('0','1','2','3','4','5','8')
    				SET @dig = 10 - (@soma % 10);
    			ELSE
    			BEGIN
    				SET @dig = 11 - (@soma % 11);
    				IF @dig <= 1
    					SET @dig = 0;
    			END
    			IF @dig <> SUBSTRING(@ie, 7, 1)
    				RETURN (0);		
    		END
    		--BA
    		
    		-- verifica IE para o estado CE
    		ELSE IF @uf = 'CE' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) > 9
    				RETURN(0);			
    			SET @die = @ie;
    			IF(LEN(@ie) < 9)
    			BEGIN
    				WHILE LEN(@die) <= 8
    				BEGIN
    					SET @die = '0' + @die;
    				END
    			END
    			--calcula primeiro digito verificador			
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@die, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END			
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--CE
    		
    		-- verifica IE para o estado DF
    		ELSE IF @uf = 'DF' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 13 OR SUBSTRING(@ie, 1, 2) <> '07'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 4;
    			SET @soma = 0;			
    			WHILE @counter < 12
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 12, 1)
    				RETURN (0);
    			
    			--calcula segundo digito verificador
    			SET @counter = 1;
    			SET @b = 5;
    			SET @soma = 0;
    			WHILE @counter < 13
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 13, 1)
    				RETURN (0);							
    			
    		END
    		--DF
    		
    		-- verifica IE para o estado ES
    		ELSE IF @uf = 'ES' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;			
    			IF @dig < 2
    				SET @dig = 0;
    			ELSE				
    				SET @dig = 11 - @dig;			
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--ES
    		
    		-- verifica IE para o estado GO
    		ELSE IF @uf = 'GO' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) NOT IN ('10', '11', '15')
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			END
    			SET @dig = @soma % 11;			
    			IF(@dig = 1)
    			BEGIN
    				IF SUBSTRING(@ie, 1, 8) >= 10103105 AND SUBSTRING(@ie, 1, 8) <= 10119997
    					SET @dig = 1;
    				ELSE
    					SET @dig = 0
    			END			
    			ELSE IF @dig > 1
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--GO
    		
    		-- verifica IE para o estado MA
    		ELSE IF @uf = 'MA'
    		BEGIN			
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) <> '12'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);									
    		END
    		--MA
    		
    		-- verifica IE para o estado MG
    		ELSE IF @uf = 'MG' 
    		BEGIN
    			IF SUBSTRING(@ie, 1, 2) = 'PR' OR SUBSTRING(@ie, 1, 5) = 'ISENT'
    				RETURN(1);
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 13
    				RETURN(0);
    			
    			SET @die = SUBSTRING(@ie, 1, 3) + '0' + SUBSTRING(@ie, 4, 11);
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 1;
    			SET @soma = 0;			
    			WHILE @counter < 13
    			BEGIN
    			  IF (SUBSTRING(@die, @counter, 1) * @b) >= 10
    				SET @soma = @soma + ((SUBSTRING(@die, @counter, 1) * @b) - 9);
    			  ELSE
    				SET @soma = @soma + (SUBSTRING(@die, @counter, 1) * @b);
    			  SET @counter = @counter + 1;
    			  SET @b = @b +1;
    			  IF @b = 3
    				SET @b = 1;
    			END
    			SET @dig = ((FLOOR(@soma/10)+1) * 10) - @soma;
    			IF @dig <> SUBSTRING(@ie, 12, 1)
    				RETURN (0);
    			
    			--calcula segundo digito verificador
    			SET @counter = 1;
    			SET @b = 3;
    			SET @soma = 0;
    			WHILE @counter < 13
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 11;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 13, 1)
    				RETURN (0);							
    			
    		END
    		--MG
    		
    		-- verifica IE para o estado MT
    		ELSE IF @uf = 'MT' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) < 9
    				RETURN(0);
    							
    			SET @die = @ie;
    			IF(LEN(@ie) < 11)
    			BEGIN
    				WHILE LEN(@die) <= 11
    				BEGIN
    					SET @die = '0' + @die;
    				END
    			END
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 3;
    			SET @soma = 0;			
    			WHILE @counter < 11
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@die, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 11, 1)
    				RETURN (0);			
    		END
    		--MT
    		
    		-- verifica IE para o estado MS
    		ELSE IF @uf = 'MS'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) <> '28'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--MS
    		
    		-- verifica IE para o estado PA
    		ELSE IF @uf = 'PA'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) <> '15'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--PA
    		
    		-- verifica IE para o estado PA
    		/*ELSE IF @uf = 'PA'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) <> '15'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END*/
    		--PA
    		
    		-- verifica IE para o estado PB
    		ELSE IF @uf = 'PB'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--PB
    		
    		-- verifica IE para o estado PR
    		ELSE IF @uf = 'PR' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 10
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 3;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 7;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);
    			
    			--calcula segundo digito verificador
    			SET @counter = 1;
    			SET @b = 4;
    			SET @soma = 0;
    			WHILE @counter < 10
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 7;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 10, 1)
    				RETURN (0);							
    			
    		END
    		--PR
    		
    		-- verifica IE para o estado PE
    		ELSE IF @uf = 'PE' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 8;
    			SET @soma = 0;			
    			WHILE @counter < 8
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 8, 1)
    				RETURN (0);
    			
    			--calcula segundo digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);							
    			
    		END
    		--PE
    		
    		-- verifica IE para o estado PI
    		ELSE IF @uf = 'PI'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--PI
    		
    		-- verifica IE para o estado RJ
    		ELSE IF @uf = 'RJ'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 8
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 2;
    			SET @soma = 0;			
    			WHILE @counter < 8
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 7;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 8, 1)
    				RETURN (0);			
    		END
    		--RJ
    		
    		-- verifica IE para o estado RN
    		ELSE IF @uf = 'RN'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @soma = @soma * 10;
    			SET @dig = @soma % 11;
    			IF @dig = 10
    				SET @dig = 0;			
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--RN
    		
    		-- verifica IE para o estado RS
    		ELSE IF @uf = 'RS'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 10 OR SUBSTRING(@ie, 1, 3) > '467'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 2;
    			SET @soma = 0;			
    			WHILE @counter < 10
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;			  
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;			
    			IF @dig <> SUBSTRING(@ie, 10, 1)
    				RETURN (0);			
    		END
    		--RS
    		
    		-- verifica IE para o estado RO
    		ELSE IF @uf = 'RO'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 14
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 6;
    			SET @soma = 0;			
    			WHILE @counter < 14
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;			  
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = @dig - 10;			
    			IF @dig <> SUBSTRING(@ie, 14, 1)
    				RETURN (0);			
    		END
    		--RO
    		
    		-- verifica IE para o estado RR
    		ELSE IF @uf = 'RR'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) <> '24'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 1;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b + 1;
    			END
    			
    			SET @dig = @soma % 9;			
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--RR
    		
    		-- verifica IE para o estado SC
    		ELSE IF @uf = 'SC' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE				
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--SC
    		
    		-- verifica IE para o estado SP
    		ELSE IF @uf = 'SP' 
    		BEGIN
    			IF SUBSTRING(@ie, 1, 1) = 'P'
    			BEGIN				
    				SET @die = SUBSTRING(@ie, 2, 9);				
    				SET @soma = (SUBSTRING(@die, 1, 1) * 1) + (SUBSTRING(@die, 2, 1) * 3) + (SUBSTRING(@die, 3, 1) * 4) + (SUBSTRING(@die, 4, 1) * 5) + (SUBSTRING(@die, 5, 1) * 6) + (SUBSTRING(@die, 6, 1) * 7) + (SUBSTRING(@die, 7, 1) * 8) + (SUBSTRING(@die, 8, 1) * 10);
    				SET @dig = @soma % 11;
    				IF @dig >= 10
    					SET @dig = 0;				
    				IF @dig <> SUBSTRING(@ie, 10, 1)
    					RETURN (0);	
    			END
    			ELSE
    			BEGIN
    				IF LEN(@ie) < 12
    					RETURN(0);
    				SET @soma = (SUBSTRING(@ie, 1, 1) * 1) + (SUBSTRING(@ie, 2, 1) * 3) + (SUBSTRING(@ie, 3, 1) * 4) + (SUBSTRING(@ie, 4, 1) * 5) + (SUBSTRING(@ie, 5, 1) * 6) + (SUBSTRING(@ie, 6, 1) * 7) + (SUBSTRING(@ie, 7, 1) * 8) + (SUBSTRING(@ie, 8, 1) * 10);
    				SET @dig = @soma % 11;
    				IF @dig >= 10
    					SET @dig = 0;
    				IF @dig <> SUBSTRING(@ie, 9, 1)
    					RETURN (0);
    					
    				SET @counter = 1;
    				SET @b = 3;
    				SET @soma = 0;			
    				WHILE @counter < 12
    				BEGIN			  
    				  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    				  SET @counter = @counter + 1;
    				  SET @b = @b -1;
    				  IF @b = 1
    					SET @b = 10;			  
    				END
    				SET @dig = @soma % 11;
    				IF @dig >= 10
    					SET @dig = 0;
    				IF @dig <> SUBSTRING(@ie, 12, 1)
    					RETURN (0);
    			END
    		END
    		--SP
    		
    		-- verifica IE para o estado SE
    		ELSE IF @uf = 'SE' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;			
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--SE
    		
    		-- verifica IE para o estado TO
    		ELSE IF @uf = 'TO' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 11 OR SUBSTRING(@ie, 3, 2) NOT IN('01','02','03','99')
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 11
    			BEGIN			  
    			  IF @counter NOT IN (3, 4)
    			  BEGIN
    				  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);				  
    				  SET @b = @b -1;			  
    			  END
    			  SET @counter = @counter + 1;
    			END
    			SET @dig = @soma % 11;
    			IF @dig < 2
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 11, 1)
    				RETURN (0);			
    		END
    		--TO
    		
    		
    		
    		
    		
    		ELSE
    			RETURN(0);
    	END			
    	ELSE	
    		RETURN(0);
    	
    	--retorna true	
    	RETURN(1);
    END
    GO
    

    • Sugerido como Resposta Rodrigo Ebner quarta-feira, 17 de julho de 2013 15:05
    • Marcado como Resposta éricat quarta-feira, 17 de julho de 2013 15:06
    quarta-feira, 17 de julho de 2013 15:04

Todas as Respostas

  • Érica,

    Terminei a minha, até vou postar aqui:

    /**
    Author: Rodrigo Ebner
    Email: rodrigoebner@hotmail.com
    **/
    
    CREATE FUNCTION [dbo].[validaIE] 
    (	
    	-- Add the parameters for the function here
    	@uf varchar(2),
    	@ie varchar(18)
    )
    RETURNS INT 
    BEGIN
    	DECLARE @counter INT;
    	DECLARE @b INT;
    	DECLARE @soma INT;	
    	DECLARE @dig INT;
    	
    	--auxiliares
    	DECLARE @p INT;
    	DECLARE @d INT;
    	DECLARE @i VARCHAR(18);
    	DECLARE @die VARCHAR(13);
    	
    	IF LEN(@ie) > 0 AND LEN(@uf) = 2
    	BEGIN		
    		--retira caracteres especiais da IE
    		SET @ie = REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(@ie)), '.', ''), '-', ''), '/', '');		
    		
    		-- verifica IE para o estado AC
    		IF @uf = 'AC' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 13 OR SUBSTRING(@ie, 1, 2) <> '01'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 4;
    			SET @soma = 0;			
    			WHILE @counter < 12
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 12, 1)
    				RETURN (0);
    			
    			--calcula segundo digito verificador
    			SET @counter = 1;
    			SET @b = 5;
    			SET @soma = 0;
    			WHILE @counter < 13
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 13, 1)
    				RETURN (0);							
    			
    		END
    		--AC
    		
    		-- verifica IE para o estado AL
    		ELSE IF @uf = 'AL' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) <> '24'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @soma = @soma * 10;
    			SET @dig = @soma - FLOOR(@soma / 11) * 11;
    			IF @dig = 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--AL
    		
    		-- verifica IE para o estado AM
    		ELSE IF @uf = 'AM' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			IF @soma < 11
    				SET @dig = 11 - @soma;
    			ELSE
    				IF @soma % 11 <= 1
    					SET @dig = 0;
    				ELSE
    					SET @dig = 11 - (@soma % 11);			
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--AM
    		
    		-- verifica IE para o estado AP
    		ELSE IF @uf = 'AP' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);			
    			
    			--calcula primeiro digito verificador
    			SET @p = 0;
    			SET @d = 0;
    			SET @i = SUBSTRING(@ie, 1, 8);			
    			IF @i >= 3000001 AND @i <= 3017000
    			BEGIN
    				SET @p = 5;
    				SET @d = 0;
    			END
    			ELSE IF @i >= 3017001 AND @i <= 3019022
    			BEGIN
    				SET @p = 9;
    				SET @d = 1;
    			END
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = @p;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@i, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig = 10
    				SET @dig = 0;
    			ELSE IF @dig = 11
    				SET @dig = @d;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--AP
    		
    		-- verifica IE para o estado BA
    		ELSE IF @uf = 'BA' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 8
    				RETURN(0);
    			
    			--calcula segundo digito verificador
    			SET @counter = 1;
    			SET @b = 7;
    			SET @soma = 0;			
    			WHILE @counter < 7
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			IF SUBSTRING(@ie, 1, 1) IN('0','1','2','3','4','5','8')
    				SET @dig = 10 - (@soma % 10);
    			ELSE
    			BEGIN
    				SET @dig = 11 - (@soma % 11);
    				IF @dig <= 1
    					SET @dig = 0;
    			END
    			IF @dig <> SUBSTRING(@ie, 8, 1)
    				RETURN (0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 8;
    			SET @soma = 0;
    			WHILE @counter < 9
    			BEGIN			  
    			  IF @counter <> 7
    			  BEGIN
    				SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    				SET @b = @b -1;
    			  END
    			  SET @counter = @counter + 1;			  
    			END
    			IF SUBSTRING(@ie, 1, 1) IN('0','1','2','3','4','5','8')
    				SET @dig = 10 - (@soma % 10);
    			ELSE
    			BEGIN
    				SET @dig = 11 - (@soma % 11);
    				IF @dig <= 1
    					SET @dig = 0;
    			END
    			IF @dig <> SUBSTRING(@ie, 7, 1)
    				RETURN (0);		
    		END
    		--BA
    		
    		-- verifica IE para o estado CE
    		ELSE IF @uf = 'CE' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) > 9
    				RETURN(0);			
    			SET @die = @ie;
    			IF(LEN(@ie) < 9)
    			BEGIN
    				WHILE LEN(@die) <= 8
    				BEGIN
    					SET @die = '0' + @die;
    				END
    			END
    			--calcula primeiro digito verificador			
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@die, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END			
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--CE
    		
    		-- verifica IE para o estado DF
    		ELSE IF @uf = 'DF' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 13 OR SUBSTRING(@ie, 1, 2) <> '07'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 4;
    			SET @soma = 0;			
    			WHILE @counter < 12
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 12, 1)
    				RETURN (0);
    			
    			--calcula segundo digito verificador
    			SET @counter = 1;
    			SET @b = 5;
    			SET @soma = 0;
    			WHILE @counter < 13
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 13, 1)
    				RETURN (0);							
    			
    		END
    		--DF
    		
    		-- verifica IE para o estado ES
    		ELSE IF @uf = 'ES' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;			
    			IF @dig < 2
    				SET @dig = 0;
    			ELSE				
    				SET @dig = 11 - @dig;			
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--ES
    		
    		-- verifica IE para o estado GO
    		ELSE IF @uf = 'GO' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) NOT IN ('10', '11', '15')
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			END
    			SET @dig = @soma % 11;			
    			IF(@dig = 1)
    			BEGIN
    				IF SUBSTRING(@ie, 1, 8) >= 10103105 AND SUBSTRING(@ie, 1, 8) <= 10119997
    					SET @dig = 1;
    				ELSE
    					SET @dig = 0
    			END			
    			ELSE IF @dig > 1
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--GO
    		
    		-- verifica IE para o estado MA
    		ELSE IF @uf = 'MA'
    		BEGIN			
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) <> '12'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);									
    		END
    		--MA
    		
    		-- verifica IE para o estado MG
    		ELSE IF @uf = 'MG' 
    		BEGIN
    			IF SUBSTRING(@ie, 1, 2) = 'PR' OR SUBSTRING(@ie, 1, 5) = 'ISENT'
    				RETURN(1);
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 13
    				RETURN(0);
    			
    			SET @die = SUBSTRING(@ie, 1, 3) + '0' + SUBSTRING(@ie, 4, 11);
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 1;
    			SET @soma = 0;			
    			WHILE @counter < 13
    			BEGIN
    			  IF (SUBSTRING(@die, @counter, 1) * @b) >= 10
    				SET @soma = @soma + ((SUBSTRING(@die, @counter, 1) * @b) - 9);
    			  ELSE
    				SET @soma = @soma + (SUBSTRING(@die, @counter, 1) * @b);
    			  SET @counter = @counter + 1;
    			  SET @b = @b +1;
    			  IF @b = 3
    				SET @b = 1;
    			END
    			SET @dig = ((FLOOR(@soma/10)+1) * 10) - @soma;
    			IF @dig <> SUBSTRING(@ie, 12, 1)
    				RETURN (0);
    			
    			--calcula segundo digito verificador
    			SET @counter = 1;
    			SET @b = 3;
    			SET @soma = 0;
    			WHILE @counter < 13
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 11;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 13, 1)
    				RETURN (0);							
    			
    		END
    		--MG
    		
    		-- verifica IE para o estado MT
    		ELSE IF @uf = 'MT' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) < 9
    				RETURN(0);
    							
    			SET @die = @ie;
    			IF(LEN(@ie) < 11)
    			BEGIN
    				WHILE LEN(@die) <= 11
    				BEGIN
    					SET @die = '0' + @die;
    				END
    			END
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 3;
    			SET @soma = 0;			
    			WHILE @counter < 11
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@die, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 11, 1)
    				RETURN (0);			
    		END
    		--MT
    		
    		-- verifica IE para o estado MS
    		ELSE IF @uf = 'MS'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) <> '28'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--MS
    		
    		-- verifica IE para o estado PA
    		ELSE IF @uf = 'PA'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) <> '15'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--PA
    		
    		-- verifica IE para o estado PA
    		/*ELSE IF @uf = 'PA'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) <> '15'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END*/
    		--PA
    		
    		-- verifica IE para o estado PB
    		ELSE IF @uf = 'PB'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--PB
    		
    		-- verifica IE para o estado PR
    		ELSE IF @uf = 'PR' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 10
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 3;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 7;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);
    			
    			--calcula segundo digito verificador
    			SET @counter = 1;
    			SET @b = 4;
    			SET @soma = 0;
    			WHILE @counter < 10
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 7;
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 10, 1)
    				RETURN (0);							
    			
    		END
    		--PR
    		
    		-- verifica IE para o estado PE
    		ELSE IF @uf = 'PE' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 8;
    			SET @soma = 0;			
    			WHILE @counter < 8
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 8, 1)
    				RETURN (0);
    			
    			--calcula segundo digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);							
    			
    		END
    		--PE
    		
    		-- verifica IE para o estado PI
    		ELSE IF @uf = 'PI'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--PI
    		
    		-- verifica IE para o estado RJ
    		ELSE IF @uf = 'RJ'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 8
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 2;
    			SET @soma = 0;			
    			WHILE @counter < 8
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 7;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 8, 1)
    				RETURN (0);			
    		END
    		--RJ
    		
    		-- verifica IE para o estado RN
    		ELSE IF @uf = 'RN'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @soma = @soma * 10;
    			SET @dig = @soma % 11;
    			IF @dig = 10
    				SET @dig = 0;			
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--RN
    		
    		-- verifica IE para o estado RS
    		ELSE IF @uf = 'RS'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 10 OR SUBSTRING(@ie, 1, 3) > '467'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 2;
    			SET @soma = 0;			
    			WHILE @counter < 10
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;			  
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;			
    			IF @dig <> SUBSTRING(@ie, 10, 1)
    				RETURN (0);			
    		END
    		--RS
    		
    		-- verifica IE para o estado RO
    		ELSE IF @uf = 'RO'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 14
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 6;
    			SET @soma = 0;			
    			WHILE @counter < 14
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;
    			  IF @b = 1
    				SET @b = 9;			  
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = @dig - 10;			
    			IF @dig <> SUBSTRING(@ie, 14, 1)
    				RETURN (0);			
    		END
    		--RO
    		
    		-- verifica IE para o estado RR
    		ELSE IF @uf = 'RR'
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9 OR SUBSTRING(@ie, 1, 2) <> '24'
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 1;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b + 1;
    			END
    			
    			SET @dig = @soma % 9;			
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--RR
    		
    		-- verifica IE para o estado SC
    		ELSE IF @uf = 'SC' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = @soma % 11;
    			IF @dig <= 1
    				SET @dig = 0;
    			ELSE				
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--SC
    		
    		-- verifica IE para o estado SP
    		ELSE IF @uf = 'SP' 
    		BEGIN
    			IF SUBSTRING(@ie, 1, 1) = 'P'
    			BEGIN				
    				SET @die = SUBSTRING(@ie, 2, 9);				
    				SET @soma = (SUBSTRING(@die, 1, 1) * 1) + (SUBSTRING(@die, 2, 1) * 3) + (SUBSTRING(@die, 3, 1) * 4) + (SUBSTRING(@die, 4, 1) * 5) + (SUBSTRING(@die, 5, 1) * 6) + (SUBSTRING(@die, 6, 1) * 7) + (SUBSTRING(@die, 7, 1) * 8) + (SUBSTRING(@die, 8, 1) * 10);
    				SET @dig = @soma % 11;
    				IF @dig >= 10
    					SET @dig = 0;				
    				IF @dig <> SUBSTRING(@ie, 10, 1)
    					RETURN (0);	
    			END
    			ELSE
    			BEGIN
    				IF LEN(@ie) < 12
    					RETURN(0);
    				SET @soma = (SUBSTRING(@ie, 1, 1) * 1) + (SUBSTRING(@ie, 2, 1) * 3) + (SUBSTRING(@ie, 3, 1) * 4) + (SUBSTRING(@ie, 4, 1) * 5) + (SUBSTRING(@ie, 5, 1) * 6) + (SUBSTRING(@ie, 6, 1) * 7) + (SUBSTRING(@ie, 7, 1) * 8) + (SUBSTRING(@ie, 8, 1) * 10);
    				SET @dig = @soma % 11;
    				IF @dig >= 10
    					SET @dig = 0;
    				IF @dig <> SUBSTRING(@ie, 9, 1)
    					RETURN (0);
    					
    				SET @counter = 1;
    				SET @b = 3;
    				SET @soma = 0;			
    				WHILE @counter < 12
    				BEGIN			  
    				  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    				  SET @counter = @counter + 1;
    				  SET @b = @b -1;
    				  IF @b = 1
    					SET @b = 10;			  
    				END
    				SET @dig = @soma % 11;
    				IF @dig >= 10
    					SET @dig = 0;
    				IF @dig <> SUBSTRING(@ie, 12, 1)
    					RETURN (0);
    			END
    		END
    		--SP
    		
    		-- verifica IE para o estado SE
    		ELSE IF @uf = 'SE' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 9
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 9
    			BEGIN			  
    			  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);			  
    			  SET @counter = @counter + 1;
    			  SET @b = @b -1;			  
    			END
    			SET @dig = 11 - (@soma % 11);
    			IF @dig >= 10
    				SET @dig = 0;			
    			IF @dig <> SUBSTRING(@ie, 9, 1)
    				RETURN (0);			
    		END
    		--SE
    		
    		-- verifica IE para o estado TO
    		ELSE IF @uf = 'TO' 
    		BEGIN
    			--verifica tamanho da IE
    			IF LEN(@ie) <> 11 OR SUBSTRING(@ie, 3, 2) NOT IN('01','02','03','99')
    				RETURN(0);
    			
    			--calcula primeiro digito verificador
    			SET @counter = 1;
    			SET @b = 9;
    			SET @soma = 0;			
    			WHILE @counter < 11
    			BEGIN			  
    			  IF @counter NOT IN (3, 4)
    			  BEGIN
    				  SET @soma = @soma + (SUBSTRING(@ie, @counter, 1) * @b);				  
    				  SET @b = @b -1;			  
    			  END
    			  SET @counter = @counter + 1;
    			END
    			SET @dig = @soma % 11;
    			IF @dig < 2
    				SET @dig = 0;
    			ELSE
    				SET @dig = 11 - @dig;
    			IF @dig <> SUBSTRING(@ie, 11, 1)
    				RETURN (0);			
    		END
    		--TO
    		
    		
    		
    		
    		
    		ELSE
    			RETURN(0);
    	END			
    	ELSE	
    		RETURN(0);
    	
    	--retorna true	
    	RETURN(1);
    END
    GO
    

    • Sugerido como Resposta Rodrigo Ebner quarta-feira, 17 de julho de 2013 15:05
    • Marcado como Resposta éricat quarta-feira, 17 de julho de 2013 15:06
    quarta-feira, 17 de julho de 2013 15:04
  • Parabéns e Obrigada!

    "Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta."

    Érica Tohoma | http://bloggirlsa.wordpress.com

    quarta-feira, 17 de julho de 2013 15:06