Validação de CPF e CNPJ

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (10)  (1)

A maioria dos sistemas armazena informações que precisam de algum tipo de validação. As validações mais comuns, e imprescindíveis em qualquer sistema que realize algum tipo de cadastro, como o de clientes, por exemplo, são as validações de CPF e CNPJ.

Neste artigo veremos como implementar rotinas de validações em um projeto Windows Application e ASP.NET. Veremos também, como utilizar o MaskedTextBox do Windows Application para que os campos de CPF e CNPJ sejam apresentados com seus devidos traços, pontos e barras (formatação).

Nova Solução

Vamos criar uma solução vazia para implementar nossos exemplos. Abra o seu Visual Studio 2005 e acesse o menu File>New>Project. Veja, como mostra a Figura 1, que para criarmos uma solução vazia precisamos acessar Other Project Types>Visual Studio Solutions e escolher Blank Solution. Em Name digite um nome qualquer e clique em OK.

Nova solução vazia - validação de CPF e CNPJ

Figura 1. Criando uma solução vazia no Visual Studio 2005

Novo projeto Class Library

Vamos criar um projeto do tipo Class Library para implementar as rotinas de validações. Criaremos em um projeto separado para que possamos utilizá-las, tanto em Windows Application, quanto no ASP.NET.

No Solution Explorer, veja que temos a solução vazia, então clique com o botão direito e escolha a opção Add>New Project (Figura 2).

Criando um novo projeto - validação de CPF e CNPJ

Figura 2. Criando um projeto na solução

Neste artigo os exemplos serão demonstrados em C#, portanto vá até a opção Visual C# e escolha Class Library. Em Name digite “ValidacoesLibrary” e clique em OK. Com o projeto criado, clique com o botão direito sobre o mesmo no Solution Explorer e escolha a opção Add>Class.

Informe “Validacoes.cs” no nome da classe e clique no botão Add. Estamos criando a classe para o desenvolvimento das rotinas de validação.

Criando o método de validação do CPF

Vamos começar codificando o método que será utilizado para a validação do CPF. Como mostra a Listagem 1, criamos um método estático chamado ValidaCPF.

Listagem 1. Método ValidaCPF para verificar a validade de CPF

namespace ValidacoesLibrary

{

    public class Validacoes

    {

        public static bool ValidaCPF(string vrCPF)

        {

            string valor = vrCPF.Replace(".", "");

            valor = valor.Replace("-", "");

 

            if (valor.Length != 11)

                return false;

 

            bool igual = true;

            for (int i = 1; i < 11 && igual; i++)

                if (valor[i] != valor[0])

                    igual = false;

 

            if (igual || valor == "12345678909")

                return false;

 

            int[] numeros = new int[11];

 

            for (int i = 0; i < 11; i++)

              numeros[i] = int.Parse(

                valor[i].ToString());

 

            int soma = 0;

            for (int i = 0; i < 9; i++)

                soma += (10 - i) * numeros[i];

 

            int resultado = soma % 11;

 

            if (resultado == 1 || resultado == 0)

            {

                if (numeros[9] != 0)

                    return false;

            }

            else if (numeros[9] != 11 - resultado)

                return false;

 

            soma = 0;

            for (int i = 0; i < 10; i++)

                soma += (11 - i) * numeros[i];

 

            resultado = soma % 11;

 

            if (resultado == 1 || resultado == 0)

            {

                if (numeros[10] != 0)

                    return false;

            }

            else

                if (numeros[10] != 11 - resultado)

                    return false;

 

            return true;

        }

    }

}

Esse método recebe como parâmetro uma string que será o CPF a ser verificado. O método também retorna um valor do tipo bool, portanto, caso o CPF seja válido o método retornará true, e caso não seja retornará false.

Não vamos entrar nos detalhes dos cálculos realizados para a validação, um ponto importante é que antes de iniciar a validação, estamos retirando os dígitos de máscara (pontos e traços) através do método Replace que temos em qualquer string.

