Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Deise Vicky

[Resolvido] Validação de Inscrição Estadual

Recommended Posts

Estou desenvolvendo uma aplicação em c# (Web) na qual preciso fazer validação de Inscrição Estadual.

Até tentei utilizar um método que achei em um tópico, mas na maioria dos testes que fiz, percebi que ela não está funcionando muito bem.

Peguei vários exemplos de IE's válidas no site do Sintegra e da Fazenda para fazer os testes, mas estas são acusadas como inválidas.

 

Ví em outros lugares sugestões para utilizar a Dll que o Sintegra disponibiliza para download, mas não consegui utilizá-la.

O problema é o seguinte, em alguns sites dizem que além de copiar a dll para a pasta System, ela tem que ser registrada no Windows.

 

Alguém sabe algum outro método em C# para fazer essa validação, e que funcione, ou como utilizar essa dll sem precisar registrá-la?

 

Fico no aguardo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode procurar em algum site do governo se acha o algoritmo de validação e escrever você mesmo o código, as vezes é melhor que usar dll's de terceiros...

 

isso ai que falei acima em ultimo caso e se tiver tempo pra fazer...fazer um código desse tipo ajuda bastante no desenvolvimento da lógica, principalmente se estiver começando... eu msm estou precisando de uma validacao de ie...

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode procurar em algum site do governo se acha o algoritmo de validação e escrever você mesmo o código, as vezes é melhor que usar dll's de terceiros...

 

isso ai que falei acima em ultimo caso e se tiver tempo pra fazer...fazer um código desse tipo ajuda bastante no desenvolvimento da lógica, principalmente se estiver começando... eu msm estou precisando de uma validacao de ie...

 

O prolema é esse, tempo!

O sistema que estamos desenvolvendo entra em homologação essa semana, e como somos uma equipe, um desenvolve e outro testa. Nesse teste que fui fazer descobri que a tela não tinha validação nenhuma, e isso não é o certo!

É claro que achei os algoritmos de validação, mas pra desenvolver eu levaria um tempão!

Mas de qualquer forma obrigada!

Vou continuar procurando uma solução mais rápida, se encontrar eu posto aqui!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Dia

 

 

dá uma olhada no link , não sei se funciona, pois não testei achei no google..

 

particularmente faria o que o Murilo disse e procuraria o algoritimo, que aparentemente varia de estado para estado

 

se eu achar o algoritimo posto

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Dia

 

 

dá uma olhada no link , não sei se funciona, pois não testei achei no google..

 

particularmente faria o que o Murilo disse e procuraria o algoritimo, que aparentemente varia de estado para estado

 

se eu achar o algoritimo posto

 

Abraços

 

Olá, bom dia!

Então, eu já tinha visto esse exemplo, inclusive tentei escrevê-lo em C# utilizando as regras de validação que constam no site do Sintegra, só que apesar de VB ser meio parecido com C#, pra quem nunca trabalhou com VB fica meio difícil entender o código para reescrevê-lo.

Mas enfim, vou continuar tentando aqui, qualquer coisa posto aqui!

 

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

 

