Extrair e validar CPFs de grandes volumes de texto pode ser uma tarefa tediosa e propensa a erros quando feita manualmente. Com um script Python, você automatiza todo o processo, garantindo precisão e economizando tempo valioso. Este método é o mais eficaz porque combina expressões regulares para extração com o algoritmo oficial de validação do CPF.
Para este script, utilizaremos a biblioteca re (expressões regulares) que já vem com o Python. Não é necessário instalar nada adicional.
import re
A validação de CPF segue um algoritmo específico que calcula dois dígitos verificadores. A função abaixo implementa este algoritmo.
def validar_cpf(cpf):
# Remover pontos e traços
cpf = re.sub(r'[-\.]', '', cpf)
# Verificar se o CPF tem 11 dígitos
if len(cpf) != 11:
return False
# Verificar se todos os dígitos são iguais
if cpf == cpf[0] * 11:
return False
# Calcular o primeiro dígito verificador
soma = sum(int(digit) * (10 - i) for i, digit in enumerate(cpf[:9]))
resto = soma % 11
digito1 = 0 if resto < 2 else 11 - resto
# Calcular o segundo dígito verificador
soma = sum(int(digit) * (11 - i) for i, digit in enumerate(cpf[:10]))
resto = soma % 11
digito2 = 0 if resto < 2 else 11 - resto
# Comparar os dígitos calculados com os informados
return digito1 == int(cpf[9]) and digito2 == int(cpf[10])
Esta função utiliza expressões regulares para encontrar todos os padrões que se parecem com CPFs no texto, incluindo formatos com e sem pontuação.
def extrair_cpfs(texto):
# Padrão para encontrar CPFs (com ou sem pontuação)
padrao = r'\b\d{3}[\.\s-]?\d{3}[\.\s-]?\d{3}[-.\s]?\d{2}\b'
# Encontrar todas as correspondências
cpfs_encontrados = re.findall(padrao, texto)
# Validar cada CPF encontrado
cpfs_validos = [cpf for cpf in cpfs_encontrados if validar_cpf(cpf)]
return cpfs_validos
Agora vamos criar um exemplo completo para testar nossas funções. Vamos criar um texto com vários CPFs, alguns válidos e outros inválidos.
if __name__ == "__main__":
texto_exemplo = """
Aqui estão alguns CPFs:
123.456.789-09 (inválido)
529.982.247-25 (válido)
12345678909 (inválido)
111.444.777-35 (válido)
529982247-25 (válido)
529.982.247-00 (inválido)
"""
cpfs_validos = extrair_cpfs(texto_exemplo)
print("CPFs válidos encontrados:")
for cpf in cpfs_validos:
print(cpf)
Veja abaixo um exemplo de entrada e saída esperada do nosso script:
| Texto de Entrada | CPFs Válidos Extraídos |
|---|---|
| Cliente: João Silva, CPF: 529.982.247-25. Outro CPF: 111.444.777-35 | 529.982.247-25, 111.444.777-35 |
| CPFs: 123.456.789-09, 529982247-25, 529.982.247-00 | 529982247-25 |
| Lista: 529.982.247-25, 111.444.777-35, 123.456.789-09 | 529.982.247-25, 111.444.777-35 |
Com este script Python, você automatiza a extração e validação de CPFs em segundos, eliminando erros manuais e aumentando significativamente sua produtividade. O método é robusto, suportando diferentes formatos de CPF e garantindo que apenas os números válidos sejam retornados.