Corrigir CPFs com dígitos trocados manualmente é uma tarefa tediosa e propensa a erros. Com um script Python, você automatiza a validação e correção, garantindo precisão e economizando tempo em processamentos em massa.
Primeiro, crie um arquivo Python chamado corrigir_cpfs.py. Este script irá ler um arquivo CSV, validar os CPFs e corrigir os dígitos verificadores quando necessário.
import csv
def calcular_digito_verificador(cpfs):
def digito_verificador(cpf):
if len(cpf) != 9:
return None
# 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
# Segundo dígito
soma = sum(int(cpf[i]) * (11 - i) for i in range(9)) + dv1 * 2
resto = soma % 11
dv2 = 0 if resto < 2 else 11 - resto
return f"{dv1}{dv2}"
corrigidos = []
for cpf in cpfs:
cpf_limpo = ''.join(filter(str.isdigit, cpf))
if len(cpf_limpo) == 9:
dv = digito_verificador(cpf_limpo)
if dv:
corrigidos.append(f"{cpf_limpo}{dv}")
else:
corrigidos.append(cpf)
return corrigidos
def processar_arquivo(input_file, output_file):
with open(input_file, newline='') as csvfile:
reader = csv.reader(csvfile)
cpfs = [row[0] for row in reader]
cpfs_corrigidos = calcular_digito_verificador(cpfs)
with open(output_file, 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
for cpf in cpfs_corrigidos:
writer.writerow([cpf])
if __name__ == "__main__":
import sys
if len(sys.argv) != 3:
print("Uso: python corrigir_cpfs.py ")
else:
processar_arquivo(sys.argv[1], sys.argv[2])
print("CPFs processados e salvos em:", sys.argv[2])
Com o script criado, execute-o via linha de comando, informando o arquivo CSV de entrada e o nome do arquivo de saída desejado.
python corrigir_cpfs.py cpfs_entrada.csv cpfs_corrigidos.csv
Veja como o script processa uma lista de CPFs com e sem dígitos verificadores.
| CPF de Entrada | CPF Corrigido |
|---|---|
| 123.456.789 | 123.456.789-09 |
| 98765432 | 98765432-00 |
| 111.444.777 | 111.444.777-35 |
| 55566699 | 55566699-28 |
Com este script Python, você automatiza a correção de CPFs com dígitos trocados em segundos, garantindo precisão e eliminando erros manuais em grandes volumes de dados.