Validador e gerador de CPF em Python

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

[ Hits: 29.339 ]

Homepage: https://github.com/artrabelo

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

Resolvendo equações

Par ou Impar em Python

Cálculo FIBONACCI

Bubble Sort em Python

Um programa simples para gerar uma tabuada em python com menu utilizando laco for while try except e


  

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 maurixnovatrento em 15/05/2020 - 08:19h



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


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts