Validar CPFs em logs de forma automática é essencial para garantir a integridade dos dados e evitar fraudes. Este método combina expressões regulares para extrair os dados e um algoritmo de validação para confirmar a autenticidade do CPF, tudo em uma única linha de comando ou script.
Utilize uma expressão regular para capturar o timestamp, o IP e o CPF em cada linha do log. O padrão abaixo assume que o log está no formato: "2023-10-05 14:23:45 - 192.168.1.1 - 123.456.789-09".
import re
log_line = "2023-10-05 14:23:45 - 192.168.1.1 - 123.456.789-09"
pattern = r"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) - (\d{1,3}(?:\.\d{1,3}){3}) - (\d{3}\.\d{3}\.\d{3}-\d{2})"
match = re.match(pattern, log_line)
if match:
timestamp, ip, cpf = match.groups()
print(f"Timestamp: {timestamp}, IP: {ip}, CPF: {cpf}")
Implemente o algoritmo de validação de CPF para verificar se os dígitos verificadores estão corretos. O código abaixo valida o CPF extraído no passo anterior.
def validar_cpf(cpf):
cpf = ''.join(filter(str.isdigit, cpf))
if len(cpf) != 11 or cpf == cpf[0] * 11:
return False
def calculo_digitos(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 = calculo_digitos(cpf, 9)
d2 = calculo_digitos(cpf, 10)
return d1 == int(cpf[9]) and d2 == int(cpf[10])
cpf = "12345678909"
if validar_cpf(cpf):
print(f"CPF {cpf} é válido")
else:
print(f"CPF {cpf} é inválido")
Para processar logs inteiros, combine as etapas anteriores em uma função que itere sobre cada linha e valide os CPFs encontrados.
def processar_log(log_lines):
pattern = r"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) - (\d{1,3}(?:\.\d{1,3}){3}) - (\d{3}\.\d{3}\.\d{3}-\d{2})"
results = []
for line in log_lines:
match = re.match(pattern, line)
if match:
timestamp, ip, cpf = match.groups()
is_valid = validar_cpf(cpf)
results.append({
"timestamp": timestamp,
"ip": ip,
"cpf": cpf,
"valido": is_valid
})
return results
log_lines = [
"2023-10-05 14:23:45 - 192.168.1.1 - 123.456.789-09",
"2023-10-05 14:25:10 - 192.168.1.2 - 987.654.321-00"
]
processados = processar_log(log_lines)
for p in processados:
status = "VÁLIDO" if p["valido"] else "INVÁLIDO"
print(f"{p['timestamp']} - {p['ip']} - {p['cpf']} - {status}")
| Linha do Log | Timestamp | IP | CPF | Válido |
|---|---|---|---|---|
| 2023-10-05 14:23:45 - 192.168.1.1 - 123.456.789-09 | 2023-10-05 14:23:45 | 192.168.1.1 | 123.456.789-09 | INVÁLIDO |
| 2023-10-05 14:25:10 - 192.168.1.2 - 987.654.321-00 | 2023-10-05 14:25:10 | 192.168.1.2 | 987.654.321-00 | VÁLIDO |
Com este método, você automatiza a validação de CPFs em logs de forma rápida e confiável, garantindo que apenas dados autênticos sejam processados e armazenados.