Criando o método de validação do CNPJ

E agora vamos criar o método de validação de CNPJ. Basta incluir em nossa classe o código da Listagem 2.

Listagem 2. Método ValidaCNPJ para verificar a validade de CNPJ

public static bool ValidaCNPJ(string vrCNPJ)

{

string CNPJ = vrCNPJ.Replace(".", "");

      CNPJ = CNPJ.Replace("/", "");

      CNPJ = CNPJ.Replace("-", "");

 

      int[] digitos, soma, resultado;

      int nrDig;

      string ftmt;

      bool[] CNPJOk;

 

      ftmt = "6543298765432";

      digitos = new int[14];

      soma = new int[2];

      soma[0] = 0;

      soma[1] = 0;

      resultado = new int[2];

      resultado[0] = 0;

      resultado[1] = 0;

      CNPJOk = new bool[2];

      CNPJOk[0] = false;

      CNPJOk[1] = false;

 

      try

      {

          for (nrDig = 0; nrDig < 14; nrDig++)

            {

                digitos[nrDig] = int.Parse(

                    CNPJ.Substring(nrDig, 1));

                  if (nrDig <= 11)

soma[0] += (digitos[nrDig] *

  int.Parse(ftmt.Substring(

  nrDig + 1, 1)));

                  if (nrDig <= 12)

soma[1] += (digitos[nrDig] *

  int.Parse(ftmt.Substring(

  nrDig, 1)));

}

 

            for (nrDig = 0; nrDig < 2; nrDig++)

            {

                resultado[nrDig] = (soma[nrDig] % 11);

                  if ((resultado[nrDig] == 0) || (

                       resultado[nrDig] == 1))

                       CNPJOk[nrDig] = (

                       digitos[12 + nrDig] == 0);

                  else

CNPJOk[nrDig] = (

digitos[12 + nrDig] == (

11 - resultado[nrDig]));

            }

return (CNPJOk[0] && CNPJOk[1]);

}

      catch

      {

          return false;

      }

}

Veja que a dinâmica do ValidaCNPJ é idêntica a do ValidaCPF. Estamos recebendo uma string que terá o CNPJ a ser validado, em seguida retiramos todos os caracteres referentes à máscara do CNPJ e realizamos os cálculos necessários para atestar a validade do código. Caso o código seja válido, o método retornará true, e caso não seja retornará false.

Você pode encontrar essas rotinas de validação na internet, inclusive com algumas variações. Fique a vontade para utilizar suas próprias versões, inclusive você pode implementar outros métodos que validam outros códigos que possuam rotinas de validação.

O importante é que a rotina esteja codificada para receber uma string e retornar um valor do tipo bool. Para finalizarmos o projeto Class Library, clique com o botão direito sobre o projeto e escolha a opção Build. Se tudo estiver correto o Build será concluído com sucesso.

Novo projeto Windows Application

Vamos criar o projeto Windows Application onde consumiremos as rotinas de validações de CPF e CNPJ. Volte ao Solution Explorer e clique com o botão direito sobre a solução msdnValidacoes. Escolha a opção Add>New Project, em Visual C# selecione Windows Application, informe “ValidacoesWindows” em Name e clique em OK.

Vamos desenhar o formulário para a validação dos códigos. Inclua dois Labels, dois MaskedTextBox e dois Buttons. Seu formulário deve estar parecido com o demonstrado na Figura 3.

Formulário para validação de CPF e CNPJ

Figura 3. Formulário para validação de CPF e CNPJ em Windows Forms

Veja que ao invés de utilizarmos o TextBox, estamos utilizando o MaskedTextBox. Veremos como é fácil implementar máscaras com a utilização desse controle. Antes, é importante você renomear os controles Buttons e MaskedTextBoxes.

Neste exemplo foram utilizados os seguintes nomes: “mskCPF” e “mskCNPJ” para os MaskedTextBox, e “btnValidaCPF” e “btnValidaCNPJ” para os Buttons.

MaskedTextBox

