none
Verificação de CPF, RG, e Incrição Estadual

    Question

  • Alguem tem algum script que faça verificação de CPF, RG, ou Inscrição Estadual ?

    Implementei somente a validação de CNPJ... funciona que é uma maravilha... mas agora preciso dessas outras...

    Alguem tem ?

     

    Valeu!

    Thursday, December 14, 2006 2:54 AM

Answers

  • Boa sorte

     

    CREATE Procedure SP_UniChecaCPF(
    @CPF VARCHAR(15),
    @RESULTADO CHAR(1) Output) AS

      --Set @CPF = ''
     
      Declare @CpfTemp Varchar(20)
      Declare @Posicao Int

      Set @Posicao = 1
      Set @CpfTemp = ''

      -- Remove todos os caracteres não numéricos
      While @Posicao <= Len(@CPF)
      Begin
         If ASCII(SubsTring(@Cpf,@Posicao,1)) >= 48 and
            ASCII(SubsTring(@Cpf,@Posicao,1)) <= 57
            Begin        
               Set @CpfTemp = @CpfTemp + SubsTring(@Cpf,@Posicao,1)
            End

         Set @Posicao=@Posicao+1
      End

      SET @CPF = @CPFTemp

      DECLARE @INDICE INT,
              @SOMA INT,
              @DIG1 INT,
              @DIG2 INT,
              @CPF_TEMP VARCHAR(11),
              @DIGITOS_IGUAIS CHAR(1)
             
      SET @RESULTADO = 'N'

      /*
          Verificando se os digitos são iguais
          A Principio CPF com todos o números iguais são Inválidos
          apesar de validar o Calculo do digito verificado
          EX: O CPF 00000000000 é inválido, mas pelo calculo
          Validaria
      */

      SET @CPF_TEMP = SUBSTRING(@CPF,1,1)

      SET @INDICE = 1
      SET @DIGITOS_IGUAIS = 'S'

      WHILE (@INDICE <= 11)
      BEGIN
        IF SUBSTRING(@CPF,@INDICE,1) <> @CPF_TEMP
          SET @DIGITOS_IGUAIS = 'N'
        SET @INDICE = @INDICE + 1
      END;

      --Caso os digitos não sejam todos iguais Começo o calculo do digitos
      IF @DIGITOS_IGUAIS = 'N'
      BEGIN
        --Cálculo do 1º dígito
        SET @SOMA = 0
        SET @INDICE = 1
        WHILE (@INDICE <= 9)
        BEGIN
          SET @Soma = @Soma + CONVERT(INT,SUBSTRING(@CPF,@INDICE,1)) * (11 - @INDICE);
          SET @INDICE = @INDICE + 1
        END

        SET @DIG1 = 11 - (@SOMA % 11)

        IF @DIG1 > 9
          SET @DIG1 = 0;

        -- Cálculo do 2º dígito }
        SET @SOMA = 0
        SET @INDICE = 1
        WHILE (@INDICE <= 10)
        BEGIN
          SET @Soma = @Soma + CONVERT(INT,SUBSTRING(@CPF,@INDICE,1)) * (12 - @INDICE);
          SET @INDICE = @INDICE + 1
        END

        SET @DIG2 = 11 - (@SOMA % 11)

        IF @DIG2 > 9
          SET @DIG2 = 0;

        -- Validando
        IF (@DIG1 = SUBSTRING(@CPF,LEN(@CPF)-1,1)) AND (@DIG2 = SUBSTRING(@CPF,LEN(@CPF),1))
          SET @RESULTADO = 'S'
        ELSE
          SET @RESULTADO = 'N'
      END

      print @RESULTADO


    GO

    Thursday, December 14, 2006 12:40 PM

