Validar CPFs é uma tarefa crítica em sistemas que lidam com dados pessoais no Brasil. Um algoritmo robusto não só verifica a validade matemática dos dígitos verificadores, mas também testa a resistência contra entradas inválidas, formatos incorretos e tentativas de falsificação. Este guia apresenta um script em Python que automatiza esses testes de forma eficiente.
O primeiro passo é implementar uma função que valide o CPF de acordo com o algoritmo oficial. O script deve calcular os dígitos verificadores e compará-los com os informados.
def validar_cpf(cpf: str) -> bool:
cpf = ''.join(filter(str.isdigit, cpf))
if len(cpf) != 11 or len(set(cpf)) == 1:
return False
# Cálculo do primeiro dígito verificador
soma = sum(int(digit) * (10 - i) for i, digit in enumerate(cpf[:9]))
resto = soma % 11
digito1 = 0 if resto < 2 else 11 - resto
# Cálculo do segundo dígito verificador
soma = sum(int(digit) * (11 - i) for i, digit in enumerate(cpf[:10]))
resto = soma % 11
digito2 = 0 if resto < 2 else 11 - resto
return str(digito1) == cpf[9] and str(digito2) == cpf[10]
Agora, vamos criar um conjunto de testes que simule diferentes cenários, incluindo CPFs válidos, inválidos, formatos incorretos e tentativas de falsificação.
def testar_robustez():
testes = {
'válidos': ['12345678909', '98765432101'],
'inválidos': ['12345678900', '11111111111'],
'formatos': ['123.456.789-09', '12345678909', '123-456-789-09'],
'falsificação': ['00000000000', '99999999999', '12345'],
'caracteres': ['abc.def.ghi-jk', '!@#$%¨&*()']
}
resultados = {}
for categoria, cpfs in testes.items():
resultados[categoria] = [validar_cpf(cpf) for cpf in cpfs]
return resultados
Por fim, execute o script e analise os resultados para garantir que o algoritmo se comporta conforme o esperado em todos os cenários testados.
if __name__ == '__main__':
resultados = testar_robustez()
for categoria, resultados_teste in resultados.items():
print(f'{categoria.upper()}: {resultados_teste}')
| CPF de Entrada | Formato | Válido? |
|---|---|---|
| 12345678909 | Somente números | Sim |
| 123.456.789-09 | Com pontuação | Sim |
| 12345678900 | Somente números | Não |
| 11111111111 | Somente números | Não |
| abc.def.ghi-jk | Caracteres inválidos | Não |
Com este script, você automatiza a validação e os testes de robustez de CPFs em segundos, garantindo que seu algoritmo resista a entradas inválidas e formatos incorretos. A abordagem modular permite fácil manutenção e extensão para novos cenários de teste.