O MaskedTextBox é bem simples de configurar. Veja na Figura 4, que o controle tem uma Smart Tag que dá acesso rápido à opção Set Mask.

Smart Tag do MaskedTextBox

Figura 4. Smart Tag do MaskedTextBox

Clique em Set Mask e veja que é aberta uma janela chamada Input Mask, onde é possível configurar a máscara que o controle apresentará ao usuário. Observe que o controle já possui um conjunto de máscaras pré-definidas que podem ser usadas, como Phone number, Zip Code, Short date, etc.

Para o CPF precisaremos customizar uma nova máscara, portanto, como mostra a Figura 5, escolha a opção e em Mask digite “999,999,999-99”.

Configurando máscara para CPF

Figura 5. Configurando máscara para CPF

Veja que utilizamos o digito “9” para representação de números. Observe também que para representarmos o ponto (.) da máscara do CPF, usamos a vírgula (,). Em seguida basta clicar em OK. Faça a mesma coisa para o CNPJ (mskCNPJ), configurando a máscara, para: “99,999,999/9999-99”.

Utilizando as rotinas de validação

Para utilizarmos as rotinas de validação, precisamos primeiramente adicionar uma referência ao projeto. Para isso, no Solution Explorer, clique com o botão direito sobre o projeto ValidacoesWindows e escolha a opção Add Reference.

Escolha a aba Projects, marque o projeto ValidacoesLibrary e clique em OK. Com isso já estamos aptos a utilizar a classe Validacoes no projeto Windows Application. De volta ao formulário, dê um duplo clique no btnValidaCPF. Vamos importar o namespace ValidacoesLibrary, incluindo a seguinte linha na área de importação:

array2

Em seguida, inclua o código da Listagem 3 no evento Click do btnValidaCPF. Veja que estamos chamando o ValidaCPF sem a necessidade de instanciarmos um objeto da classe Validacoes. Isso é possível, pois o método foi declarado como static.

Listagem 3. Evento Click do btnValidaCPF

private void btnValidaCPF_Click(

  object sender, EventArgs e)

{

if (Validacoes.ValidaCPF( mskCPF.Text ))

         MessageBox.Show("CPF Válido!");

else

         MessageBox.Show("CPF Inválido!");

}

Volte ao formulário e dê um duplo clique sobre o btnValidaCNPJ. Inclua agora o código da Listagem 4 no evento Click do btnValidaCNPJ. Veja que o código é praticamente o mesmo do evento anterior, a diferença é que aqui estamos chamando o ValidaCNPJ, que também é estático.

Listagem 4. Evento Click do btnValidaCNPJ

private void btnValidaCNPJ_Click(

  object sender, EventArgs e)

{

if (Validacoes.ValidaCNPJ(mskCNPJ.Text))

         MessageBox.Show("CNPJ Válido!");

else

         MessageBox.Show("CNPJ Inválido!");

}

Veja que esses eventos foram codificados apenas para exemplificar a chamada dos métodos que validarão o CPF e CNPJ. Em uma aplicação real, se o CPF ou CNPJ forem válidos não precisaríamos emitir uma mensagem ao usuário, apenas quando forem inválidos.

Vamos testar a aplicação Windows? Para isso, clique com o botão direito sobre o projeto ValidacoesWindows no Solution Explorer e escolha a opção Set as Startup Project. Em seguida, salve, compile e execute o projeto.

Veja (Figura 6), que estamos informando um número qualquer no campo CPF e clicando em Validar. A mensagem apresentada indica que o CPF é inválido. Faça um teste informando um CPF válido no campo. Em seguida, também faça um teste com o CNPJ, utilizando um código válido e outro não válido.

Testando a validação do CPF

Figura 6. Testando a validação do CPF

Novo Web Site

Para finalizar, vamos fazer as chamadas das rotinas de validação em um Web Site ASP.NET. Volte ao Solution Explorer e clique com o botão direito sobre msdnValidacoes. Escolha a opção Add>New Web Site e selecione ASP.NET Web Site.

