Validação Matemática de CPF em Python Sem Usar Bibliotecas Externas
Validação Matemática de CPF em Python Sem Usar Bibliotecas Externas
A validação de CPF é um requisito fundamental em formulários de cadastro, checkout de e-commerces e sistemas administrativos no Brasil. Utilizando um algoritmo matemático simples, é possível calcular os dois últimos dígitos verificadores (DV) para garantir que a sequência informada possui uma estrutura válida sem a necessidade de consultar APIs externas.
Python
import re
def validar_cpf(cpf: str) -> bool:
# 1. Limpa o texto mantendo apenas dígitos numéricos
cpf_limpo = re.sub(r'\D', '', cpf)
# Verifica se possui 11 dígitos ou se é uma sequência repetida conhecida
if len(cpf_limpo) != 11 or cpf_limpo == cpf_limpo[0] * 11:
return False
# 2. Cálculo do 1º Dígito Verificador
soma = sum(int(cpf_limpo[i]) * (10 - i) for i in range(9))
resto = (soma * 10) % 11
digito_1 = resto if resto < 10 else 0
if int(cpf_limpo[9]) != digito_1:
return False
# 3. Cálculo do 2º Dígito Verificador
soma = sum(int(cpf_limpo[i]) * (11 - i) for i in range(10))
resto = (soma * 10) % 11
digito_2 = resto if resto < 10 else 0
if int(cpf_limpo[10]) != digito_2:
return False
return True
# Exemplo prático de uso
if __name__ == "__main__":
cpfs_para_testar = [
"111.111.111-11", # Inválido (Sequência repetida)
"529.482.210-25", # Válido (Formato tradicional)
"52948221025", # Válido (Apenas números)
"123.456.789-00" # Inválido (Dígitos verificadores incorretos)
]
for c in cpfs_para_testar:
status = "Válido" if validar_cpf(c) else "Inválido"
print(f"CPF {c}: {status}")
Pontos-chave
- Tratamento de Expressão Regular (
re.sub): A máscarar'\D'remove qualquer caractere não numérico (pontos, traços e espaços), permitindo que a função processe CPFs formatados ou compostos por apenas números. - Validação de Sequências Repetidas: Números como
"00000000000"ou"11111111111"passam pelo algoritmo matemático dos dígitos verificadores, mas são CPFs inválidos; a verificaçãocpf_limpo == cpf_limpo[0] * 11elimina esses casos na borda. - Algoritmo do Módulo 11: O cálculo multiplica os primeiros 9 e 10 dígitos por pesos decrescentes (de 10 a 2 e de 11 a 2, respectivamente), aplicando o resto da divisão por 11 para definir os dois últimos dígitos.
- Validação Sintática vs. Receita Federal: Este algoritmo valida exclusivamente a consistência matemática dos dígitos verificadores. Ele não confirma se o CPF pertence a uma pessoa física existente nem se o documento está ativo na Receita Federal.

Comentários
Postar um comentário