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.