none
C# - Validar apenas números.

    Pergunta

  • Olá! Estou aprendendo C# a mais ou menos 1 mês através da internet, e me deparei com um problema:

    Estou desenvolvendo um sistema de Gerenciamento de Video-Locadora, atualmente com o seguinte código:

     

    {

        class Program

        {

            static void Main(string[] args)

            {

                int LoopPrograma = 0;

     

                while (LoopPrograma >= 0)

                {

                    Console.Clear();

                    Console.WriteLine("VideoLocadora Piloto");

                    Console.WriteLine();

                    Console.WriteLine("Menu");

                    Console.WriteLine();

                    Console.WriteLine("1 Cadastro de Cliente");

                    Console.WriteLine("2 Cadastro de Filme");

                    Console.WriteLine("3 Locação");

                    Console.WriteLine("4 Devolução");

                    Console.WriteLine("5 Sair");

                    Console.WriteLine();

     

                    int Escolha = 0;

                    Escolha = int.Parse(Console.ReadLine());

     

                    if (Escolha == 1)

                    {

                        Console.Clear();

     

                        string CPF;

                        int RunnerCPF = 0;

                        int Soma = 0;

                        int RestoSoma = 0;

                        string Nome;

     

                        Console.WriteLine("Cadastro de Cliente - Nome:");

                        Nome = Console.ReadLine();

                        Console.WriteLine();

     

                        Console.WriteLine("Cadastro de Cliente - CPF (Apenas números):");

                        CPF = Console.ReadLine();

                        Console.WriteLine();

     

     

                        if (CPF.Length != 11)

                        {

                            Console.WriteLine("Cadastro de Cliente - O Campo CPF deve conter 11 digitos");

                            Console.WriteLine();

                            Console.WriteLine("Cadastro de Cliente - Cadastro não efetuado.");

                            Console.ReadLine();

     

                        }

     

                        else

                        {

     

                            bool Validez;

     

                            for (RunnerCPF = 0; RunnerCPF < 9; RunnerCPF++)

                            {

                                Soma += int.Parse(CPF[RunnerCPF].ToString()) * (RunnerCPF + 1);

                            }

     

                            RestoSoma = Soma % 11;

     

                            if (RestoSoma == int.Parse(CPF[9].ToString()))

                            {

                                Soma = 0;

     

                                for (RunnerCPF = 0; RunnerCPF < 10; RunnerCPF++)

                                {

                                    Soma += (int.Parse(CPF[RunnerCPF].ToString()) * (RunnerCPF));

                                }

     

                                RestoSoma = Soma % 11;

     

                                if (RestoSoma == (int.Parse(CPF[10].ToString())))

                                { Validez = true; }

     

                                else

                                { Validez = false; }

     

                            }

     

                            else

                            { Validez = false; }

     

                            if (Validez == true)

                            {

                                Console.Clear();

                                Console.WriteLine("Cadastro de Cliente - Sucesso");

                                Console.WriteLine();

                                Console.WriteLine("Cadastro de Cliente - Registro número ");

                            }

     

                            else

                            {

                                Console.Clear();

                                Console.WriteLine("Cadastro de Cliente - CPF inválido");

                                Console.WriteLine();

                                Console.WriteLine("Cadastro de Cliente - Cadastro não Efetuado");

                            }

     

                            Console.ReadLine();

                        }

                    }

     

                    else if (Escolha == 5)

                    {

                        LoopPrograma = -2;

                    }

     

                    else

                    {

                        Console.Clear();

                        Console.WriteLine("Opção Inválida!");

                        Console.ReadLine();

                    }

     

                        LoopPrograma++;

                }

     

     

            }

        }

    }

     

    No campo de CPF, estou tentando colocar um "validador" para, quando coloca-se algum tipo de letra, ele volta com erro, parecido com oque fiz no != 11, alguem sabe algum caminho que eu consiga entender? por que não estou tendo sucesso, pois estou começando agora sem nenhuma noção de programação.

     

    Muito Obrigado!

    segunda-feira, 6 de fevereiro de 2012 15:22