All replies

  • sei que o RG e inscricao estadual e uma diferente por estado, agora cpf no sharepedia tem pronto.

     

    Abs;

    Thursday, December 14, 2006 8:52 AM
  • Boa sorte

     

    CREATE Procedure SP_UniChecaCPF(
    @CPF VARCHAR(15),
    @RESULTADO CHAR(1) Output) AS

      --Set @CPF = ''
     
      Declare @CpfTemp Varchar(20)
      Declare @Posicao Int

      Set @Posicao = 1
      Set @CpfTemp = ''

      -- Remove todos os caracteres não numéricos
      While @Posicao <= Len(@CPF)
      Begin
         If ASCII(SubsTring(@Cpf,@Posicao,1)) >= 48 and
            ASCII(SubsTring(@Cpf,@Posicao,1)) <= 57
            Begin        
               Set @CpfTemp = @CpfTemp + SubsTring(@Cpf,@Posicao,1)
            End

         Set @Posicao=@Posicao+1
      End

      SET @CPF = @CPFTemp

      DECLARE @INDICE INT,
              @SOMA INT,
              @DIG1 INT,
              @DIG2 INT,
              @CPF_TEMP VARCHAR(11),
              @DIGITOS_IGUAIS CHAR(1)
             
      SET @RESULTADO = 'N'

      /*
          Verificando se os digitos são iguais
          A Principio CPF com todos o números iguais são Inválidos
          apesar de validar o Calculo do digito verificado
          EX: O CPF 00000000000 é inválido, mas pelo calculo
          Validaria
      */

      SET @CPF_TEMP = SUBSTRING(@CPF,1,1)

      SET @INDICE = 1
      SET @DIGITOS_IGUAIS = 'S'

      WHILE (@INDICE <= 11)
      BEGIN
        IF SUBSTRING(@CPF,@INDICE,1) <> @CPF_TEMP
          SET @DIGITOS_IGUAIS = 'N'
        SET @INDICE = @INDICE + 1
      END;

      --Caso os digitos não sejam todos iguais Começo o calculo do digitos
      IF @DIGITOS_IGUAIS = 'N'
      BEGIN
        --Cálculo do 1º dígito
        SET @SOMA = 0
        SET @INDICE = 1
        WHILE (@INDICE <= 9)
        BEGIN
          SET @Soma = @Soma + CONVERT(INT,SUBSTRING(@CPF,@INDICE,1)) * (11 - @INDICE);
          SET @INDICE = @INDICE + 1
        END

        SET @DIG1 = 11 - (@SOMA % 11)

        IF @DIG1 > 9
          SET @DIG1 = 0;

        -- Cálculo do 2º dígito }
        SET @SOMA = 0
        SET @INDICE = 1
        WHILE (@INDICE <= 10)
        BEGIN
          SET @Soma = @Soma + CONVERT(INT,SUBSTRING(@CPF,@INDICE,1)) * (12 - @INDICE);
          SET @INDICE = @INDICE + 1
        END

        SET @DIG2 = 11 - (@SOMA % 11)

        IF @DIG2 > 9
          SET @DIG2 = 0;

        -- Validando
        IF (@DIG1 = SUBSTRING(@CPF,LEN(@CPF)-1,1)) AND (@DIG2 = SUBSTRING(@CPF,LEN(@CPF),1))
          SET @RESULTADO = 'S'
        ELSE
          SET @RESULTADO = 'N'
      END

      print @RESULTADO


    GO

    Thursday, December 14, 2006 12:40 PM
  • Vc consegue as regras para validação de inscrição estadual no site www.sintegra.gov.br.
    Thursday, December 14, 2006 7:43 PM
  • -- ================================================

    -- Template generated from Template Explorer using:

    -- Create Scalar Function (New Menu).SQL

    --

    -- Use the Specify Values for Template Parameters

    -- command (Ctrl-Shift-M) to fill in the parameter

    -- values below.

    --

    -- This block of comments will not be included in

    -- the definition of the function.

    -- ================================================

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    -- =============================================

    -- Author: Emerson Tadeu

    -- Create date:

    -- Description:

    -- =============================================

    CREATE FUNCTION isCNPJ

    (

    -- Add the parameters for the function here

    @pCNPJ VARCHAR(15)

    )

    RETURNS BIT

    AS

    BEGIN

    -- Declare the return variable here

    DECLARE @RESULT BIT

    DECLARE @INDICE INT

    DECLARE @SOMA INT

    DECLARE @DIG1 INT

    DECLARE @DIG2 INT

    DECLARE @CNPJ VARCHAR(15)

    SET @CNPJ = RTRIM(LTRIM(@pCNPJ))

    /* Calculo do digito 1 */

    SET @INDICE = 1

    SET @SOMA = 0

    WHILE (@INDICE <= 12)

    BEGIN

    IF (@INDICE <= 4)

    BEGIN

    IF ISNUMERIC(SUBSTRING(@CNPJ, @INDICE, 1))= 1

    BEGIN

    SET @SOMA = @SOMA + CAST(SUBSTRING(@CNPJ, @INDICE, 1) AS INT) * (6 - @INDICE)

    SET @INDICE = @INDICE + 1

    END

    ELSE

    RETURN 0

    END

    ELSE

    BEGIN

    IF ISNUMERIC(SUBSTRING(@CNPJ, @INDICE, 1))= 1

    BEGIN

    SET @SOMA = @SOMA + CAST(SUBSTRING(@CNPJ, @INDICE, 1) AS INT) * (14 - @INDICE)

    SET @INDICE = @INDICE + 1

    END

    ELSE

    RETURN 0

    END

    END

    SET @DIG1 = 11 - (@SOMA % 11)

    IF @DIG1 > 9

    SET @DIG1 = 0

    /* Calculo do digito 2 */

    SET @INDICE = 1

    SET @SOMA = 0

    WHILE (@INDICE <= 13)

    BEGIN

    IF (@INDICE <= 5)

    BEGIN

    IF ISNUMERIC(SUBSTRING(@CNPJ, @INDICE, 1))= 1

    BEGIN

    SET @SOMA = @SOMA + CAST(SUBSTRING(@CNPJ, @INDICE, 1) AS INT) * (7 - @INDICE)

    SET @INDICE = @INDICE + 1

    END

    ELSE

    RETURN 0

    END

    ELSE

    BEGIN

    IF ISNUMERIC(SUBSTRING(@CNPJ, @INDICE, 1)) = 1

    BEGIN

    SET @SOMA = @SOMA + CAST(SUBSTRING(@CNPJ, @INDICE, 1) AS INT) * (15 - @INDICE)

    SET @INDICE = @INDICE + 1

    END

    ELSE

    RETURN 0

    END

    END

    SET @DIG2 = 11 - (@SOMA % 11)

    IF @DIG2 > 9

    SET @DIG2 = 0

    /* Validando */

    IF ((@DIG1 = SUBSTRING(@CNPJ, LEN(@CNPJ)-1, 1)) AND (@DIG2 = SUBSTRING(@CNPJ, LEN(@CNPJ), 1)))

    SET @RESULT = 1

    ELSE

    SET @RESULT = 0

    -- Return the result of the function

    RETURN @RESULT

    END

    GO

     

    Saturday, September 06, 2008 11:54 PM
  • -- ================================================

    -- Template generated from Template Explorer using:

    -- Create Scalar Function (New Menu).SQL

    --

    -- Use the Specify Values for Template Parameters

    -- command (Ctrl-Shift-M) to fill in the parameter

    -- values below.

    --

    -- This block of comments will not be included in

    -- the definition of the function.

    -- ================================================

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    -- =============================================

    -- Author: Emerson Tadeu

    -- Create date:

    -- Description: Retorna Verdadeiro ou Falso apos verificar se CPF é válido

    -- =============================================

    CREATE FUNCTION isCPF

    (

    @pCPF varchar(15)

    )

    RETURNS BIT

    AS

    BEGIN

    DECLARE @RETURN BIT

    DECLARE @INDICE INT

    DECLARE @SOMA INT

    DECLARE @DIG1 INT

    DECLARE @DIG2 INT

    DECLARE @CPF varchar(15)

    SET @CPF = RTRIM(LTRIM(@pCPF))

    /* Calculo do digito 1 */

    SET @INDICE = 1

    SET @SOMA = 0

    WHILE (@INDICE <= 9)

    BEGIN

    IF ISNUMERIC(SUBSTRING(@CPF, @INDICE, 1)) = 1

    BEGIN

    SET @SOMA = @SOMA + CAST(SUBSTRING(@CPF, @INDICE, 1) AS INT) * (11 - @INDICE)

    SET @INDICE = @INDICE + 1

    END

    ELSE

    RETURN 0

    END

    SET @DIG1 = 11 - (@SOMA % 11)

    IF @DIG1 > 9

    SET @DIG1 = 0

    /* Calculo do digito 2 */

    SET @INDICE = 1

    SET @SOMA = 0

    WHILE (@INDICE <= 10)

    BEGIN

    IF ISNUMERIC(SUBSTRING(@CPF, @INDICE, 1)) = 1

    BEGIN

    SET @SOMA = @SOMA + CAST(SUBSTRING(@CPF, @INDICE, 1) AS INT) * (12 - @INDICE)

    SET @INDICE = @INDICE + 1

    END

    ELSE

    RETURN 0

    END

    SET @DIG2 = 11 - (@SOMA % 11)

    IF @DIG2 > 9

    SET @DIG2 = 0

    /* Validando */

    IF ((@DIG1 = SUBSTRING(@CPF, LEN(@CPF)-1, 1)) AND (@DIG2 = SUBSTRING(@CPF, LEN(@CPF), 1))

    AND NOT((@CPF = '11111111111')

    OR (@CPF = '22222222222')

    OR (@CPF = '33333333333')

    OR (@CPF = '44444444444')

    OR (@CPF = '55555555555')

    OR (@CPF = '66666666666')

    OR (@CPF = '77777777777')

    OR (@CPF = '88888888888')

    OR (@CPF = '99999999999')

    OR (@CPF = '00000000000'))

    )

    SET @RETURN = 1

    ELSE

    SET @RETURN = 0

    RETURN @RETURN

    END

    GO

    Saturday, September 06, 2008 11:55 PM
  • Para usar ....

     

     

    Print ''

    Print 'Report 2 : Inconsistência CNPJ/CPF'

    Print ''

    select

    id_cliente as 'codigo',

    cnpj_cliente as 'cnpj_cpf',

    nm_cliente as 'nome_razao',

    convert(char(10),dt_cadastro,103) as 'data_cadastro'

    from

    cliente c

    where

    dbo.isCPF(cnpj_cliente) = 0

    AND dbo.isCNPJ(cnpj_cliente) = 0

    order by

    nm_cliente

    GO

    Saturday, September 06, 2008 11:58 PM
  •  Paulo DM wrote:
    Vc consegue as regras para validação de inscrição estadual no site www.sintegra.gov.br

     

    Para cada estado são dezenas de códigos de um algorítimo bem enjoado !

     

    Lá eles tem uma DLL pra Delphi que também faz o serviço.

     

    Eu tenho um validador consistente (até onde pude testar) de inscrições estaduais, mas ele se encontra em VB6 ainda ...

    Ja ouvi dizer que o SQL Server pode usar uma dll assim como qualquer programa (referenciando e passando parametros) mas não sou nenhum DBA Expert plus ++ que tenha chegado a necessitar de recursos assim e além do mais ela está em VB6 que não é nem um pouco a linguagem mais rápida do mundo.

     

    Como a gente vive fazendo migração de dados inconsistentes para nossos sistemas seria muito útil esta função ja no server mesmo.

     

    Eu procuro e procuro mas não encontro ninguem com coragem de "traduzi-la", então pelo menos poderiamos juntar forças para que cada um faça a do seu estado e vá se agregando código até fechar a questão.

     

    TEm alguma parte la no CodePlex em Ptbr ?

    Sunday, September 07, 2008 12:10 AM
  •  Emerson Tadeu wrote:

     Paulo DM wrote:
    Vc consegue as regras para validação de inscrição estadual no site www.sintegra.gov.br

     

    Se liga, vc tem algo contra o autor do post ??, Para cada estado são dezenas de códigos de um algorítimo bem enjoado !

     

    Então pq vc não posta que lá eles tem uma DLL pra Delphi que também faz o serviço.

     

    Eu tenho um validador consistente (até onde pude testar) de inscrições estaduais, mas ele se encontra em VB6 ainda ...

    Ja ouvi dizer que o SQL Server pode usar uma dll assim como qualquer programa (referenciando e passando parametros) mas não sou nenhum DBA Expert plus ++ que tenha chegado a necessitar de recursos assim e além do mais ela está em VB6 que não é nem um pouco a linguagem mais rápida do mundo.

     

    Como a gente vive fazendo migração de dados inconsistentes para nossos sistemas seria muito útil esta função ja no server mesmo.

     

    Eu procuro e procuro mas não encontro ninguem com coragem de "traduzi-la", então pelo menos poderiamos juntar forças para que cada um faça a do seu estado e vá se agregando código até fechar a questão.

     

    TEm alguma parte la no CodePlex em Ptbr ?

     

     

     

    USE [master]
    GO
    /****** Object:  ExtendedStoredProcedure [dbo].[ConsisteInscricaoEstadual]    Script Date: 09/07/2008 06:13:23 ******/
    EXEC dbo.sp_addextendedproc N'ConsisteInscricaoEstadual', 'C:\WINDOWS\system\DllInscE32.dll'

    declare @teste int

    declare @pUF char(2)

    declare @pIE varchar(15)

    set @pIE = '206089111114'

    set @pUF = 'SP'

    SET @teste = 0

    EXEC @teste = ConsisteInscricaoEstadual @pIE, @pUF

    select @teste as 'Retorno'

     

    Isto quase funcionou, mas não sei por que motivo a dll oficial apenas retorna inválido independente do que se mande para ela validar !

     

    Alguém manja de integração CLR ?

    Poderíamos usar uma das milhares postadas em C# ou VB.Net para fazer o serviço, ou não ?

    Sunday, September 07, 2008 9:17 AM
  • /*

    SELECT * FROM sys.configurations

    ORDER BY name ;

    GO

    sp_configure 'clr enabled', 1

    RECONFIGURE

    go

    */

    CREATE

    --DROP

    ASSEMBLY ValidaIE FROM 'D:\LDF\LDF-Projeto\VB.Net\ValidaIE\ValidaIE\bin\Debug\ValidaIE.dll'

    WITH PERMISSION_SET = SAFE

    GO

    --CLR Scalar Functions

    CREATE

    --DROP

    FUNCTION isIE(

    @pUF nvarchar(2),

    @pIE nvarchar(15)

    )

    RETURNS bit

    WITH RETURNS NULL ON NULL INPUT

    EXTERNAL NAME ValidaIE.[ValidaIE.cValidaIE].isIE

    GO

     

     

    Após compilar a DLL e criar um Assembly e uma função para usa-la podemos começar a fazer as consultas assim:

     

    select

    uf_cliente as 'uf',

    ie_cliente as 'ie_rg',

    nm_cliente as 'nome_razao' --,

    --convert(char(10),dt_cadastro,103) as 'data_cadastro',

    --(select count(p.id_pedido) from pedido p where p.id_cliente = c.id_cliente and p.NotaFiscalOK = 1) as 'faturas',

    --(select count(p.id_pedido) from pedido p where p.id_cliente = c.id_cliente) as 'consultas'

    from

    cliente c

    where

    dbo.isIE(c.uf_cliente, c.ie_cliente) = 0

    order by

    nm_cliente

    GO

     

    Resulta em 1800 linhas em 0 segundos.

    SP 1798370XX FULANO DOS SANTOS SILVA  

    SP 23193XX BELTRANO DE CARVALHO

    SP 999020VV CICLANO FERNANDES. 
    SP 169405VV ALGUEM PONTIROLLE 

    SP 28156VV OUTRO MAGON 

    SP 43082UU EMPRESA - INTERMEDIAÇÃO E CONSULTORIA DE NEGOCIOS  

    SP 1848327OO NINGUEM BASTOS. 

    SP 612528CC POREM BOBROW 

     

    CLR é o bixo !!!

    Thursday, September 11, 2008 2:13 AM
  • Bom dia Pessoal

    Eu tomei a liberdade de publicar abaixo a minha classe de validação feita para a linguagem c# espero que seja util a todos...

    Sugestões e melhoria podem mandar para adrianoboller@hotmail.com

    Quando acharem a sequencia de caracter:

    //111111111111111111111111111111111111111111111111 = util.cs

    //222222222222222222222222222222222222222222222222 = designer.cs

    Segue abaixo o código, como ficou um pouco longo terá o envio segmentado em varios post na sequencia...

    Tuesday, July 17, 2012 3:37 PM
  • //111111111111111111111111111111111111111111111111 = util.cs

    // Classe Util

    // Desenvolvedor C#: Adriano Jose Boller

    // 17/07/2012

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Text.RegularExpressions;

    using System.Runtime.InteropServices;//Dll Sintegra

    namespace WindowsFormsApplication1

    {

       class Util

       {

           //Nesta Parte do código, inserimos a referência a DLL que já está registrada.

           [DllImport("DllInscE32.dll")]

           //Método static extern ConsisteInscricaoEstadual que retornará a validação da IE

           staticextern bool ConsisteInscricaoEstadual(string Inscr,string UF);

           #region NomeValido

           public bool NomeValido(string nome)

           {

               Regex rgx = newRegex(@"^[aA-zZ]+((\s[aA-zZ]+)+)?$");

               if (rgx.IsMatch(nome))

                   return true;

               else

                   return false;

           }

           #endregion

           ////////////////////////////////////////////////////////////

           #region ContemLetras

           public bool contemLetras(string letras)

           {

               if (letras.Where(c => char.IsLetter(c)).Count() > 0)

                   return true;

               else

                   return false;

           }

           #endregion

           ////////////////////////////////////////////////////////////

           #region ContemNumeros

           public bool contemNumeros(string numeros)

           {

               if (numeros.Where(c => char.IsNumber(c)).Count() > 0)

                   return true;

               else

                   return false;

          }

           #endregion

           ////////////////////////////////////////////////////////////

           #region ContemLetrasEnumeros

           public bool ContemLetrasEnumeros(string texto)

           {

               if (this.contemLetras(texto) &&this.contemNumeros(texto))

                   return true;

               else

                   return false;

           }

           #endregion

           ////////////////////////////////////////////////////////////

           #region NumeroInteiroValido

           public bool NumeroInteiroValido(string numero)

           {

               Regex rgx = newRegex(@"^[0-9]+$");

               if (rgx.IsMatch(numero))

                   return true;

               else

                   return false;

           }

           #endregion

           ////////////////////////////////////////////////////////////

           #region NumeroRealValido

           public bool NumeroRealValido(string numeroreal)

           {

               Regex rgx = newRegex(@"^[0-9]+?(.|,[0-9]+)$");

               if (rgx.IsMatch(numeroreal))

                   return true;

               else

                   return false;

           }

           #endregion

           ////////////////////////////////////////////////////////////

           #region CepValido

           public bool CepValido(string cep)

           {

               Regex rgx = newRegex(@"^\d{5}\-?\d{3}$");

               if (rgx.IsMatch(cep))

               {

                   return true;

               }

               else

               {

                   return false;

               }

           }

           #endregion

           ////////////////////////////////////////////////////////////

           #region EmailValido

           public bool EmailValido(string email)

           {

               Regex rgx = newRegex(@"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$");

               if (rgx.IsMatch(email))

               {

                   return true;

               }

               else

               {

                   return false;

               }

           }

           #endregion

           ////////////////////////////////////////////////////////////

           #region UrlValida

           public bool UrlValida(string http)

           {

               Regex rgx = newRegex(@"^((http)|(https)|(ftp)):\/\/([\- \w]+\.)+\w{2,3}(\/ [%\-\w]+(\.\w{2,})?)*$");

               if (rgx.IsMatch(http))

               {

                   return true;

               }

               else

               {

                   return false;

               }

           }

           #endregion

           ////////////////////////////////////////////////////////////

           #region IpValido

           public bool IpValido(string ip)

           {

               Regex rgx = newRegex(@"^\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b$");

               if (rgx.IsMatch(ip))

               {

                   return true;

               }

               else

               {

                   return false;

               }

           }

           #endregion

           ////////////////////////////////////////////////////////////

    Tuesday, July 17, 2012 3:37 PM
  • //111111111111111111111111111111111111111111111111 = util.cs

    #region DataValida

           public bool DataValida(string data)

           {

               Regex rgx = newRegex(@"^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/\d{4}$");

               if (rgx.IsMatch(data))

               {

                   return true;

               }

               else

               {

                   return false;

               }

           }

           #endregion

           ////////////////////////////////////////////////////////////

           #region TelefoneValido

           public bool TelefoneValido(string telefone)

           {

              Regex rgx = newRegex(@"^([0-9]{2})\s[0-9]{4}-[0-9]{4}$");

              if (rgx.IsMatch(telefone))

               {

                   return true;

               }

               else

               {

                   return false;

              }

           }

           #endregion

           ////////////////////////////////////////////////////////////

    Tuesday, July 17, 2012 3:37 PM
  • //111111111111111111111111111111111111111111111111 = util.cs

           #region CpfValido

           public bool CpfValido(string cpf)

           {

                   // Se vazio

                   if (cpf.Length == 0)

                   returnfalse;

                   //Expressao regular que valida cpf

                   Regex rgx =new Regex(@"^\d{3}\.?\d{3}\.?\d{3}\-?\d{2}$");

                   if (rgx.IsMatch(cpf))

                   {

                       return true;

                   }

                   else

                   {

                       return false;

                   }

                   // Limpa caracteres especiais pontos e espaços

                   cpf = cpf.Trim();

                   cpf = cpf.Replace(".", "").Replace("-", "").Replace("/", "").Replace(" ", "");

                   cpf = cpf.Replace("+", "").Replace("*", "").Replace(",", "").Replace("?", "");

                   cpf = cpf.Replace("!", "").Replace("@", "").Replace("#", "").Replace("$", "");

                   cpf = cpf.Replace("%", "").Replace("¨", "").Replace("&", "").Replace("(", "");

                   cpf = cpf.Replace("=", "").Replace("[", "").Replace("]", "").Replace(")", "");

                   cpf = cpf.Replace("{", "").Replace("}", "").Replace(":", "").Replace(";", "");

                   cpf = cpf.Replace("<", "").Replace(">", "").Replace("ç", "").Replace("Ç", "");

                   // Se so tem numeros

                   if (this.contemLetras(cpf))

                       returnfalse;

                   else

                       return true;

                  

                   // Se o tamanho for < 11 entao retorna como inválido

                   if (cpf.Length != 11)

                       return false;

                   // Caso coloque todos os numeros iguais

                   switch (cpf)

                   {

                       case "11111111111":

                           return false;

                       case "00000000000":

                           return false;

                       case "2222222222":

                           return false;

                       case "33333333333":

                           return false;

                       case "44444444444":

                           return false;

                       case "55555555555":

                           return false;

                       case "66666666666":

                           return false;

                       case "77777777777":

                           return false;

                       case "88888888888":

                           return false;

                       case"99999999999":

                           return false;

                   }

                   // Calcula Validade do CPF

                   int[] multiplicador1 =new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };

                   int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };

                   string tempCpf;

                   string digito;

                   int soma;

                   int resto;

                   cpf = cpf.Trim();

                   cpf = cpf.Replace(

                   ".", "").Replace("-","");

                   if (cpf.Length != 11)

                       return false;

                   tempCpf = cpf.Substring(0, 9);

                   soma = 0;

                   for (int i = 0; i < 9; i++)

                       soma +=

                       int.Parse(tempCpf[i].ToString()) * multiplicador1[i];

                   resto = soma % 11;

                   if (resto < 2)

                       resto = 0;

                   else

                       resto = 11 - resto;

                   digito = resto.ToString();

                   tempCpf = tempCpf + digito;

                   soma = 0;

                   for (int i = 0; i < 10; i++)

                       soma +=

                       int.Parse(tempCpf[i].ToString()) * multiplicador2[i];

                   resto = soma % 11;

                   if (resto < 2)

                       resto = 0;

                   else

                       resto = 11 - resto;

                   digito = digito + resto.ToString();

                   return cpf.EndsWith(digito);

               }

           #endregion ok

           ////////////////////////////////////////////////////////////
    Tuesday, July 17, 2012 3:38 PM
  • //111111111111111111111111111111111111111111111111 = util.cs

           #region CnpjValido

           public bool CnpjValido(string cnpj)

               {

                       // Se vazio

                       if (cnpj.Length == 0)

                           returnfalse;

                       //Expressao regular que valida cpf

                       Regex rgx =new Regex(@"^\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2}$");

                       if (rgx.IsMatch(cnpj))

                      {

                           return true;

                       }

                       else

                       {

                           return false;

                       }

                       // Limpa caracteres especiais

                       cnpj = cnpj.Trim();

                       cnpj = cnpj.Replace(".","").Replace("-","").Replace("/","").Replace(" ","");

                       cnpj = cnpj.Replace("+", "").Replace("*", "").Replace(",", "").Replace("?", "");

                       cnpj = cnpj.Replace("!", "").Replace("@", "").Replace("#", "").Replace("$", "");

                       cnpj = cnpj.Replace("%", "").Replace("¨", "").Replace("&", "").Replace("(", "");

                       cnpj = cnpj.Replace("=", "").Replace("[", "").Replace("]", "").Replace(")", "");

                       cnpj = cnpj.Replace("{", "").Replace("}", "").Replace(":", "").Replace(";", "");

                       cnpj = cnpj.Replace("<", "").Replace(">", "").Replace("ç", "").Replace("Ç", "");

                       // Se comtem letras

                       if (this.contemLetras(cnpj))

                           returnfalse;

                       else

                           return true;

                       // Se o tamanho for < 11 entao retorna como inválido

                       if (cnpj.Length != 14)

                           return false;

                       // Caso coloque todos os numeros iguais

                       switch (cnpj)

                       {       //00000000000000

                           case "11111111111111":

                               return false;

                           case "00000000000000":

                               return false;

                           case "22222222222222":

                               return false;

                           case "33333333333333":

                               return false;

                           case "44444444444444":

                               return false;

                           case "55555555555555":

                               return false;

                           case "66666666666666":

                               return false;

                           case "77777777777777":

                               return false;

                           case "88888888888888":

                               returnfalse;

                           case "99999999999999":

                               return false;

                       }

                       int[] multiplicador1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };

                       int[] multiplicador2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };

                       int soma;

                       int resto;

                       string digito;

                       string tempCnpj;

                       cnpj = cnpj.Trim();

                       cnpj = cnpj.Replace(

                       ".", "").Replace("-","").Replace("/","");

                       if (cnpj.Length != 14)

                       return false;

                       tempCnpj = cnpj.Substring(0, 12);

                       soma = 0;

                       for (int i = 0; i < 12; i++)

                       soma +=

                       int.Parse(tempCnpj[i].ToString()) * multiplicador1[i];

                       resto = (soma % 11);

                       if (resto < 2)

                       resto = 0;

                       else

                       resto = 11 - resto;

                       digito = resto.ToString();

                       tempCnpj = tempCnpj + digito;

                       soma = 0;

                       for (int i = 0; i < 13; i++)

                       soma +=

                       int.Parse(tempCnpj[i].ToString()) * multiplicador2[i];

                       resto = (soma % 11);

                       if (resto < 2)

                       resto = 0;

                       else

                       resto = 11 - resto;

                       digito = digito + resto.ToString();

                       return cnpj.EndsWith(digito);

               }

           #endregion

           ////////////////////////////////////////////////////////////

    Tuesday, July 17, 2012 3:38 PM
  • //111111111111111111111111111111111111111111111111 = util.cs

    #region InscEstadualValida

           // Copiar o arquivo  DllInscE32.dll para o diretório c:\windows\System32;

           publicbool InscEstadualValida(string pInsc,string pUF)

                   {

                       // Se vazio

                       if (pInsc.Length == 0)

                           returnfalse;

                       // Limpa caracteres especiais

                       pInsc = pInsc.Trim();

                       pInsc = pInsc.Replace(".","").Replace("-","").Replace("/","").Replace(" ","");

                       pInsc = pInsc.Replace("+", "").Replace("*", "").Replace(",", "").Replace("?", "");

                       pInsc = pInsc.Replace("!", "").Replace("@", "").Replace("#", "").Replace("$", "");

                       pInsc = pInsc.Replace("%", "").Replace("¨", "").Replace("&", "").Replace("(", "");

                       pInsc = pInsc.Replace("=", "").Replace("[", "").Replace("]", "").Replace(")", "");

                       pInsc = pInsc.Replace("{", "").Replace("}", "").Replace(":", "").Replace(";", "");

                       pInsc = pInsc.Replace("<", "").Replace(">", "").Replace("ç", "").Replace("Ç", "");

                       //Caso a Inscricão e o Estado Estejam Certos, Retorna Verdadeiro

                       if (ConsisteInscricaoEstadual(pInsc.Replace(".","").Replace("-",""), pUF))

                           return false;  // notei que aqui em varios exemplos na internet estava invertido o verdadeiro/falso

                       else

                           returntrue;

                   }

           #endregion

           ////////////////////////////////////////////////////////////

       }

    }

    ////////////////////////////////////////////////////////////

    Tuesday, July 17, 2012 3:39 PM
  • //111111111111111111111111111111111111111111111111 = util.cs 

    // Última parte do primeiro arquivo manual das Expressoes Regulares

    /*

    Expressão Regular

    *****************

    using System.Text.RegularExpressions;

    Busca posicionada

    -----------------

    Símbolo

    Descrição

    ^

    Busca somente no início da string.

    $

    Busca somente no fim da string.

    \b

    Encontra em qualquer parte da string.

    \B

    Encontra qualquer parte que não esteja limitada.

    Literais

    ---------

    Símbolo

    Descrição

    Alfa-numérica

    Todos os caracteres alfabéticos e numerais se encontram literalmente.

    \\

    Encontra o caractere de escape.

    Classes de Caracteres

    ---------------------

    Símbolo

    Descrição

    [abc]

    Encontra qualquer caractere que estiver dentro do grupo. Você pode usar hífen para denotar escala. Por Exemplo. [a-z] encontra qualquer letra do alfabeto. [0-9] encontra qualquer dígito.

    [^abc]

    Encontra qualquer caractere que não estiver dentro do grupo. O circunflexo indica que nenhum caractere deve estar na string.

    Observação: O circunflexo usado dentro da classe de caractere é diferente do que denota o início da string, não se confundam. A negação aqui só é permitida dentro dos sinais.

    .

    (Ponto). Encontra qualquer caractere exceto o caractere de nova linha ou terminador de linha Unicode.

    \w

    Encontra qualquer caractere alfanumérico incluindo underscore. Equivalente a [a-zA-Z0-9_].

    \W

    Encontra qualquer caractere que não se encontra na classe dos alfanuméricos. Equivalente a [^a-zA-Z0-9_].

    \d

    Encontra qualquer dígito. Equivalente a [0-9].

    \D

    Encontra qualquer caractere que não seja um dígito. Equivalente a [^0-9].

    \s

    Encontra qualquer caractere que equivale a um espaço. Equivalente a [ abc].

    \S

    Encontra qualquer caractere que não equivale a um espaço. Equivalente a [^abc].

    Repetição

    ---------

    Símbolo

    Descrição

    {x}

    Encontra exatamente x ocorrência na expressão regular.

    {x,}

    ncontra x ou mais ocorrências na expressão regular.

    {x,y}

    Encontra x para y numero de ocorrências na expressão regular.

    ?

    Encontra zero ou nenhuma ocorrência. Equivalente a {0,1}.

    *

    Encontra zero ou mais ocorrências. Equivalente a {0,}.

    +

    Encontra uma ou mais ocorrências. Equivalente a {1,}.

    Alternação & Agrupamento

    ------------------------

    Símbolo

    Descrição

    ( )

    Agrupamento de caracteres para criar uma cláusula de condição. Pode estar aninhado.

    |

    Combina cláusulas de condições dentro de uma expressão regular e então encontra qualquer uma das cláusulas. Similar à expressão "OR".

    BackReferences

    --------------

    Símbolo

    Descrição

    ( )\n

    Encontra uma cláusula entre parênteses. n é o número de cláusulas para a esquerda da backReference.

    */

    Tuesday, July 17, 2012 3:39 PM
  • //222222222222222222222222222222222222222222222222 = designer.cs

    // Segue aqui a utilização do Util.cs em um form com campos e botoes com as variaveis apresentadas no código abaixo:

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Linq;

    using System.Text;

    using System.Windows.Forms;

    namespace WindowsFormsApplication1

    {

       public partialclass ValidaSintegra :Form

       {

           public ValidaSintegra()

           {

               InitializeComponent();

     

           }

           private void button1_Click(object sender,EventArgs e)

           {

               string pUF   = cUF.Text;

               string pInsc = cInsc.Text;

               cInsc.Text = cInsc.Text.Replace(" ", "");

               cInsc.Text = cInsc.Text.Replace("+", "").Replace("*", "").Replace(",", "").Replace("?", "");

               cInsc.Text = cInsc.Text.Replace("!", "").Replace("@", "").Replace("#", "").Replace("$", "");

               cInsc.Text = cInsc.Text.Replace("%", "").Replace("¨", "").Replace("&", "").Replace("(", "");

               cInsc.Text = cInsc.Text.Replace("=", "").Replace("[", "").Replace("]", "").Replace(")", "");

               cInsc.Text = cInsc.Text.Replace("{", "").Replace("}", "").Replace(":", "").Replace(";", "");

               cInsc.Text = cInsc.Text.Replace("<","").Replace(">","").Replace("ç","").Replace("Ç","");

               Util util =new Util();

          

               if (util.InscEstadualValida(pInsc, pUF) ==true)

               {

                  MessageBox.Show("Inscrição Válida");

               }

               else

               {

                  MessageBox.Show("Inscrição InVálida");

               }

           }

           private void cInsc_TextChanged(object sender,EventArgs e)

           {

           }

           private void cUF_TextChanged(object sender,EventArgs e)

           {

           }

           private void button2_Click(object sender,EventArgs e)

           {

               string pCPF = cCPF.Text;

               cCPF.Text = cCPF.Text.Replace(" ", "");

               cCPF.Text = cCPF.Text.Replace("+","").Replace("*","").Replace(",","").Replace("?","");

               cCPF.Text = cCPF.Text.Replace("!", "").Replace("@", "").Replace("#", "").Replace("$", "");

               cCPF.Text = cCPF.Text.Replace("%", "").Replace("¨", "").Replace("&", "").Replace("(", "");

               cCPF.Text = cCPF.Text.Replace("=", "").Replace("[", "").Replace("]", "").Replace(")", "");

               cCPF.Text = cCPF.Text.Replace("{", "").Replace("}", "").Replace(":", "").Replace(";", "");

               cCPF.Text = cCPF.Text.Replace("<", "").Replace(">", "").Replace("ç", "").Replace("Ç", "");

               Util util = newUtil();

               if (util.CpfValido(pCPF) == true)

               {

                   MessageBox.Show("CPF Válido");

               }

               else

               {

                   MessageBox.Show("CPF InVálido");

               }

           }

           private void cCPF_TextChanged(object sender,EventArgs e)

           {

           }

           private void button3_Click(object sender,EventArgs e)

           {

               string pCNPJ = cCNPJ.Text;

               cCNPJ.Text = cCNPJ.Text.Replace(" ", "");

               cCNPJ.Text = cCNPJ.Text.Replace("+", "").Replace("*", "").Replace(",", "").Replace("?", "");

               cCNPJ.Text = cCNPJ.Text.Replace("!", "").Replace("@", "").Replace("#", "").Replace("$", "");

               cCNPJ.Text = cCNPJ.Text.Replace("%", "").Replace("¨", "").Replace("&", "").Replace("(", "");

               cCNPJ.Text = cCNPJ.Text.Replace("=", "").Replace("[", "").Replace("]", "").Replace(")", "");

               cCNPJ.Text = cCNPJ.Text.Replace("{", "").Replace("}", "").Replace(":", "").Replace(";", "");

               cCNPJ.Text = cCNPJ.Text.Replace("<","").Replace(">","").Replace("ç","").Replace("Ç","");

               Util util = newUtil();

               if (util.CnpjValido(pCNPJ) == true)

               {

                   MessageBox.Show("CNPJ Válido");

               }

               else

               {

                   MessageBox.Show("CNPJ InVálido");

               }

           }

           private void textBox1_TextChanged(object sender,EventArgs e)

           {

           }

       }

    }

    ///////////////////////////////////////////////////////////////////////////////

    Tuesday, July 17, 2012 3:39 PM
  • //222222222222222222222222222222222222222222222222 = designer.cs Final do arquivo

    Esse código necessita da dll3.zip descompactada e registrada no windows\system32 ou windows\system

    Para isso baixe do site do sintegra a dll3.zip que é a DllInscE32.dll apresentada no codigo do util.cs

    Se possivel crie um .bat para instalar ela para simplificar o seu processo segue abaixo:

    Echo off
    cls
    Echo.
    Echo Instalação da Dll do Sintegra Valida Inscrição Estadual
    Echo Desenvolvedor .net: Adriano Jose Boller - (41) 9949 1800
    Echo.

    copy DllInscE32.dll C:\WINDOWS\system32
    cd\
    cd C:\WINDOWS\system32
    regsvr32.exe DllInscE32.dll
    pause

    Espero que tenha ajudado a comunidade .net c# com esse codigo.

    [ ]´s

                    ( o o )
    [*]-----oo00o------O-----o00oo-----[*]

    Tuesday, July 17, 2012 3:40 PM
  • Bom dia,

    Sei que o tópico é um pouco antigo, mas segue uma validação de IE que eu mesmo fiz.

    Fiquem a vontade em alterar e utilizar, mas por favor, mantenham os créditos.

    /**
    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
    

    • Proposed as answer by Rodrigo Ebner Wednesday, July 17, 2013 3:03 PM
    Wednesday, July 17, 2013 3:02 PM