gershwin.pages.dev

Como criar um script Python para extrair e validar CPFs de um texto?

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.

Pré-requisitos

Passo 1: Importar bibliotecas necessárias

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

Passo 2: Definir a função de validação do CPF

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])

Passo 3: Definir a função para extrair CPFs do texto

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

Passo 4: Testar o script com um exemplo

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)

Exemplo Prático

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

Conclusão

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.