terça-feira, 19 de janeiro de 2016

Construir uma Classe com o Método de validação do CNPJ em c#!

Classe com o Método de validação do CNPJ 


Validação

   Olá caros amigos e participante do meu blog, vou mostra como fiz meu método de validação em uma classe com o retorno que foi verdadeiro ou falso o teste para que o sistema continue com usa execução, sendo assim foi modificado do jeito em que mostre ao usuário se ele digitou corretamente ou não o CNPJ no "textBox", ao pesquisar em vários sites vi que não existia este método abaixo e por isso modifiquei e agora estou postando para que vejam e aprendam que existe vários modos de validação de um texto digitado.

Local que foi extraído o código de validação

   Segue anexo o link do site do Sintegra que tem o modelo do código para "Javascript" que foi modificado para reconhecimento no Csharp.

Site de Consulta do CNPJ

Código em Javascript a que foi copiado

     Aqui vou mostra o código completo em que foi modificado para o c#.
com o lado direito do mouse clique em "Exibir Código-Fonte", automaticamente o site mostra o código abaixo em linguagem de javascript.




código em c# com validação do CNPJ

   Abaixo fiz algumas modificações que depois possa ser melhorado no seu conteúdo.

   O primeiro foi a extração de espaços no começo e no final do texto.

   Em seguida foi extraído os pontos, traços e barras para melhor validação dos textos digitados.

   Os "alerts" foram modificado para mensagem de reconhecimento do c#.

   Como também foi modificado o teste  de verificação de cada caracteres que no inicio do método ele mesmo já extrai e não deixa passar, mas deixei como estava para que você caro leitor verifique o que foi modificado para que o c# entenda o que vai ser executado, veja e verifique linha por linha, junto com ele, também foi modificado o local que ao extrai cada linha para verificação do digito verificador e comparação do mesmo,

"int cgc01 = Convert.ToInt16( cgc.Substring(0, 1));"

 Depois de muito pesquisar verifiquei que a linha de codigo que segue abaixo teve que ser totalmente modificada,

 "var ch = int.Parse(checkStr.Substring(i, 1));" 

Encontrei a melhor opção para extrair valores de um texto e converter em inteiro para a verificação de valores incorreto, verifique o original abaixo que foi totalmente modificado.

"ch = checkStr.charAt(i);"

com isso consegui extrair cada "string" do texto sem nenhum problema.

verifique abaixo por completo:

namespace GerenciandoeAdministramdoNFc.Controllers.Clientes
{
    class ValidarCnpj
    {
        //ClsClientes _dadosClsClientes;

        internal static bool ValidarCnpjDigitado(ClsClientes dadosClsClientes)
        {


            dadosClsClientes.Cnpj = dadosClsClientes.Cnpj.Trim();
            dadosClsClientes.Cnpj = dadosClsClientes.Cnpj.Replace(".", "").Replace("-", "").Replace("/", "");

            if (dadosClsClientes.Cnpj == "")
            {

                MessageBox.Show("Por favor, preencha o campo \"CNPJ\"." + dadosClsClientes.Cnpj);
                return (false);
            }
            if (dadosClsClientes.Cnpj == "00000000000000")
            {
                MessageBox.Show("Valor de \"CNPJ\" inválido.");
   return (false);
   }

            if (dadosClsClientes.Cnpj.Length < 14)
            {
       MessageBox.Show("Por favor, preencha o campo \"CNPJ\" com 14 dígitos.");
       return (false);
   }

            if (dadosClsClientes.Cnpj.Length > 14)
     {
       MessageBox.Show("Por favor, preencha o campo \"CNPJ\" com 14 dígitos.");
       return (false);
     }
   const string checkOk = "0123456789";
   var checkStr = dadosClsClientes.Cnpj;
   var allValid = true;
   int decPoints = 0;
   var allNum = "";
            int i;
            int j;
            for (i = 0;  i < checkStr.Length;  i++)
   {

                var ch = int.Parse(checkStr.Substring(i, 1));

       for (j = 0;  j < checkOk.Length;  j++)
                    if (ch == int.Parse(checkOk.Substring(j, 1)))
                    //if (ch == checkOk.Substring(j))
                    break;

   if (j == checkOk.Length)
   {
       allValid = false;
       break;
   }
 
     allNum += ch;
   }
   if (!allValid)
                   {
   MessageBox.Show("Por favor, preencha o campo \"CNPJ\" apenas com dígitos.");
   return (false);
   }
            string cgc = dadosClsClientes.Cnpj;
            int cgc01 = Convert.ToInt16( cgc.Substring(0, 1));
            int cgc02 = Convert.ToInt16( cgc.Substring(1, 1));
            int cgc03 = Convert.ToInt16( cgc.Substring(2, 1));
            int cgc04 = Convert.ToInt16( cgc.Substring(3, 1));
            int cgc05 = Convert.ToInt16( cgc.Substring(4, 1));
            int cgc06 = Convert.ToInt16( cgc.Substring(5, 1));
            int cgc07 = Convert.ToInt16( cgc.Substring(6, 1));
            int cgc08 = Convert.ToInt16( cgc.Substring(7, 1));
            int cgc09 = Convert.ToInt16( cgc.Substring(8, 1));
            int cgc10 = Convert.ToInt16( cgc.Substring(9, 1));
            int cgc11 = Convert.ToInt16( cgc.Substring(10, 1));
            int cgc12 = Convert.ToInt16( cgc.Substring(11, 1));
            int cgc13 = Convert.ToInt16( cgc.Substring(12, 1));
            int cgc14 = Convert.ToInt16( cgc.Substring(13, 1));
            decimal aux1 = 10*(cgc01*5 + cgc02*4 + cgc03*3 + cgc04*2 + cgc05*9 + cgc06*8 +
                       cgc07*7 + cgc08*6 + cgc09*5 + cgc10*4 + cgc11*3 + cgc12*2);
            decimal aux2 = aux1/11;
            decimal aux3 = Math.Floor(aux2);
            decimal aux4 = aux3*11;
            decimal dv1 = (aux1 - aux4);
   if (dv1 == 10)
   {
       dv1 = 0;
   }
            aux1 = 10*(cgc01*6 + cgc02*5 + cgc03*4 + cgc04*3 + cgc05*2 + cgc06*9 +
                       cgc07*8 + cgc08*7 + cgc09*6 + cgc10*5 + cgc11*4 + cgc12*3 +
                       dv1*2);
            aux2 = aux1/11;
            aux3 = Math.Floor(aux2);
            aux4 = aux3*11;
            decimal dv2 = (aux1 - aux4);
   if (dv2 == 10)
   {
       dv2 = 0;
   }
   if (dv1 != cgc13 || dv2 != cgc14)
   {
       MessageBox.Show("Dígito verificador do campo \"CNPJ\" não confere.");
       return (false);
   }
            return true;
        }
    }
}



Espero que gostem, comentem e dê sua opinião para que melhore as minhas postagem.

Nenhum comentário:

Postar um comentário