Desenvolvimento - C#

Validação de Inscrição Estadual utilizando DLL Sintegra

Neste Artigo veremos de forma detalhada como utilizar uma DLL disponibilizada pelo SINTEGRA (Sistema Integrado de Informações sobre Operações Interestaduais com Mercadorias e Serviços) para validação de Inscrição Estadual (IE).

por Felipe Carvalho dos Santos



Muitas regras para validação de dados inerentes a Pessoa Física (CPF) ou Pessoa Jurídica (CNPJ, IM, IE) podem ser dificultadas em algumas linguagens em que o programador precisa conhecer as regras a fundo e então implementa-las em seu código.

Neste Artigo veremos de forma detalhada como utilizar uma DLL disponibilizada pelo SINTEGRA

(Sistema Integrado de Informações sobre Operações Interestaduais com Mercadorias e Serviços – www.sintegra.gov.br) para validação de Inscrição Estadual (IE). Lembrando que se cada estado da união possui sua regra para verificação de dígitos e validação da IE.

Criaremos uma aplicação ASP.NET (C#) que receberá em um TextBox os números da IE que se deseja validar separados por uma virgula como mostrado abaixo:

Teremos também um ComboBox que chamaremos cboEstados com os Estados que desejamos consultar. Estes serão passados como parâmetro para validação. Abaixo podemos ver o conteúdo completo do Combo :

<asp:DropDownList ID="cboEstados" runat="server"

            AutoPostBack="True" Font-Bold="False">

            <asp:ListItem></asp:ListItem>

            <asp:ListItem Value="AL">AL</asp:ListItem>   

            <asp:ListItem Value="AP">AP</asp:ListItem>    

            <asp:ListItem Value="AM">AM</asp:ListItem>    

            <asp:ListItem Value="BA">BA</asp:ListItem>    

            <asp:ListItem Value="CE">CE</asp:ListItem>    

            <asp:ListItem Value="DF">DF</asp:ListItem>

            <asp:ListItem Value="ES">ES</asp:ListItem>    

            <asp:ListItem Value="GO">GO</asp:ListItem> 

            <asp:ListItem Value="MA">MA</asp:ListItem>    

            <asp:ListItem Value="MT">MT</asp:ListItem>    

            <asp:ListItem Value="MS">MS</asp:ListItem>    

            <asp:ListItem Value="MG">MG</asp:ListItem>    

            <asp:ListItem Value="PA">PA</asp:ListItem> 

            <asp:ListItem Value="PB">PB</asp:ListItem>    

            <asp:ListItem Value="PR">PR</asp:ListItem>    

            <asp:ListItem Value="PE">PE</asp:ListItem>    

            <asp:ListItem Value="PI">PI</asp:ListItem>    

            <asp:ListItem Value="RJ">RJ</asp:ListItem>    

            <asp:ListItem Value="RN">RN</asp:ListItem>    

            <asp:ListItem Value="RS">RS</asp:ListItem>    

            <asp:ListItem Value="RO">RO</asp:ListItem>    

            <asp:ListItem Value="RR">RR</asp:ListItem>    

            <asp:ListItem Value="SC">SC</asp:ListItem>     

            <asp:ListItem Value="SP">SP</asp:ListItem>

            <asp:ListItem Value="SE">SE</asp:ListItem>    

            <asp:ListItem Value="TO">TO</asp:ListItem>

        </asp:DropDownList>

Registrando a DLL

O primeiro passo será baixar do site www.sintegra.gov.br/DLL3.zip o arquivo e descompactarmos. Na Pasta DLL3 encontraremos a arquivo DllInscE32.dll que usaremos no nosso código C#. Porém antes de utilizarmos precisamos registrá-la no Windows. Para isso copie a dll DllInscE32.dll para a Pasta Windows\system32 (se for versão diferente de Windows XP deve ser copiada para a pasta system).

Abra o Prompt de Comando e digite: C: \WINDOWS\system32>regsvr32.exe DllInscE32.dll

Ocorrerá um erro dizendo que o ponto de entrada não foi encontrado... Porém não se preocupe, pois sua DLL já está registrada.

Após registrarmos a dll, poderemos utiliza-lá em nosso código e finalmente implementar nossa validação.InIciaremos declarando nossa dll e criando nosso método ConsisteInscricaoEstadual(IE,UF)

Conforme mostrado abaixo

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Text;

using System.Xml;

using System.Runtime.InteropServices;

using System.IO;

using System.Drawing;

public partial class xml : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

    }

    //Nesta Parte do código e desta maneira 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

     public static extern int ConsisteInscricaoEstadual(string vInsc, string vUF);

