Bash / curl / Shell

Validar RENAVAM via curl

Pra validar RENAVAM via linha de comando, aplica o mod-11 do DENATRAN com uma função Bash de 15 linhas. Útil em CI/CD, gate de PR e scripts de seed. Abaixo: função standalone, exemplos de uso e integração com API do DETRAN estadual.

TL;DR

#!/bin/bash
valida_renavam() {
  local s=$(printf '%s' "$1" | tr -cd '0-9')
  s=$(printf '%011s' "$s" | tr ' ' 0)
  [ ${#s} -ne 11 ] && return 1
  [[ "$s" =~ ^(.)\1{10}$ ]] && return 1
  local pesos=(3 2 9 8 7 6 5 4 3 2) soma=0 i
  for i in {0..9}; do soma=$((soma + ${s:$i:1} * ${pesos[$i]})); done
  local resto=$(( (soma * 10) % 11 ))
  local dv=$([ "$resto" -ge 10 ] && echo 0 || echo "$resto")
  [ "${s:10:1}" -eq "$dv" ]
}

valida_renavam "12345678900" && echo OK || echo FAIL

Bash 4+, sem dependências externas. GNU coreutils padrão.

Rota 1: função Bash standalone

Salva como valida_renavam.sh e importa onde precisar.

#!/bin/bash
# valida_renavam.sh — mod-11 DENATRAN pra RENAVAM
# Uso: valida_renavam "12345678900"
# Retorna: 0 se válido, 1 se inválido

valida_renavam() {
  # Normaliza: só dígitos, pad com zeros à esquerda até 11 chars
  local s=$(printf '%s' "$1" | tr -cd '0-9')
  s=$(printf '%011s' "$s" | tr ' ' 0)

  # Comprimento exato de 11
  [ ${#s} -ne 11 ] && return 1

  # Rejeita todos iguais (00000000000, 11111111111, ...)
  [[ "$s" =~ ^(.)\1{10}$ ]] && return 1

  # Pesos DENATRAN
  local pesos=(3 2 9 8 7 6 5 4 3 2)
  local soma=0 i
  for i in {0..9}; do
    soma=$((soma + ${s:$i:1} * ${pesos[$i]}))
  done

  # Dígito verificador esperado
  local resto=$(( (soma * 10) % 11 ))
  local dv
  if [ "$resto" -ge 10 ]; then
    dv=0
  else
    dv=$resto
  fi

  # Compara com o 11º dígito do input
  [ "${s:10:1}" -eq "$dv" ]
}

# Exemplos
for r in "12345678900" "12345678901" "00000000000" "123"; do
  if valida_renavam "$r"; then
    echo "$r: VALIDO"
  else
    echo "$r: INVALIDO"
  fi
done

Rota 2: pré-filtrar antes de consultar API DETRAN

A consulta real ao DETRAN é paga. Validar o DV localmente antes economiza chamadas inválidas e reduz custo.

#!/bin/bash
# consulta_detran.sh — valida local depois chama API paga
source valida_renavam.sh

RENAVAM="$1"
TOKEN="$DETRAN_API_TOKEN"

if ! valida_renavam "$RENAVAM"; then
  echo "RENAVAM inválido no DV. Nem chamo a API." >&2
  exit 1
fi

# Só chega aqui se o DV passou
curl -sS \
  -H "Authorization: Bearer $TOKEN" \
  "https://api.detran-sp.gov.br/v1/veiculos/renavam/$RENAVAM" \
  | jq '.marca, .modelo, .ano'

Rota 3: gate de PR em CI/CD

GitHub Action que roda em cada PR, lê CSV de fixtures e falha se algum RENAVAM for inválido.

# .github/workflows/validate-fixtures.yml
name: Validate test fixtures
on: [pull_request]
jobs:
  renavam-dv:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Check RENAVAMs no CSV
        run: |
          source scripts/valida_renavam.sh
          falhas=0
          while IFS=, read -r plate renavam rest; do
            if ! valida_renavam "$renavam"; then
              echo "::error::RENAVAM inválido em fixture: $renavam"
              falhas=$((falhas + 1))
            fi
          done < fixtures/veiculos.csv
          [ "$falhas" -eq 0 ]

Gerar RENAVAMs válidos via API do FakeForge

Pra popular fixtures e banco de homologação com dados que passam no validador.

# 10 RENAVAMs válidos pra fixture
curl -sS "https://fakeforge.com.br/api/generate?type=renavam&quantity=10" \
  | jq -r '.data[]'

# 100 RENAVAMs em SQL pronto pra inserir
curl -sS "https://fakeforge.com.br/api/generate?type=renavam&quantity=100&format=sql"

# Combinado: pessoa + veículo (preset futuro)
curl -sS "https://fakeforge.com.br/api/generate?preset=customer&quantity=50"

Perguntas frequentes sobre validar RENAVAM via curl

Como validar RENAVAM via linha de comando?+

Use a função Bash desta página: ela normaliza o input (remove não-dígitos, completa com zeros à esquerda), rejeita todos iguais e aplica o mod-11 DENATRAN com pesos 3, 2, 9, 8, 7, 6, 5, 4, 3, 2. Zero dependências além de bash e GNU tools padrão.

A validação local funciona em pipelines CI/CD?+

Sim. A função não faz chamada HTTP, roda em qualquer runner (GitHub Actions, GitLab CI, Jenkins). Útil pra validar fixtures de teste antes do deploy, verificar seed de banco em staging, ou gate de PR que impede merge com dados inválidos.

Como integrar com API do DETRAN pra consulta real?+

A API do DETRAN estadual (SP, RJ, MG, etc) exige credenciais e cobra por consulta. A validação local via mod-11 serve pra pré-filtrar antes da consulta paga: só chama a API se o RENAVAM passar no DV, economizando chamadas inválidas.

RENAVAM com 9 dígitos funciona?+

RENAVAMs legados pré-2007 têm 9 dígitos. A função completa com zeros à esquerda via printf até chegar em 11 dígitos antes de aplicar o algoritmo. Isso evita false negatives em bases antigas.

O FakeForge gera RENAVAMs via API?+

Sim. curl 'https://fakeforge.com.br/api/generate?type=renavam&quantity=10' retorna 10 RENAVAMs com DV calculado, prontos pra popular banco de homologação, simular cadastro de veículos ou testar fluxo de despachante.

Páginas relacionadas