flysmog.pages.dev

Como criar um índice invertido de CPFs válidos com script Python?

Validar e indexar CPFs manualmente é uma tarefa demorada e propensa a erros. Com um script Python, você automatiza o processo, garantindo precisão e rapidez na criação de um índice invertido para consultas eficientes.

Pré-requisitos

Passo 1: Validar CPFs com algoritmo oficial

Para garantir que apenas CPFs válidos sejam indexados, é essencial implementar o algoritmo de validação oficial, que verifica os dígitos verificadores.

def valida_cpf(cpf):
    cpf = ''.join(filter(str.isdigit, cpf))
    if len(cpf) != 11 or cpf == cpf[0] * 11:
        return False
    def calcula_digito(cpf, digitos):
        soma = sum(int(cpf[i]) * (digitos - i) for i in range(digitos))
        resto = soma % 11
        return 0 if resto < 2 else 11 - resto
    d1 = calcula_digito(cpf, 9)
    d2 = calcula_digito(cpf, 10)
    return d1 == int(cpf[9]) and d2 == int(cpf[10])

Passo 2: Criar índice invertido com dicionário

Um dicionário Python é ideal para mapear cada CPF válido para sua posição ou referência no arquivo original, permitindo buscas instantâneas.

def cria_indice_invertido(arquivo):
    indice = {}
    with open(arquivo, 'r') as f:
        for linha, cpf in enumerate(f):
            cpf_limpo = ''.join(filter(str.isdigit, cpf.strip()))
            if valida_cpf(cpf_limpo):
                indice[cpf_limpo] = linha + 1  # Linhas começam em 1
    return indice

Passo 3: Salvar índice em arquivo para consultas futuras

Exportar o dicionário para um arquivo JSON facilita o reuso do índice sem precisar reprocessar o arquivo original.

import json

def salva_indice(indice, saida):
    with open(saida, 'w') as f:
        json.dump(indice, f, indent=2)

# Exemplo de uso
indice = cria_indice_invertido('cpfs.txt')
salva_indice(indice, 'indice_cpf.json')

Exemplo Prático

CPF no Arquivo Válido? Índice Gerado
123.456.789-09 Não Excluído
529.982.247-25 Sim "52998224725": 2
111.111.111-11 Não Excluído
123.456.789-09 Não Excluído

Conclusão

Com este script, você transforma uma tarefa manual e sujeita a erros em um processo automatizado e confiável. O índice invertido gerado permite consultas instantâneas, economizando tempo e garantindo a integridade dos dados.