Respostas

  • Consegui pessoal!

    Usando Try e Catch, ficou assim:

     

    if (CPF.Length != 11)

                        {

                            Console.Clear();

     

                            Console.WriteLine("Cadastro de Cliente - O Campo CPF deve conter 11 digitos");

                            Console.WriteLine();

                            Console.WriteLine("Cadastro de Cliente - Cadastro não efetuado.");

                            Console.ReadLine();

     

                        }

     

                        else

     

                            try

                            {

     

                                {

     

                                    bool Validez;

     

                                    for (RunnerCPF = 0; RunnerCPF < 9; RunnerCPF++)

                                    {

                                        Soma += int.Parse(CPF[RunnerCPF].ToString()) * (RunnerCPF + 1);

                                    }

     

                                    RestoSoma = Soma % 11;

     

                                    if (RestoSoma == int.Parse(CPF[9].ToString()))

                                    {

                                        Soma = 0;

     

                                        for (RunnerCPF = 0; RunnerCPF < 10; RunnerCPF++)

                                        {

                                            Soma += (int.Parse(CPF[RunnerCPF].ToString()) * (RunnerCPF));

                                        }

     

                                        RestoSoma = Soma % 11;

     

                                        if (RestoSoma == (int.Parse(CPF[10].ToString())))

                                        { Validez = true; }

     

                                        else

                                        { Validez = false; }

     

                                    }

     

                                    else

                                    { Validez = false; }

     

                                    if (Validez == true)

                                    {

                                        Console.Clear();

                                        Console.WriteLine("Cadastro de Cliente - Sucesso");

                                        Console.WriteLine();

                                        Console.WriteLine("Cadastro de Cliente - Registro número ");

                                    }

     

                                    else

                                    {

                                        Console.Clear();

                                        Console.WriteLine("Cadastro de Cliente - CPF inválido");

                                        Console.WriteLine();

                                        Console.WriteLine("Cadastro de Cliente - Cadastro não Efetuado");

                                    }

     

                                    Console.ReadLine();

                                }

                            }

                            catch

                            {

                                Console.Clear();

     

                                Console.WriteLine("Cadastro de Cliente - O CPF deve conter apenas números");

                                Console.WriteLine();

                                Console.WriteLine("Cadastro de Cliente - Cadastro não efetuado");

                                Console.ReadLine();

                            }

    }

     

     

    Está funcionando aqui, desculpe pelas perguntas tolas, e obrigado a todos, esses links me ajudaram muito =)

    Ficou uma gambiarra, mas acredito q o objetivo seja exercitar a lógica por enquanto, vou dando meus pulos hehe ;)


    • Editado GuiRibeiro segunda-feira, 6 de fevereiro de 2012 18:35
    • Marcado como Resposta Harley AraujoOwner quarta-feira, 8 de fevereiro de 2012 13:20
    segunda-feira, 6 de fevereiro de 2012 18:31

