none
Validação de CPF - Sem precisar de clicar em Botão RRS feed

  • Pergunta

  • Olá, queria validar CPF em um textbox depois que a pessoa digitar o numero sem precisar de clicar em algum botão, alguem tem algum tutorial ou mim dar alguma dicas!
    sábado, 11 de outubro de 2014 19:58

Respostas

  • Você esta instanciando de forma correta e chamando a função de forma errada, se baseando em seu codigo fica assim:

    ValidaCpf valida = new ValidaCpf();
    if(maskTextBox.lenght>11)
    {
    //Você declarou dentro de sua classe com esse nome fgCpfChech e não validaCpf()
      valida.fgCpfCheck(maskTextBox.Text)
    }


    domingo, 12 de outubro de 2014 18:50
  • Darlan,

    vc usou o codigo do site que te indiquei,mas note uma coisa, naquele exemplo o mesmo textbox é usado para validar cpf, cnpj e pis.

    No exemplo é feita um check para dizer qual é o validador ( pis , cpf ou cnpj)

    public static bool fgCpfCheck(string psCpf)

    vc vai usar essa class validadando mais algum campo no seu projeto ?

    se não faz assim.

     private void maskedTextBox1_TextChanged(object sender, EventArgs e)
            {
                Valida(maskedTextBox1.Text);
            }

     public bool Valida(string cpf)
            {
    
                int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
    
                int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
    
                string tempCpf;
    
                string digito;
    
                int soma;
    
                int resto;
    
                cpf = cpf.Trim();
    
                cpf = cpf.Replace(".", "").Replace("-", "");
    
                if (cpf.Length != 11)
    
                    return false;
    
                tempCpf = cpf.Substring(0, 9);
    
                soma = 0;
    
                for (int i = 0; i < 9; i++)
    
                    soma += int.Parse(tempCpf[i].ToString()) * multiplicador1[i];
    
                resto = soma % 11;
    
                if (resto < 2)
    
                    resto = 0;
    
                else
    
                    resto = 11 - resto;
    
                digito = resto.ToString();
    
                tempCpf = tempCpf + digito;
    
                soma = 0;
    
                for (int i = 0; i < 10; i++)
    
                    soma += int.Parse(tempCpf[i].ToString()) * multiplicador2[i];
    
                resto = soma % 11;
    
                if (resto < 2)
    
                    resto = 0;
    
                else
    
                    resto = 11 - resto;
    
                digito = digito + resto.ToString();
    
                return cpf.EndsWith(digito);
    
            }

    domingo, 12 de outubro de 2014 17:22

