Exercício 12-09:

Escreva um programa que valide a entrada de dados do usuário. Tente achar um número válido de CPF ou de CNPJ como definido nos exercícios anteriores. Exiba uma mensagem dizendo se o número é válido e se este é um CNPJ ou um CPF.

Resposta:

##############################################################################
# Parte do livro Introdução à Programação com Python
# Autor: Nilo Ney Coutinho Menezes
# Editora Novatec (c) 2010-2024
# Quarta Edição - Março/2024 - ISBN 978-85-7522-886-9
#
# Site: https://python.nilo.pro.br/
#
# Arquivo: capitulo 12/exercicio-12-09.py
##############################################################################
# Funções número, sequência e verifica padrão da listagem 12.5
# Função cpf do exercício 12.07
# Função cnpj do exercício 12.08
import re

CPF_RE = r"^\d{3}\.\d{3}\.\d{3}-\d{2}$"
CNPJ_RE = r"^\d{2}\.\d{3}\.\d{3}/\d{4}-\d{2}$"


def cpf(entrada):
    return bool(re.match(CPF_RE, entrada))


# Verifica se entrada é um CNPJ válido, ou seja:
# Uma sequência no formato 99.999.999/9999-99
def cnpj(entrada):
    return bool(re.match(CNPJ_RE, entrada))


entradas = [
    "12.345.678/9012-34",  # CNPJ válido
    "12.345.678-9012-34",  # Inválido
    "99.999.999/9999-99",  # CNPJ válido
    "123.456.789-01",  # CPF válido
    "23.456.789-01",  # Inválido
    "999.456.789-01",  # CPF válido
]

for entrada in entradas:
    print(
        f"{entrada}:\né um CNPJ? {'Sim' if cnpj(entrada) else 'Não'}\né um CPF? {'Sim' if cpf(entrada) else 'Não'}\n"
    )
Clique aqui para baixar o arquivo