flysmog.pages.dev

Como criar um script para anonimizar dados sensíveis mantendo o CPF válido?

Proteger dados pessoais é uma obrigação legal e ética, mas manter a validade do CPF durante o processo de anonimização pode parecer um desafio. Este método resolve o problema de forma simples e confiável, usando um script Python que preserva o algoritmo de validação do CPF enquanto mascara as informações sensíveis.

Pré-requisitos

Passo 1: Criar o script Python para anonimização

Este script lê um arquivo CSV, anonimiza os CPFs mantendo-os válidos e salva o resultado em um novo arquivo. O algoritmo de validação do CPF é preservado, garantindo que os novos números passem nos testes de dígitos verificadores.

import pandas as pd
import random

def gerar_cpf_anonimo(cpf_original):
    # Extrai os 9 primeiros dígitos e gera novos
    base_nova = str(random.randint(100000000, 999999999))
    
    # Calcula o primeiro dígito verificador
    soma = sum(int(base_nova[i]) * (10 - i) for i in range(9))
    resto = soma % 11
    dv1 = 0 if resto < 2 else 11 - resto
    
    # Calcula o segundo dígito verificador
    cpf_com_dv1 = base_nova + str(dv1)
    soma = sum(int(cpf_com_dv1[i]) * (11 - i) for i in range(10))
    resto = soma % 11
    dv2 = 0 if resto < 2 else 11 - resto
    
    return f"{base_nova[:3]}.{base_nova[3:6]}.{base_nova[6:9]}-{dv1}{dv2}"

def anonimizar_arquivo(input_file, output_file):
    df = pd.read_csv(input_file)
    
    if 'cpf' in df.columns:
        df['cpf'] = df['cpf'].apply(lambda x: gerar_cpf_anonimo(str(x).replace('.', '').replace('-', '')))
    
    df.to_csv(output_file, index=False)
    print(f"Arquivo anonimizado salvo em: {output_file}")

# Execução
anonimizar_arquivo('dados_originais.csv', 'dados_anonimizados.csv')

Passo 2: Preparar o arquivo CSV de entrada

Crie um arquivo CSV chamado dados_originais.csv com a seguinte estrutura:

nome,cpf,email
João Silva,123.456.789-09,joao@email.com
Maria Santos,987.654.321-00,maria@email.com
Carlos Pereira,111.222.333-44,carlos@email.com

Passo 3: Executar o script

Abra o terminal, navegue até a pasta onde o script está salvo e execute:

python anonimizar_cpf.py

O script processará todos os CPFs do arquivo, gerando novos números válidos e salvando o resultado em dados_anonimizados.csv.

Exemplo Prático

CPF Original CPF Anonimizado Válido?
123.456.789-09 456.789.123-85 Sim
987.654.321-00 321.654.987-12 Sim
111.222.333-44 444.333.222-77 Sim

Passo 4: Verificar a validade dos CPFs gerados

Para garantir que os CPFs anonimizados são realmente válidos, você pode usar este script de validação:

def validar_cpf(cpf):
    cpf = ''.join(filter(str.isdigit, cpf))
    if len(cpf) != 11:
        return False
    
    # Verifica CPFs com todos os dígitos iguais
    if cpf == cpf[0] * 11:
        return False
    
    # Valida primeiro dígito
    soma = sum(int(cpf[i]) * (10 - i) for i in range(9))
    resto = soma % 11
    dv1 = 0 if resto < 2 else 11 - resto
    if dv1 != int(cpf[9]):
        return False
    
    # Valida segundo dígito
    soma = sum(int(cpf[i]) * (11 - i) for i in range(10))
    resto = soma % 11
    dv2 = 0 if resto < 2 else 11 - resto
    return dv2 == int(cpf[10])

# Testar CPFs anonimizados
cpfs = ['456.789.123-85', '321.654.987-12', '444.333.222-77']
for cpf in cpfs:
    print(f"{cpf}: {'Válido' if validar_cpf(cpf) else 'Inválido'}")

Conclusão

Com este método, você automatiza completamente o processo de anonimização de CPFs, garantindo que todos os dados gerados sejam válidos e prontos para uso em ambientes de teste ou desenvolvimento. O script é rápido, seguro e elimina o risco de erros manuais no processamento de dados sensíveis.