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.
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)
}
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
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'."
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.
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.