Todas as Respostas

  • Segue exemplo:

    string email = txtEmail.Text;
     
    Regex rg = new Regex(@"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$");
     
    if (rg.IsMatch( email ) )
    {
          Response.Write("Email Valido!");
    }
    else
    {
          Response.Write("Email Inválido!");
    }


    CPF
    ^\d{3}\.\d{3}\.\d{3}-\d{2}$
     
    Telefone
    ^\(\d{2}\)\d{4}-\d{4}$
    
    CEP
    ^\d{5}-\d{3}$


    Alguns links para entendimento:

    http://msdn.microsoft.com/pt-br/library/system.text.regularexpressions.regex.aspx

    http://msdn.microsoft.com/en-us/library/2k3te2cs%28v=vs.80%29.aspx

     


    Consultoria .NET

    ANALISTA DESENVOLVEDOR
    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.
    segunda-feira, 6 de fevereiro de 2012 15:26
  • Ao longo desta manha achei muitas respostas em outros blogs parecidas, porém eu não estou conseguindo entender sabe? não pretendo apenas copiar e colar sem saber oque estou fazendo ...

    Relembrando que não sei NADA =/

    Então, eu não entendi oque é "Regex" é alguma outra variavel?

    ^\d{3}\.\d{3}\.\d{3}-\d{2}$?? oque quer dizer?

    isso é a pontuação?? e sobre apenas números?

    segunda-feira, 6 de fevereiro de 2012 15:38
  • Boa tarde.

    Por isso, logo abaixo coloquei alguns links para voce estudar, mas segue:

    Primeiro vamos às terminologias, o termo “expressão regular” é um pouco extensa, então a partir de agora vamos nos referir como ER. Um termo que você pode achar estranho é o “casar” (match) que neste caso não quer dizer juntar em laços matrimoniais com outra pessoa e sim a ação de bater, conferir, combinar, igualar, encontrar, encaixar e equiparar. E para completar essa seção temos o “padrão” (pattern) que é o objetivo que queremos alcançar ao escrever uma ER, casar um padrão esse padrão pode ser uma palavra, frase, linha, ou seja, o que quer que precise ser casado com nossa ER.

    Para que servem as ERs?  Para dizer algo abrangente, quando definido seu padrão você tem uma lista finita ou não de possibilidade de casamento, por exemplo, a ER “[crv]aio” que pode casar com “caio”, ”raio”e “vaio” essa lista abrange especificamente essas três palavras somente.

    Podemos utilizar ER para validar o formato do valor informado pelo usuário em um determinado campo, por exemplo, data, CPF, CEP, telefone, numero IP e tudo que você quiser verificar se está no formado que sua ER espera.

    Referencia:

    http://www.devmedia.com.br/post-17709-Regular-Expressions-Em-C-Parte-1.html


    Consultoria .NET

    ANALISTA DESENVOLVEDOR
    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.
    segunda-feira, 6 de fevereiro de 2012 15:41
  • Gui dei uma adaptada, veja se te ajuda:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Diagnostics;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            /// <summary>
            /// Método que valida CPF
            /// </summary>
            /// <param name="cpf"></param>
            /// <returns></returns>
            public static bool ValidarCPF(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);
            }
    
            static void Main(string[] args)
            {
                int LoopPrograma = 0;
    
                while (LoopPrograma >= 0)
                {
                    Console.Clear();
                    Console.WriteLine("VideoLocadora Piloto");
                    Console.WriteLine();
                    Console.WriteLine("Menu");
                    Console.WriteLine();
                    Console.WriteLine("1 Cadastro de Cliente");
                    Console.WriteLine("2 Cadastro de Filme");
                    Console.WriteLine("3 Locação");
                    Console.WriteLine("4 Devolução");
                    Console.WriteLine("5 Sair");
                    Console.WriteLine();
    
                    int Escolha = 0;
                    Escolha = int.Parse(Console.ReadLine());
    
                    if (Escolha == 1)
                    {
                        Console.Clear();
    
                        string CPF;
                        string Nome;
    
                        Console.WriteLine("Cadastro de Cliente - Nome:");
                        Nome = Console.ReadLine();
                        Console.WriteLine();
    
                        Console.WriteLine("Cadastro de Cliente - CPF:\n\t\t    - Apenas números\n\t\t    - Deve conter 11 digitos");
                        CPF = Console.ReadLine();
                        Console.WriteLine();
    
                        bool validacao = true;
    
                        while (validacao)
                        {
                            if (ValidarCPF(CPF) == true)
                            {
                                Console.Clear();
                                Console.WriteLine("Cadastro de Cliente - Sucesso");
                                Console.WriteLine();
                                Console.WriteLine("Cadastro de Cliente - Registro número ");
    
                                validacao = false;
                            }
                            else
                            {
                                Console.WriteLine("CPF Invalido - Digite novamente:");
                                CPF = Console.ReadLine();
                                Console.WriteLine();
                            }
                        }
    
                        Console.ReadLine();
    
                    }
                    else if (Escolha == 5)
                    {
                        LoopPrograma = -2;
                    }
                    else
                    {
                        Console.Clear();
                        Console.WriteLine("Opção Inválida!");
                        Console.ReadLine();
                    }
    
                    LoopPrograma++;
                }
            }
        }
    }


     
    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    segunda-feira, 6 de fevereiro de 2012 16:15
  • Humm, muito obrigado, vou tentar refazer tudo aqui e entender, tá muito difícil entender ..

    Acho que tá me faltando lógica, e tem muitos códigos que desconheço ..

    Obrigado, mais tarde retorno o resultado ;)

    tempCpf = cpf.Substring(0, 9);

     

    substring quer dizer oque necessariamente? que os digitos serão de 0 à 9?

    • Editado GuiRibeiro segunda-feira, 6 de fevereiro de 2012 16:31
    segunda-feira, 6 de fevereiro de 2012 16:27
  • Humm, muito obrigado, vou tentar refazer tudo aqui e entender, tá muito difícil entender ..

    Acho que tá me faltando lógica, e tem muitos códigos que desconheço ..

    Obrigado, mais tarde retorno o resultado ;)

    Gui eu não tentei reinventar a roda, dei uma olhada neste thread sobre validação de CPF:

    http://social.msdn.microsoft.com/Forums/pt/vscsharppt/thread/1dbe81e6-c063-4ae5-ae1d-5643fb4b0e62 

     O método que foi postado no código acima, valida se o cpf possui 11 caracteres e é valido, atravez do algorítimo para validar o mesmo, veja este link que explica como algorítimo funciona:

    http://interformacao.wordpress.com/2007/10/01/algoritmo/  
    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    segunda-feira, 6 de fevereiro de 2012 16:33
  • Ahhh, já é um código pré definido? Oo'

    Cara eu passei uma semana tentando entender esse código, e ainda não consegui entender totalmente por que tem que bater essas divisões ..

    agora faz sentido ..

    e já havia lido essa primeira página ;) Obrigado Vitor!
    • Editado GuiRibeiro segunda-feira, 6 de fevereiro de 2012 16:48
    segunda-feira, 6 de fevereiro de 2012 16:47
  • Gui,  vc está aprendendo C# há mais ou menos um mês, mas já sabe outras linguagens de programção não é. Por se não sabe, acho que vc. deveria ir mais devagar e aprender o básico, mas veja bem, isso se vc. é leigo .

     

     

    segunda-feira, 6 de fevereiro de 2012 17:07
  • é meu primeiro contato com programação, eu passei por capítulos de arrays, variaveis, loops, e algumas coisinhas mais, seguindo as linhas que estou seguindo, com oque ja foi visto eu poderia fazer este gerenciador, para poder passar para orientado a objeto.

    Será que tá certo? 

    Ou estou sendo muito apressado mesmo?

    por que não paro de pensar nisso nem quando vou dormir, é mais viciante que álcool Oo'

     

    segunda-feira, 6 de fevereiro de 2012 17:17
  • Consegui pessoal!

    Usando Try e Catch, ficou assim:

     

    if (CPF.Length != 11)

                        {

                            Console.Clear();

     

                            Console.WriteLine("Cadastro de Cliente - O Campo CPF deve conter 11 digitos");

                            Console.WriteLine();

                            Console.WriteLine("Cadastro de Cliente - Cadastro não efetuado.");

                            Console.ReadLine();

     

                        }

     

                        else

     

                            try

                            {

     

                                {

     

                                    bool Validez;

     

                                    for (RunnerCPF = 0; RunnerCPF < 9; RunnerCPF++)

                                    {

                                        Soma += int.Parse(CPF[RunnerCPF].ToString()) * (RunnerCPF + 1);

                                    }

     

                                    RestoSoma = Soma % 11;

     

                                    if (RestoSoma == int.Parse(CPF[9].ToString()))

                                    {

                                        Soma = 0;

     

                                        for (RunnerCPF = 0; RunnerCPF < 10; RunnerCPF++)

                                        {

                                            Soma += (int.Parse(CPF[RunnerCPF].ToString()) * (RunnerCPF));

                                        }

     

                                        RestoSoma = Soma % 11;

     

                                        if (RestoSoma == (int.Parse(CPF[10].ToString())))

                                        { Validez = true; }

     

                                        else

                                        { Validez = false; }

     

                                    }

     

                                    else

                                    { Validez = false; }

     

                                    if (Validez == true)

                                    {

                                        Console.Clear();

                                        Console.WriteLine("Cadastro de Cliente - Sucesso");

                                        Console.WriteLine();

                                        Console.WriteLine("Cadastro de Cliente - Registro número ");

                                    }

     

                                    else

                                    {

                                        Console.Clear();

                                        Console.WriteLine("Cadastro de Cliente - CPF inválido");

                                        Console.WriteLine();

                                        Console.WriteLine("Cadastro de Cliente - Cadastro não Efetuado");

                                    }

     

                                    Console.ReadLine();

                                }

                            }

                            catch

                            {

                                Console.Clear();

     

                                Console.WriteLine("Cadastro de Cliente - O CPF deve conter apenas números");

                                Console.WriteLine();

                                Console.WriteLine("Cadastro de Cliente - Cadastro não efetuado");

                                Console.ReadLine();

                            }

    }

     

     

    Está funcionando aqui, desculpe pelas perguntas tolas, e obrigado a todos, esses links me ajudaram muito =)

    Ficou uma gambiarra, mas acredito q o objetivo seja exercitar a lógica por enquanto, vou dando meus pulos hehe ;)


    • Editado GuiRibeiro segunda-feira, 6 de fevereiro de 2012 18:35
    • Marcado como Resposta Harley AraujoOwner quarta-feira, 8 de fevereiro de 2012 13:20
    segunda-feira, 6 de fevereiro de 2012 18:31