Usuário com melhor resposta
Validação de CPF

Pergunta
-
Boa noite pessoal.
Estou no inicio do primeiro módulo de meu curso e estamos aprendendo os primeiros passos em C#, estou tentando criar um programa de validação de CPF. Bom olhei alguns modelos na internet e estou tentando entender eles, todos praticamente estavam em Booliano, fiz algumas alterações no código convertendo ele, no entanto, nas 2 ultimas linhas do código não estou conseguindo a conversão apropriada, será que alguém consegue me ajudar??
Especificamente aqui ele está dando erro "return cpf.EndsWith(digito);"
Desde já muito obrigado.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
Begin:
Console.WriteLine("Digite o numero do CPF: ");
string cpf = Convert.ToString(Console.ReadLine());
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)
{
Console.WriteLine("Numero incorreto.");
goto Begin;
}
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);
Console.WriteLine("CPF " + cpf + " valido.");
}
}
}
Respostas
-
Olá Fabiano tudo bem?
Analisando rapidamente seu código eu posso apontar alguns problemas:
1 - Seu método Main é void, ou seja, não retorna nada. Porém, você tem um "return cpf.EndsWith(digito);" no final. Acho que você pode remover esta linha;
2 - Seu código não trata exceções, que são erros de execução. Por exemplo, tentar converter uma letra em um número. Neste caso se o usuário digitar um valor inválido pode gerar exceção. Para simplificar seu programa, você pode colocar todo seu código dentro de um try catch desta forma:
try
{
..código
}
catch (Exception)
{
Console.WriteLine("CPF inválido.");
}
3 - No código "string cpf = Convert.ToString(Console.ReadLine());", não é necessário colocar Convert.ToString, apenas "string cpf = Console.ReadLine();" pois ReadLine já retorna uma string e por isso não é necessário a conversão novamente para string;
Espero ter ajudado!
- Editado Róger Formagio Lopes terça-feira, 19 de setembro de 2017 10:45
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 22 de setembro de 2017 20:23
Todas as Respostas
-
Olá Fabiano tudo bem?
Analisando rapidamente seu código eu posso apontar alguns problemas:
1 - Seu método Main é void, ou seja, não retorna nada. Porém, você tem um "return cpf.EndsWith(digito);" no final. Acho que você pode remover esta linha;
2 - Seu código não trata exceções, que são erros de execução. Por exemplo, tentar converter uma letra em um número. Neste caso se o usuário digitar um valor inválido pode gerar exceção. Para simplificar seu programa, você pode colocar todo seu código dentro de um try catch desta forma:
try
{
..código
}
catch (Exception)
{
Console.WriteLine("CPF inválido.");
}
3 - No código "string cpf = Convert.ToString(Console.ReadLine());", não é necessário colocar Convert.ToString, apenas "string cpf = Console.ReadLine();" pois ReadLine já retorna uma string e por isso não é necessário a conversão novamente para string;
Espero ter ajudado!
- Editado Róger Formagio Lopes terça-feira, 19 de setembro de 2017 10:45
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 22 de setembro de 2017 20:23
-