Em Location informe a pasta onde o WebSite será criado, de preferência uma pasta que esteja dentro da nossa solução. Neste exemplo, a pasta que foi utilizada em Location é: C:\Fontes\Validacoes\ValidacoesWeb. Em Language escolha C#, e em seguida clique em OK.

Na página Default.aspx vamos desenhar um formulário para a validação do CPF e CNPJ, muito parecido com o que fizemos no projeto Windows Application. Como mostra a Figura 7, inclua uma tabela com duas linhas e três colunas. Em seguida inclua três Labels, dois TextBoxes e dois Buttons, da forma como estão dispostos na Figura 7.

Testando a validação do CPF

Figura 7. Testando a validação do CPF

Os dois TextBoxes devem se chamar “txtCPF” e “txtCNPJ” e os dois Buttons: “btnValidaCPF” e “btnValidaCNPJ”. O Label que está em vermelho, abaixo da tabela, tem o nome de “lblMsg”.

Vamos agora adicionar uma referência ao projeto Class Library, para podermos utilizar as rotinas de validação, assim como fizemos no projeto Windows Appication. O procedimento é o mesmo, basta clicar com o botão direito sobre o WebSite e escolher a opção Add Reference. Na janela escolha a aba Projects, marque o projeto ValidacoesLibrary e clique em OK.

Volte à Default.aspx, dê um duplo clique no btnValidaCPF. Vamos importar o namespace ValidacoesLibrary, incluindo a seguinte linha na área de importação:

array2

Em seguida, inclua o código da Listagem 5 no evento Click do btnValidaCPF. Veja que o código é praticamente idêntico ao que fizemos no projeto WindowsApplication. A diferença é que aqui estamos apresentando a mensagem em um Label e não em um MessageBox como fizemos antes.

Listagem 5. Evento Click do btnValidaCPF do WebSite

protected void btnValidaCPF_Click(

  object sender, EventArgs e)

{

    if (Validacoes.ValidaCPF(txtCPF.Text))

       lblMsg.Text = "CPF Válido!";

   else

       lblMsg.Text = "CPF Inválido!";

}

Para finalizar, dê um duplo clique no botão btnValidaCNPJ, e inclua o código da Listagem 6.

Listagem 6. Evento Click do btnValidaCNPJ do WebSite

protected void btnValidaCNPJ_Click(

  object sender, EventArgs e)

{

   if (Validacoes.ValidaCNPJ(txtCNPJ.Text))

      lblMsg.Text = "CNPJ Válido!";

   else

      lblMsg.Text = "CNPJ Inválido!";

}

Para testarmos, primeiramente clique com o botão direito sobre o WebSite e escolha a opção Set as StartUp Project. Em seguida, salve, compile e execute o projeto. Veja na Figura 8 que temos o mesmo comportamento da aplicação Windows que fizemos anteriormente, a diferença é que essa é uma aplicação Web, e as mensagens são apresentadas em um Label. Assim como fizemos no teste anterior, faça aqui os testes com CPFs e CNPJs válidos e não válidos.

Testando a validação do CPF no Web Site
Figura 8. Testando a validação do CPF no Web Site

Conclusão

Como pudemos ver é muito simples implementar rotinas de validações. O ideal é sempre manter as rotinas em um projeto Class Library separado, para que seja possível reutilizar em diversos projetos, como fizemos no projeto Windows e no Web.

Vimos também que o MaskedTextBox é um ótimo recurso para implementarmos máscaras em projetos Windows Application. Infelizmente ainda não temos esse recurso em projetos ASP.NET. Porém o ASP.NET Ajax está aí em desenvolvimento, e em breve teremos boas soluções para esse problema na Web.

Neste artigo fizemos um exemplo com as rotinas de validação de CPF e CNPJ, mas essa estrutura serve para validarmos qualquer código que tenha sua rotina de validação, portanto basta codificá-las. Grande abraço e até a próxima!

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?