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 SantosMuitas 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.