cnpjcpf.
Código · Python

Validar CPF em Python

Função sem dependências que valida um CPF pelo módulo 11: limpa a pontuação, descarta sequências repetidas e confere os dois dígitos verificadores. Copie e use.

A função

Python
import re

def is_valid_cpf(cpf: str) -> bool:
    cpf = re.sub(r'\D', '', cpf)                 # mantém só dígitos
    if len(cpf) != 11 or cpf == cpf[0] * 11:     # 11 dígitos, não repetidos
        return False
    for i in (9, 10):                            # confere os dois DV
        soma = sum(int(cpf[j]) * ((i + 1) - j) for j in range(i))
        if (soma * 10 % 11) % 10 != int(cpf[i]):
            return False
    return True

is_valid_cpf('111.444.777-35')   # True
is_valid_cpf('111.444.777-00')   # False

O cálculo é o do módulo 11: cada dígito da base é multiplicado por um peso decrescente. O truque (soma * 10 % 11) % 10 resolve o verificador e ainda transforma o resto 10 em 0, sem um if à parte.

Com máscara na saída

Se você precisa exibir o CPF pontuado, formate só na apresentação — guarde sempre os 11 dígitos limpos:

Python
def format_cpf(cpf: str) -> str:
    d = re.sub(r'\D', '', cpf)
    return f'{d[0:3]}.{d[3:6]}.{d[6:9]}-{d[9:11]}'

format_cpf('11144477735')   # '111.444.777-35'
publicidade

Cuidados

  • Regex só valida formato. Um padrão como ^\d{11}$ confirma que são 11 dígitos, mas não confere o verificador — quem faz isso é a função acima. Veja regex de CPF.
  • Sequências repetidas (11111111111) passariam no módulo 11, por isso a função as descarta antes.
  • Válido ≠ existe. A função confirma a consistência matemática, não se o CPF foi emitido a alguém.
  • Guarde sem máscara (só os 11 dígitos) e formate só na exibição.

Continue

Código verificado por execução (casos válidos e inválidos). Algoritmo módulo 11 oficial. Revisado em 06/2026.