Após incluímos o código no evento dos botões:

 BtnVerifica

    protected void BtnVerifica_Click(object sender, EventArgs e)

    {

        try

        {

            lstResultado.Items.Clear();

            lblResultado.Text = "";

            lblTotal.Text = "";

            //Busca valor do campo de Inscrição Estadual

            string vIE = txtInscricao.Text.Trim();

            int i;

            int vContTotal=0;

            //Declaramos um Array separando os indices por virgula(,)

            string[] array = vIE.Split(",");

            //Buscamos os indices com For

            for (i = 0; i != array.Length; i++)

            {

                string vInd = array[i].ToString();

               

//Insere na variável o retorno da função que estamos utilizando (0= IE Válida 1= //IE Inválida)

                int vReturn = ConsisteInscricaoEstadual(vInd, cboEstados.SelectedValue);

                

                //Insere registro no contador

                vContTotal += 1;

                string vStrRetorno;

                if (vReturn == 0)

                {

                   

     //Insere NºIE + IE Válida na ListBox

                    vStrRetorno = vInd + " - IE Válida ";

                    lstResultado.Items.Add(vStrRetorno.ToString());

                }

                else

                {

                    //Insere NºIE + IE Inválida na ListBox

                    vStrRetorno = vInd + " - IE Inválida ";

                    lstResultado.Items.Add(vStrRetorno.ToString());

                }

                //Finaliza Contador e informa número de registro no ListBox

                lblTotal.Text = vContTotal.ToString();

            }

        }

        catch (Exception ex)

        {

            lblResultado.Text = ex.Message;

        }

    }

O Resultado será inserido em um ListBox (lstResultado) conforme mostrado abaixo :

 btnLimpar

    protected void btnLimpar_Click(object sender, EventArgs e)

    {

        txtInscricao.Text = "";

    }

 btnLimparRes

    protected void btnLimparRes_Click(object sender, EventArgs e)

    {

        lstResultado.Items.Clear();

    }

 btnSalvar

Neste botão poderemos salvar todo o resultado do ListBox em um arquivo texto(txt) que será selecionado por meio do controle input file conforme mostrado abaixo :

protected void btnSalvar_Click(object sender, EventArgs e)

    {

        try

        {

            lblResultado.Text = "";

//Busca o caminho do arquivo que será gravado buscado do HtmlControl (<input //id="File1" type="file" runat="server"/>)

            string vPath = File1.PostedFile.FileName.ToString();

              //Caso exista arquivo

if ((File1.PostedFile.FileName != "") || (File1.PostedFile.FileName != string.Empty))

              {

                //Caso ListBox não esteja vazio

                if (lstResultado.Items.Count > 0)

                {

                    //Instanciamos a classe FileStream

     System.IO.FileStream fl = new FileStream(vPath, FileMode.Open,  FileAccess.Write);

                    foreach (ListItem ItensLst in lstResultado.Items)

                    {

                        string vListToFile = string.Empty;

                        vListToFile = ItensLst.Text.ToString();

                        //Escreve conteúdo do Listbox no Arquivo

                        StreamWriter Wfl = new StreamWriter(fl);

                        Wfl.Write(vListToFile + "\r\n");

                        Wfl.Flush();

                    }

                    lblResultado.Text = "Arquivo Gerado com sucesso";

                }

                else

                {

                    lblResultado.Text="Não existe dados na lista para serem salvos no arquivo";

                }

            }

            else

            {

                lblResultado.Text = "É Necessário selecionar um arquivo";

            }

        }

        catch (Exception ew)

        {

            lblResultado.Text = ew.Message;

        }

    }

O Arquivo Valida_IE.txt conterá todos os registros que foram validados conforme mostrado abaixo:

Conclusões

Podemos concluir que a utilização de uma DLL disponibilizada sem custo e constantemente atualizada pelos seus criadores junto com uma rápida e fácil implementação no nosso código C# ajuda o processo de desenvolvimento a ser mais ágil, prático e limpo impactando positivamente em suas aplicações.

Felipe Carvalho dos Santos

Felipe Carvalho dos Santos - Bacharel em Sistemas de Informação pela Universidade Cruzeiro do Sul.
Analista Programador do provedor de acesso a Internet Neovia (
www.neovia.com.br) e desenvolvedor na Livesys - Soluções em TI (www.livesys.com.br).
Desenvolvimento de aplicações Web em plataforma Microsoft ASP e ASP.NET(C# e VB.NET).
Em processo final para certificação MCP C#.