Validar um CPF (Cadastro de Pessoas Físicas) no Brasil pode parecer simples, mas a realidade é que há muitos detalhes sutis que podem levar a erros se não forem tratados corretamente. A forma mais eficaz de garantir que seu código seja robusto e confiável é implementar um sistema de validação com tratamento de exceções. Isso não só evita que o programa falhe diante de entradas inválidas, mas também facilita a depuração e a manutenção do código. Com o Python, você pode criar uma solução elegante e eficiente que lida com todos os casos extremos.
O primeiro passo é criar uma função que valide o CPF, verificando se o formato está correto e se os dígitos verificadores são válidos. Para isso, usaremos tratamento de exceções para capturar e responder a entradas inválidas de forma controlada.
def validar_cpf(cpf):
"""
Valida um CPF, verificando formato e dígitos verificadores.
Levanta exceções para entradas inválidas.
"""
if not cpf:
raise ValueError("CPF não pode ser vazio.")
# Remove caracteres não numéricos
cpf = ''.join(filter(str.isdigit, cpf))
if len(cpf) != 11:
raise ValueError("CPF deve conter 11 dígitos.")
# Verifica se todos os dígitos são iguais
if cpf == cpf[0] * 11:
raise ValueError("CPF inválido: dígitos repetidos.")
# Cálculo do primeiro dígito verificador
soma = sum(int(digito) * peso for digito, peso in zip(cpf, range(10, 1, -1)))
resto = soma % 11
digito1 = 0 if resto < 2 else 11 - resto
# Cálculo do segundo dígito verificador
soma = sum(int(digito) * peso for digito, peso in zip(cpf, range(11, 1, -1)))
resto = soma % 11
digito2 = 0 if resto < 2 else 11 - resto
# Verifica se os dígitos calculados correspondem aos informados
if int(cpf[9]) != digito1 or int(cpf[10]) != digito2:
raise ValueError("CPF inválido: dígitos verificadores incorretos.")
return True
Agora, para usar a função de validação, você deve envolvê-la em um bloco try-except. Isso permite que você capture e trate as exceções de forma amigável, exibindo mensagens de erro claras para o usuário.
try:
cpf = "123.456.789-09"
if validar_cpf(cpf):
print("CPF válido!")
except ValueError as e:
print(f"Erro: {e}")
Abaixo, uma tabela com exemplos de CPFs de entrada e a saída esperada do programa, demonstrando como o tratamento de exceções funciona na prática.
| CPF de Entrada | Saída Esperada |
|---|---|
| 123.456.789-09 | CPF válido! |
| 111.111.111-11 | Erro: CPF inválido: dígitos repetidos. |
| 123.456.789 | Erro: CPF deve conter 11 dígitos. |
| Erro: CPF não pode ser vazio. |
Com este método, você automatiza a validação de CPFs em segundos, evitando erros manuais e garantindo que apenas dados corretos sejam processados. O tratamento de exceções não só torna seu código mais robusto, mas também melhora a experiência do usuário ao fornecer feedback claro e útil.