34 lines
912 B
Python
34 lines
912 B
Python
def validar_cpf(cpf):
|
|
"""
|
|
Valida um CPF seguindo as regras do governo brasileiro.
|
|
Retorna True se o CPF é válido, False caso contrário.
|
|
"""
|
|
# Remove caracteres não numéricos
|
|
cpf = ''.join(filter(str.isdigit, cpf))
|
|
|
|
# Verifica se tem 11 dígitos
|
|
if len(cpf) != 11:
|
|
return False
|
|
|
|
# Verifica se todos os dígitos são iguais
|
|
if len(set(cpf)) == 1:
|
|
return False
|
|
|
|
# Calcula primeiro dígito verificador
|
|
soma = 0
|
|
for i in range(9):
|
|
soma += int(cpf[i]) * (10 - i)
|
|
resto = soma % 11
|
|
digito1 = 0 if resto < 2 else 11 - resto
|
|
|
|
if int(cpf[9]) != digito1:
|
|
return False
|
|
|
|
# Calcula segundo dígito verificador
|
|
soma = 0
|
|
for i in range(10):
|
|
soma += int(cpf[i]) * (11 - i)
|
|
resto = soma % 11
|
|
digito2 = 0 if resto < 2 else 11 - resto
|
|
|
|
return int(cpf[10]) == digito2 |