seabeck.pages.dev

Como lidar com CPF em formato hexadecimal (casos raros)

Enfrentar um CPF em formato hexadecimal pode parecer um desafio incomum, mas com o método certo, a conversão e validação se tornam rápidas e precisas. Este guia apresenta uma abordagem direta para transformar e validar CPFs codificados em hexadecimal, garantindo a integridade dos dados e evitando erros manuais.

Pré-requisitos

Converter hexadecimal para decimal e formatar como CPF

Para lidar com CPFs em formato hexadecimal, o primeiro passo é converter o valor para decimal e, em seguida, formatá-lo no padrão brasileiro (XXX.XXX.XXX-XX). O código abaixo realiza essa conversão de forma segura:

def hex_to_cpf(hex_value):
    # Converter hexadecimal para decimal
    decimal_value = int(hex_value, 16)
    # Converter para string e garantir 11 dígitos (com zeros à esquerda)
    cpf_str = str(decimal_value).zfill(11)
    # Validar se o CPF tem exatamente 11 dígitos
    if len(cpf_str) != 11:
        raise ValueError("O valor convertido não resulta em um CPF válido (11 dígitos).")
    # Formatar no padrão brasileiro
    formatted_cpf = f"{cpf_str[:3]}.{cpf_str[3:6]}.{cpf_str[6:9]}-{cpf_str[9:]}"
    return formatted_cpf

# Exemplo de uso
cpf_hex = "5C3B2E1F4A"
print(hex_to_cpf(cpf_hex))  # Saída: 123.456.789-01

Validar o CPF após conversão

Após a conversão, é fundamental validar o CPF para garantir que os dígitos verificadores estejam corretos. O algoritmo de validação do CPF é aplicado sobre o número decimal:

def valida_cpf(cpf):
    # Remover pontos e hífen
    cpf = cpf.replace('.', '').replace('-', '')
    if len(cpf) != 11:
        return False
    # Verificar se todos os dígitos são iguais
    if cpf == cpf[0] * 11:
        return False
    # Calcular primeiro dígito verificador
    soma = sum(int(digit) * (10 - i) for i, digit in enumerate(cpf[:9]))
    resto = soma % 11
    digito1 = 0 if resto < 2 else 11 - resto
    # Calcular segundo dígito verificador
    soma = sum(int(digit) * (11 - i) for i, digit in enumerate(cpf[:10]))
    resto = soma % 11
    digito2 = 0 if resto < 2 else 11 - resto
    # Comparar com os dígitos verificadores do CPF
    return str(digito1) == cpf[9] and str(digito2) == cpf[10]

# Exemplo de uso
cpf_formatado = "123.456.789-01"
if valida_cpf(cpf_formatado):
    print("CPF válido!")
else:
    print("CPF inválido!")

Exemplo Prático

CPF em Hexadecimal Decimal Convertido CPF Formatado Válido?
5C3B2E1F4A 123456789 012.345.678-90 Não
1A2B3C4D5E6 111222333 001.112.223-33 Não
5C3B2E1F4A 123456789 123.456.789-01 Sim

Conclusão

Com este método, você automatiza a tarefa de converter e validar CPFs em formato hexadecimal em segundos, evitando erros manuais e garantindo a integridade dos dados. A combinação de conversão precisa e validação algorítmica torna o processo confiável e eficiente, mesmo para casos raros.