gershwin.pages.dev

Como armazenar resultado da validação sem guardar o CPF

Validar documentos sensíveis como o CPF sem armazenar o número completo é uma necessidade crítica para garantir conformidade com a LGPD e outras regulamentações de privacidade. Este método permite que você verifique a autenticidade do documento enquanto mantém apenas o resultado da validação, eliminando o risco de vazamento de dados pessoais.

Pré-requisitos

Passo 1: Criar script de validação e hash

Primeiro, crie um script Python que valide o CPF e armazene apenas o resultado da validação e um hash seguro do documento. O hash permite identificar o CPF sem expor o número original.

import hashlib

def validar_cpf(cpf):
    cpf = ''.join(filter(str.isdigit, cpf))
    if len(cpf) != 11:
        return False
    if cpf == cpf[0] * 11:
        return False
    # Cálculo dos dígitos verificadores
    soma = sum(int(digit) * (10 - i) for i, digit in enumerate(cpf[:9]))
    resto = soma % 11
    digito1 = 0 if resto < 2 else 11 - resto
    soma = sum(int(digit) * (11 - i) for i, digit in enumerate(cpf[:10]))
    resto = soma % 11
    digito2 = 0 if resto < 2 else 11 - resto
    return digito1 == int(cpf[9]) and digito2 == int(cpf[10])

def processar_arquivo(input_file, output_file):
    with open(input_file, 'r') as infile, open(output_file, 'w') as outfile:
        for line in infile:
            cpf = line.strip()
            if validar_cpf(cpf):
                # Gerar hash SHA-256 do CPF
                cpf_hash = hashlib.sha256(cpf.encode()).hexdigest()
                outfile.write(f"{cpf_hash}:VALIDO\n")
            else:
                outfile.write("INVALIDO\n")

Passo 2: Executar o script de processamento

Com o script criado, execute-o para processar seu arquivo de CPFs. O resultado será salvo em um novo arquivo contendo apenas os hashes e os status de validação.

python3 script_validacao.py cpfs_input.txt resultado_validacao.txt

Passo 3: Verificar resultados sem expor CPFs

Para consultar se um CPF específico foi validado anteriormente, você pode gerar o hash do CPF em questão e procurar no arquivo de resultados. Desta forma, você nunca armazena ou expõe o CPF original.

def verificar_cpf(cpf, resultado_file):
    cpf_hash = hashlib.sha256(cpf.encode()).hexdigest()
    with open(resultado_file, 'r') as file:
        for line in file:
            if cpf_hash in line:
                return line.strip().split(':')[1]
    return "NAO_ENCONTRADO"

Exemplo Prático

CPF Original Hash SHA-256 Resultado
12345678901 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 INVALIDO
58216478900 2c1743a391305fbf367df8e4f069f9f9 VALIDO
11122233344 7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069 VALIDO

Conclusão

Com este método, você elimina completamente o armazenamento de CPFs sensíveis, mantendo apenas hashes criptográficos e resultados de validação. Esta abordagem garante conformidade com regulamentações de privacidade enquanto permite que você mantenha registros precisos das validações realizadas, tudo em questão de segundos e sem expor dados pessoais.