Todas as Respostas

  • Boa noite Darlan,

    É só você utilizar o evento TextChanged. Esse evento é disparado quando o texto do componente é alterado.

    http://msdn.microsoft.com/en-us/library/system.windows.forms.control.textchanged%28v=vs.110%29.aspx


    Para você entender melhor, você fará algo similar com o exemplo abaixo.

    // Evento disparado quando o contéudo do TextBox é alterado.
    private void txtCPF_TextChanged(object sender, EventArgs e)
    {
       try
       {
          // Validação do CPF.
          ValidarCPF(txtCPF.Text.Trim());
       }
       catch (Exception ex)
       {
          // Em caso de não conseguir validar o CPF, é exibido a mensagem ao usuário.
          MessageBox.Show("Não foi possível validar o CPF. Motivo técnico: \n\n" + ex.Message);
       }
    }


    Para essa ação funcionar, é só relacionar o nome do método com o evento TextChanged do TextBox. Para isso, basta clicar com o botão direito do mouse em cima do TextBox e escolher a opção Properties. Feito isso, irá aparecer uma caixa ao lado direito, clique sobre em cima do ícone em forma de raio e navegue até a opção TextChanged, conforme imagem abaixo.

    TextChanged

    Abs.



    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    sábado, 11 de outubro de 2014 21:17
  • Darlan,

    o cod de validação de cpf vc já tem? existe alguma maskara nesse textbox?

    Use o evento Leave do textbox. neste evento quando o usuário usar o tab ou clicar em outro campo seria feita a validação.

     private void textbox1_Leave(object sender, EventArgs e)

    {

           validarCPF();

    }

    domingo, 12 de outubro de 2014 02:49
  • Obrigado pela resposta, 

    Só que quando eu coloco para chamar a classe ValidarCPF(); está dando erro você podeira mim ajudar nesse erro! Estou usando o MasketTexBox

    veja na imagem abaixo,:


    domingo, 12 de outubro de 2014 14:37
  • Quando insiro o código que vc mim indicou da o seguinte erro na hora de chamar a classe ValidarCPF

    Poderia mim ajudar corrigir esse error.

    domingo, 12 de outubro de 2014 14:46
  • if(textBox.Lenght>=11)
    {
       ValidaCpf();
    }

    no evento verifica se a quantidade de caracteres inseridas chegou ao esperado e execute a sua função de validação do CPF.

    Se te ajudou marca como resposta

    domingo, 12 de outubro de 2014 15:03
  • Darlan,

    este artigo vai lhe ajudar.

    http://www.macoratti.net/11/09/c_val1.htm

    qq duvida posta novamente.

    att, wsti.

    domingo, 12 de outubro de 2014 15:12
  • Darlan,

    Eu recomendo você usar o evento TextChanged ao invés do evento Leave. Explicação:

    • O evento TextChanged só é disparado quando o conteúdo do TextBox é alterado, fazendo a validação daquele conteúdo apenas uma vez;
    • O evento Leave é disparado toda vez que o o foco é retirado do TextBox, fazendo a validação toda vez que o usuário passar pelo componente. Com isso, você fará uso desnecessário de CPU e poderá diminuir o desempenho da aplicação, causando uma lentidão a mais para o usuário.

    Respondendo a sua pergunta, eu acho que o erro deve estar na geração da instância da classe FRMSGEI. Verifique se você está criando a instância da maneira abaixo.

    FRMSGEI nomeVarialvel = new FRMSGEI();

    O segundo erro é que você está utilizando o nome do componente p_CPFTextBox, mas esse nome não está relacionado com nenhum componente. Verifique se esse componente existe mesmo na tela.

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    domingo, 12 de outubro de 2014 15:16
  • if(textBox.Lenght>=11)
    {
       ValidaCpf();
    }

    no evento verifica se a quantidade de caracteres inseridas chegou ao esperado e execute a sua função de validação do CPF.

    Se te ajudou marca como resposta

    Obrigado pela ajuda, mas o erro está acontecendo na hora que vai chamar a classe ValidaCpf(); dá a seguinte mensagem de error: Error The name 'ValidaCpf' does not exist in the current context
    domingo, 12 de outubro de 2014 15:18
  • darlan,

    a class que vc criou foi nomeada como ValidaCpf ?

    domingo, 12 de outubro de 2014 15:39
  • darlan,

    a class que vc criou foi nomeada como ValidaCpf ?

    Sim o nome da class está certo fiz outra correção mas continua o mesmo error; 

    Error 1 'VALIDARCPF.ValidaCpf' is a 'type' but is used like a 'variable'

    domingo, 12 de outubro de 2014 15:50
  • posta o codigo para podermos te ajudar.
    domingo, 12 de outubro de 2014 15:53
  • posta o codigo para podermos te ajuda

    Aqui está o Codigo da Classe

            

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace VALIDARCPF
    {
        class ValidaCpf
        {
            public static bool fgCpfCheck(string psCpf)
            {
                string vsCpf = psCpf.Replace(".", "");
                vsCpf = vsCpf.Replace("-", "");

                if (vsCpf.Length != 11)
                    return false;

                bool vbIgual = true;
                for (int i = 1; i < 11 && vbIgual; i++)
                    if (vsCpf[i] != vsCpf[0])
                        vbIgual = false;

                if (vbIgual || vsCpf == "12345678909")
                    return false;

                int[] vaNumeros = new int[11];

                for (int i = 0; i < 11; i++)
                    vaNumeros[i] = int.Parse(
                    vsCpf[i].ToString());

                int vnSoma = 0;
                for (int i = 0; i < 9; i++)
                    vnSoma += (10 - i) * vaNumeros[i];

                int vnResultado = vnSoma % 11;

                if (vnResultado == 1 || vnResultado == 0)
                {
                    if (vaNumeros[9] != 0)
                        return false;
                }
                else if (vaNumeros[9] != 11 - vnResultado)
                    return false;

                vnSoma = 0;
                for (int i = 0; i < 10; i++)
                    vnSoma += (11 - i) * vaNumeros[i];

                vnResultado = vnSoma % 11;

                if (vnResultado == 1 || vnResultado == 0)
                {
                    if (vaNumeros[10] != 0)
                        return false;
                }
                else
                    if (vaNumeros[10] != 11 - vnResultado)
                        return false;

                return true;
            }
        }
    }

    AE AQUI O CODIGOS DO FORM

    namespace VALIDARCPF
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
            {
               
            }

            private void maskedTextBox1_TextChanged(object sender, EventArgs e)
            {
                ValidaCpf();
            }
        }
    }

    domingo, 12 de outubro de 2014 15:57
  • Aqui está o projeto feito no Visual Studio 2010 http://www.4shared.com/rar/P-68JSN8ba/VALIDARCPF.html

    domingo, 12 de outubro de 2014 16:04
  • class ValidaCpf

    alterar para

    public static class ValidaCpf


    • Editado Wsti domingo, 12 de outubro de 2014 16:17 erro digitação
    domingo, 12 de outubro de 2014 16:17
  • class ValidaCpf

    alterar para

    public static class ValidaCpf


    Eu mudei o jeito que você pediu cominua do mesmo jeito dando erro!

    Aqui está o projeto feito no Visual Studio 2010 http://www.4shared.com/rar/P-68JSN8ba/VALIDARCPF.html


    domingo, 12 de outubro de 2014 16:27
  • Darlan,

    vc usou o codigo do site que te indiquei,mas note uma coisa, naquele exemplo o mesmo textbox é usado para validar cpf, cnpj e pis.

    No exemplo é feita um check para dizer qual é o validador ( pis , cpf ou cnpj)

    public static bool fgCpfCheck(string psCpf)

    vc vai usar essa class validadando mais algum campo no seu projeto ?

    se não faz assim.

     private void maskedTextBox1_TextChanged(object sender, EventArgs e)
            {
                Valida(maskedTextBox1.Text);
            }

     public bool Valida(string cpf)
            {
    
                int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
    
                int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
    
                string tempCpf;
    
                string digito;
    
                int soma;
    
                int resto;
    
                cpf = cpf.Trim();
    
                cpf = cpf.Replace(".", "").Replace("-", "");
    
                if (cpf.Length != 11)
    
                    return false;
    
                tempCpf = cpf.Substring(0, 9);
    
                soma = 0;
    
                for (int i = 0; i < 9; i++)
    
                    soma += int.Parse(tempCpf[i].ToString()) * multiplicador1[i];
    
                resto = soma % 11;
    
                if (resto < 2)
    
                    resto = 0;
    
                else
    
                    resto = 11 - resto;
    
                digito = resto.ToString();
    
                tempCpf = tempCpf + digito;
    
                soma = 0;
    
                for (int i = 0; i < 10; i++)
    
                    soma += int.Parse(tempCpf[i].ToString()) * multiplicador2[i];
    
                resto = soma % 11;
    
                if (resto < 2)
    
                    resto = 0;
    
                else
    
                    resto = 11 - resto;
    
                digito = digito + resto.ToString();
    
                return cpf.EndsWith(digito);
    
            }

    domingo, 12 de outubro de 2014 17:22
  • Você esta instanciando de forma correta e chamando a função de forma errada, se baseando em seu codigo fica assim:

    ValidaCpf valida = new ValidaCpf();
    if(maskTextBox.lenght>11)
    {
    //Você declarou dentro de sua classe com esse nome fgCpfChech e não validaCpf()
      valida.fgCpfCheck(maskTextBox.Text)
    }


    domingo, 12 de outubro de 2014 18:50