catbean.pages.dev

Como validar CPF em JSON usando jq no terminal Linux?

Validar CPFs dentro de arquivos JSON manualmente é uma tarefa demorada e propensa a erros. Com o jq e um script Bash, você automatiza esse processo diretamente no terminal Linux, garantindo precisão e rapidez.

Pré-requisitos

Criar script de validação de CPF

Primeiro, crie um script Bash que contenha a função de validação do CPF. Esse script receberá o CPF como argumento e retornará "true" ou "false".

#!/bin/bash

function valida_cpf() {
    local cpf=$1
    cpf=$(echo "$cpf" | tr -d '^[0-9]')
    if [[ ${#cpf} -ne 11 || "$cpf" =~ ^(0{11}|1{11}|2{11}|3{11}|4{11}|5{11}|6{11}|7{11}|8{11}|9{11})$ ]]; then
        echo "false"
        return
    fi
    local digito1=$(echo "$cpf" | cut -c1-9 | awk '{ sum=0; for(i=1;i<=9;i++) sum+=substr($0,i,1)*(11-i); if((sum*10%11%10)==substr($0,10,1)) print "true"; else print "false"; }')
    local digito2=$(echo "$cpf" | cut -c1-10 | awk '{ sum=0; for(i=1;i<=10;i++) sum+=substr($0,i,1)*(12-i); if((sum*10%11%10)==substr($0,11,1)) print "true"; else print "false"; }')
    if [[ "$digito1" == "true" && "$digito2" == "true" ]]; then
        echo "true"
    else
        echo "false"
    fi
}

valida_cpf "$1"

Processar JSON com jq e script Bash

Use o jq para iterar sobre cada CPF no arquivo JSON, chamando o script Bash para validação. O resultado será um novo JSON com o campo "valido" adicionado.

jq -c '.[] | .valido=([env.CPF] | @sh | xargs -I {} bash valida_cpf.sh "{}")' --argfile data input.json

Exemplo Prático

Considere o seguinte arquivo JSON de entrada:

[
    {"nome": "João", "cpf": "12345678909"},
    {"nome": "Maria", "cpf": "11144477735"},
    {"nome": "Pedro", "cpf": "00000000000"}
]

Após processar com o script e jq, o JSON de saída será:

nome cpf valido
João 12345678909 false
Maria 11144477735 true
Pedro 00000000000 false

Conclusão

Com este método, você automatiza a validação de CPFs em arquivos JSON diretamente no terminal Linux, eliminando erros manuais e economizando tempo valioso em tarefas repetitivas.