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