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 FAILBash 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
doneRota 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.