Olha só o que eu consegui até agora:

 

       public static bool ValidarInscricaoEstadual(string pUF, string pInscr)
       {
           bool retorno = false;
           string strBase;
           string strBase2;
           string strOrigem;
           string strDigito1;
           string strDigito2;
           int intPos;
           int intValor;
           int intSoma = 0;
           int intResto;
           int intNumero;
           int intPeso = 0;
           int intDig;

           strBase = "";
           strBase2 = "";
           strOrigem = "";

           if ((pInscr.Trim().ToUpper() == "ISENTO"))
               return true;

           for (intPos = 1; intPos <= pInscr.Trim().Length; intPos++)
           {
               if ((("0123456789P".IndexOf(pInscr.Substring((intPos - 1), 1), 0, System.StringComparison.OrdinalIgnoreCase) + 1) > 0))
                   strOrigem = (strOrigem + pInscr.Substring((intPos - 1), 1));
           }

           switch (pUF.ToUpper())
           {
               case "AC":
                   #region

                   strBase = (strOrigem.Trim() + "00000000000").Substring(0, 11);

                   if (strBase.Substring(0, 2) == "01")
                   {
                       intSoma = 0;

                       for (intPos = 1; (intPos <= 11); intPos++)
                       {
                           intValor = int.Parse(strBase.Substring((intPos - 1), 1));

                           if (intPos == 1) intPeso = 4; else if (intPeso == 1) intPeso = 9;

                           intSoma += intValor * intPeso;

                           intPeso--;
                       }

                       intResto = (intSoma % 11);
                       strDigito1 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));

                       intSoma = 0;
                       strBase = (strOrigem.Trim() + "000000000000").Substring(0, 12);

                       for (intPos = 1; (intPos <= 12); intPos++)
                       {
                           intValor = int.Parse(strBase.Substring((intPos - 1), 1));

                           if (intPos == 1) intPeso = 5; else if (intPeso == 1) intPeso = 9;

                           intSoma += intValor * intPeso;
                           intPeso--;
                       }

                       intResto = (intSoma % 11);
                       strDigito2 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));

                       strBase2 = (strBase.Substring(0, 12) + strDigito2);

                       if ((strBase2 == strOrigem))
                           retorno = true;
                   }
                   #endregion

                   break;

               case "AL":

                   #region

                   strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);

                   if ((strBase.Substring(0, 2) == "24"))
                   {
                       //24000004D
                       //98765432
                       intSoma = 0;

                       for (intPos = 1; (intPos <= 8); intPos++)
                       {
                           intValor = int.Parse(strBase.Substring((intPos - 1), 1));

                           if(intPos == 1) intPeso = 9;

                           intSoma += intValor * intPeso;
                           intPeso--;
                       }

                       intSoma = (intSoma * 10);
                       intResto = (intSoma % 11);

                       strDigito1 = ((intResto == 10) ? "0" : Convert.ToString(intResto)).Substring((((intResto == 10) ? "0" : Convert.ToString(intResto)).Length - 1));

                       strBase2 = (strBase.Substring(0, 8) + strDigito1);

                       if ((strBase2 == strOrigem))
                           retorno = true;
                   }

                   #endregion

                   break;

               case "AM": //Errado
                   //99999999 - 9 - despreza-se o dígito verificador
                   //98765432

                   #region
                   strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
                   intSoma = 0;

                   for (intPos = 1; (intPos <= 8); intPos++)
                   {
                       intValor = int.Parse(strBase.Substring((intPos - 1), 1));

                       if (intPos == 1) intPeso = 9;

                       intSoma += intValor * intPeso;
                       intPeso--;
                   }

                   intResto = (intSoma % 11);
                   strDigito1 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));

                   strBase2 = (strBase.Substring(0, 8) + strDigito1);

                   if ((strBase2 == strOrigem))
                       retorno = true;
                   #endregion

                   break;

               case "AP"://Errado

                   //030123459
                   //98765432

                   #region

                   strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
                   intPeso = 0;
                   intDig = 0;

                   if ((strBase.Substring(0, 2) == "03"))
                   {
                       strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
                       intSoma = 0;

                       for (intPos = 1; (intPos <= 8); intPos++)
                       {
                           intValor = int.Parse(strBase.Substring((intPos - 1), 1));

                           if (intPos == 1) intPeso = 9;

                           intSoma += intValor * intPeso;
                           intPeso--;
                       }

                       intResto = (intSoma % 11);
                       intValor = (11 - intResto);

                       strDigito1 = Convert.ToString(intValor).Substring((Convert.ToString(intValor).Length - 1));

                       strBase2 = (strBase.Substring(0, 8) + strDigito1);

                       if ((strBase2 == strOrigem))
                           retorno = true;
                   }

                   #endregion

                   break;
            .........
           }

 

 

Esse é só o começo. O problema é que eu estou montando o método me baseando nos algoritmos do Sintegra e em um método que eu encontrei na Web, que é basicamente o que o Daniel sugeriu, só que em C#, mas o único que deu certo até agora é do Estado do Acre.

Estou encontrando inconsistência. Por exemplo, no site do Sintegra, o algoritmo de validação do Amapá está incorreta, a soma dos cálculos dos dígitos e pesos que deveria dar na verdade é outra.

 

To ficando doida!

Compartilhar este post


Link para o post
Compartilhar em outros sites

é realmente validação de inscrição estadual é um saco, tanto que não colocamos ainda no sistema, só tem de cpf e cnpj. esses documentos como rg e inscrição estadual deviam ser proibidos, onde se viu uma padrão por estado?

 

 

se conseguir depois copio de você, rs. boa sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é realmente validação de inscrição estadual é um saco, tanto que não colocamos ainda no sistema, só tem de cpf e cnpj. esses documentos como rg e inscrição estadual deviam ser proibidos, onde se viu uma padrão por estado?

 

 

se conseguir depois copio de você, rs. boa sorte.

 

Pode deixar, eu passei a tarde toda fazendo testes e ajustes.

Claro que é meio complicado testar, pois não encontramos muitos exemplos de ie válidas...às vezes não basta testar apenas uma ou duas, né...

 

Mas agora tá dando certo, faltam só fazer uns ajustes para uns 5 estados, mas assim que eu finalizar posto aqui para quem precisar...

Só lembrando que não é 100% garantido por causa das poucas possibilidades de teste!

 

:joia:

 

Salve galera!

 

Finalmente, depois de mais de dois dias tentando, consegui validar as inscrições Estaduais.

Montei um programinha básico que faz testes com IE's de todos os estados.

Segue o link pra quem quiser fazer download.

 

Espero que ajude alguém aí, porque pelo menos com os testes que eu fiz, tá funcionando tudo certinho!

Se alguém encontrar algum erro (se alguém tiver paciência de testar), por favor, postem aí!

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.