Como validar CPF ou CNPJ em Python

Thomas

Adiministração do forum
Membro da equipe
Administrador
Um de Nós
Parceiros
Membro
Melhor pôster do mês
Abr 28, 2025
76
466
53
Aprenda como validar CPF ou CNPJ em Python. Se você está criando um app ou software que precisa de uma validação desses documentos e o backend é em python.

Python:
import re

def limpar_numero(numero):
    return re.sub(r'\D', '', numero)


def validar_cpf(cpf):
    cpf = limpar_numero(cpf)

    if len(cpf) != 11 or cpf == cpf[0] * 11:
        return False

    # Validação dos 2 dígitos verificadores
    for i in range(9, 11):
        soma = sum(int(cpf[num]) * ((i + 1) - num) for num in range(i))
        digito = ((soma * 10) % 11) % 10
        if digito != int(cpf[i]):
            return False

    return True


def validar_cnpj(cnpj):
    cnpj = limpar_numero(cnpj)

    if len(cnpj) != 14 or cnpj == cnpj[0] * 14:
        return False

    pesos1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
    pesos2 = [6] + pesos1

    # Primeiro dígito
    soma = sum(int(cnpj[i]) * pesos1[i] for i in range(12))
    digito1 = 11 - (soma % 11)
    digito1 = digito1 if digito1 < 10 else 0

    # Segundo dígito
    soma = sum(int(cnpj[i]) * pesos2[i] for i in range(13))
    digito2 = 11 - (soma % 11)
    digito2 = digito2 if digito2 < 10 else 0

    return cnpj[-2:] == f"{digito1}{digito2}"


def validar_documento(numero):
    numero = limpar_numero(numero)

    if len(numero) == 11:
        return validar_cpf(numero)
    elif len(numero) == 14:
        return validar_cnpj(numero)
    else:
        return False


# 🚀 Exemplo de uso:
documento = input("Digite um CPF ou CNPJ: ")

if validar_documento(documento):
    print("Documento válido!")
else:
    print("Documento inválido!")

O que esse script faz:

  • Aceita CPF ou CNPJ com ou sem máscara (., -, /).
  • Faz a limpeza dos caracteres não numéricos.
  • Valida os dígitos verificadores, conforme regras da Receita Federal.
  • Detecta sequências inválidas (como 111.111.111-11 ou 00000000000000).