Você está na página 1de 2

from random import randint

def cpf_validate(numbers):
# Obt�m os n�meros do CPF e ignora outros caracteres
cpf = [int(char) for char in numbers if char.isdigit()]

# Verifica se o CPF tem 11 d�gitos


if len(cpf) != 11:
return False

# Verifica se o CPF tem todos os n�meros iguais, ex: 111.111.111-11


# Esses CPFs s�o considerados inv�lidos mas passam na valida��o dos d�gitos
# Antigo c�digo para refer�ncia: if all(cpf[i] == cpf[i+1] for i in range (0,
len(cpf)-1))
if cpf == cpf[::-1]:
return False

# Valida os dois d�gitos verificadores


for i in range(9, 11):
value = sum((cpf[num] * ((i+1) - num) for num in range(0, i)))
digit = ((value * 10) % 11) % 10
if digit != cpf[i]:
return False
return True

def cpf_generate():
# Gera os primeiros nove d�gitos (e certifica-se de que n�o s�o todos iguais)
while True:
cpf = [randint(0, 9) for i in range(9)]
if cpf != cpf[::-1]:
break

# Gera os dois d�gitos verificadores


for i in range(9, 11):
value = sum((cpf[num] * ((i + 1) - num) for num in range(0, i)))
digit = ((value * 10) % 11) % 10
cpf.append(digit)

# Retorna o CPF como string


result = ''.join(map(str, cpf))
return result

opcao = int(input('''[1] Validar um CPF


[2] Gerar um CPF v�lido
Op��o: '''))
if opcao == 1:
cpf = input('Digite o CPF: ')
if cpf_validate(cpf):
print('CPF v�lido.')
else:
print('CPF inv�lido.')
elif opcao == 2:
cpf = cpf_generate()
if cpf_validate(cpf):
print(f'CPF gerado: {cpf[:3]}.{cpf[3:6]}.{cpf[6:9]}-{cpf[9:]}')
else:
print('Inv�lido.')

Você também pode gostar