Validador e gerador de CPF em Python

Publicado por Artur Rabelo (última atualização em 31/03/2020)

[ Hits: 2.324 ]

Homepage: https://github.com/akira095

Download 7077.cpf_funcs.py




Duas funções em Python, uma que valida um CPF informado pelo usuário e outra que gera um CPF válido.

Explicação do algoritmo para validação do CPF: https://dicasdeprogramacao.com.br/algoritmo-para-validar-cpf/

  



Esconder código-fonte

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.')

Scripts recomendados

lexadrez

Calcular a data do Carnaval e da Páscoa

Aprendendo a fazer equações em Python

Gerador de palpites para Mega Sena (com módulo random)

Fatorial de um número n


  

Comentários
[1] Comentário enviado por mr_peartnoy em 02/04/2020 - 14:57h

Simples e Genial!! Muito bom!!

[2] Comentário enviado por mauricio123 em 15/05/2020 - 08:19h



muito bom.
___________________________________
Conhecimento não se Leva para o Túmulo.


Contribuir com comentário