O Gerador De CPF O Gerador De CPF

Função para Validar CPF em Python

Função Python para validar CPF usando o algoritmo de módulo 11. Pode ser usada em aplicações Django, Flask, scripts de processamento de dados ou qualquer projeto Python.

Código

import re

def validar_cpf(cpf: str) -> bool:
    # Remove caracteres não numéricos
    cpf = re.sub(r'\D', '', cpf)

    # Verifica se tem 11 dígitos
    if len(cpf) != 11:
        return False

    # Rejeita CPFs com todos os dígitos iguais
    if cpf == cpf[0] * 11:
        return False

    # Calcula o primeiro dígito verificador
    soma = sum(int(cpf[i]) * (10 - i) for i in range(9))
    resto = soma % 11
    digito1 = 0 if resto < 2 else 11 - resto

    # Calcula o segundo dígito verificador
    soma = sum(int(cpf[i]) * (11 - i) for i in range(10))
    resto = soma % 11
    digito2 = 0 if resto < 2 else 11 - resto

    # Verifica se os dígitos calculados conferem
    return cpf[-2:] == f"{digito1}{digito2}"

Análise do código

re.sub(r'\D', '', cpf) remove tudo que não é dígito, aceitando entrada com ou sem pontuação.

cpf == cpf[0] * 11 rejeita sequências de dígitos repetidos comparando com uma string de 11 caracteres iguais.

O cálculo usa list comprehensions: sum(int(cpf[i]) * (10 - i) for i in range(9)) para o primeiro dígito (pesos 10 a 2) e sum(int(cpf[i]) * (11 - i) for i in range(10)) para o segundo (pesos 11 a 2). Cada resultado passa por % 11 com a regra do complemento.

cpf[-2:] compara os dois últimos dígitos com os calculados via f-string.

Uso

validar_cpf("529.982.247-25")  # True
validar_cpf("111.111.111-11")  # False
validar_cpf("52998224725")     # True

Testes

Testes com pytest:

import pytest

def test_cpf_valido_com_pontuacao():
    assert validar_cpf("529.982.247-25") is True

def test_cpf_valido_sem_pontuacao():
    assert validar_cpf("52998224725") is True

def test_cpf_com_digitos_repetidos():
    assert validar_cpf("111.111.111-11") is False

def test_cpf_com_digito_verificador_incorreto():
    assert validar_cpf("529.982.247-26") is False

def test_cpf_com_tamanho_incorreto():
    assert validar_cpf("123.456.789") is False

Para gerar CPFs válidos e alimentar seus testes, use o gerador de CPF online.