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.
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')
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
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.
| 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 |
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'}")
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.