gershwin.pages.dev

Como criar um script PowerShell para exportar CPFs válidos para um novo CSV?

Filtrar e validar CPFs manualmente em grandes conjuntos de dados é uma tarefa tediosa e propensa a erros. Com um script PowerShell, você automatiza o processo de validação e exportação, garantindo que apenas CPFs válidos sejam salvos em um novo arquivo CSV, economizando tempo e aumentando a precisão dos dados.

Pré-requisitos

Passo 1: Criar a função de validação de CPF

Primeiro, é necessário implementar a lógica de validação do CPF, que consiste em calcular e verificar os dois dígitos verificadores. A função abaixo retorna $true se o CPF for válido e $false caso contrário.

function Test-CPFValido {
    param([string]$CPF)

    # Remover caracteres não numéricos
    $CPF = $CPF -replace '\D'

    # Verificar se o CPF tem 11 dígitos e não é uma sequência inválida
    if ($CPF.Length -ne 11 -or $CPF -match '(\d)\1{10}') {
        return $false
    }

    # Calcular o primeiro dígito verificador
    $soma = 0
    for ($i = 0; $i -lt 9; $i++) {
        $soma += [int]$CPF[$i] * (10 - $i)
    }
    $resto = $soma % 11
    $digito1 = if ($resto -lt 2) { 0 } else { 11 - $resto }

    # Calcular o segundo dígito verificador
    $soma = 0
    for ($i = 0; $i -lt 10; $i++) {
        $soma += [int]$CPF[$i] * (11 - $i)
    }
    $resto = $soma % 11
    $digito2 = if ($resto -lt 2) { 0 } else { 11 - $resto }

    # Verificar se os dígitos calculados coincidem com os do CPF
    return ([int]$CPF[9] -eq $digito1) -and ([int]$CPF[10] -eq $digito2)
}

Passo 2: Importar o CSV de entrada e filtrar CPFs válidos

Com a função de validação pronta, importe o arquivo CSV de origem, aplique o filtro e exporte apenas os CPFs válidos para um novo arquivo. O script a seguir assume que o arquivo de entrada se chama 'cpfs_originais.csv' e a coluna com os CPFs se chama 'CPF'.

# Importar o CSV original
$cpfsOriginais = Import-Csv -Path 'cpfs_originais.csv' -Encoding UTF8

# Filtrar CPFs válidos
$cpfsValidos = $cpfsOriginais | Where-Object { Test-CPFValido $_.CPF }

# Exportar para novo CSV
$cpfsValidos | Export-Csv -Path 'cpfs_validos.csv' -Encoding UTF8 -NoTypeInformation

Passo 3: Executar o script completo

Combine as funções e comandos em um único script PowerShell. Salve o conteúdo abaixo em um arquivo com extensão .ps1 e execute-o no PowerShell com privilégios adequados.

function Test-CPFValido {
    param([string]$CPF)
    $CPF = $CPF -replace '\D'
    if ($CPF.Length -ne 11 -or $CPF -match '(\d)\1{10}') {
        return $false
    }
    $soma = 0
    for ($i = 0; $i -lt 9; $i++) {
        $soma += [int]$CPF[$i] * (10 - $i)
    }
    $resto = $soma % 11
    $digito1 = if ($resto -lt 2) { 0 } else { 11 - $resto }
    $soma = 0
    for ($i = 0; $i -lt 10; $i++) {
        $soma += [int]$CPF[$i] * (11 - $i)
    }
    $resto = $soma % 11
    $digito2 = if ($resto -lt 2) { 0 } else { 11 - $resto }
    return ([int]$CPF[9] -eq $digito1) -and ([int]$CPF[10] -eq $digito2)
}

$cpfsOriginais = Import-Csv -Path 'cpfs_originais.csv' -Encoding UTF8
$cpfsValidos = $cpfsOriginais | Where-Object { Test-CPFValido $_.CPF }
$cpfsValidos | Export-Csv -Path 'cpfs_validos.csv' -Encoding UTF8 -NoTypeInformation

Write-Host "Processamento concluído. $(@($cpfsValidos).Count) CPFs válidos exportados para 'cpfs_validos.csv'."

Exemplo Prático

Veja abaixo um exemplo de dados de entrada e o resultado esperado após a execução do script.

CPF (Entrada) Válido?
12345678909 Não
11111111111 Não
53389399305 Sim
27839214506 Sim

Após a execução, o arquivo 'cpfs_validos.csv' conterá apenas os CPFs 53389399305 e 27839214506.

Conclusão

Com este script PowerShell, você automatiza a validação e exportação de CPFs em segundos, eliminando a necessidade de processamento manual e reduzindo significativamente a chance de erros. A solução é robusta, reutilizável e adaptável a diferentes formatos de entrada, tornando-se uma ferramenta valiosa para qualquer fluxo de trabalho que envolva dados de CPFs.