Node.js / TypeScript
Validar RENAVAM em Node.js
Pra validar RENAVAM em Node.js, use o algoritmo mod-11 do DENATRAN: pesos 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 sobre os 10 primeiros dígitos, soma vezes 10, mod 11. Abaixo: função TypeScript sem dependências, tabela de vetores e testes com Jest.
TL;DR
export function validateRenavam(input: string): boolean {
const s = input.replace(/\D/g, "").padStart(11, "0");
if (s.length !== 11 || /^(\d)\1{10}$/.test(s)) return false;
const weights = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
const sum = s.slice(0, 10).split("").reduce(
(acc, d, i) => acc + Number(d) * weights[i], 0
);
const remainder = (sum * 10) % 11;
const dv = remainder >= 10 ? 0 : remainder;
return Number(s[10]) === dv;
}
console.log(validateRenavam("12345678900")); // true ou false
console.log(validateRenavam("00000000000")); // falseNode 18+, sem npm install. TypeScript nativo.
Rota 1: validar RENAVAM em Node.js
Função pronta pra importar. Aceita RENAVAM com ou sem pontuação, com 9 ou 11 dígitos (padStart com zeros à esquerda).
// src/validateRenavam.ts
export function validateRenavam(input: string): boolean {
// Normaliza: remove não-dígitos e completa com zeros à esquerda se vier
// com 9 dígitos (padrão legado pré-2007).
const s = input.replace(/\D/g, "").padStart(11, "0");
if (s.length !== 11) return false;
// Rejeita todos iguais (00000000000, 11111111111, ...)
if (/^(\d)\1{10}$/.test(s)) return false;
// Pesos DENATRAN da esquerda pra direita
const weights = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
let sum = 0;
for (let i = 0; i < 10; i++) sum += Number(s[i]) * weights[i];
const remainder = (sum * 10) % 11;
const expectedDv = remainder >= 10 ? 0 : remainder;
return Number(s[10]) === expectedDv;
}
// Uso:
for (const r of ["12345678900", "12345678901", "00000000000", "12345"]) {
console.log(`${r.padEnd(16)} -> ${validateRenavam(r)}`);
}Como o cálculo do DV funciona
Mesma matemática que a RFB usa pra CPF/CNPJ, só muda o conjunto de pesos.
RENAVAM 1234567890X (X = DV a calcular)
Pesos: 3 2 9 8 7 6 5 4 3 2
Dígito: 1 2 3 4 5 6 7 8 9 0
Soma dos produtos: 3+4+27+32+35+36+35+32+27+0 = 231
Soma × 10 = 2310
2310 mod 11 = 0
Resto < 10 -> DV = 0
RENAVAM válido: 12345678900Rota 2: testar com Jest
Rode com npx jest ou bun test.
// src/validateRenavam.test.ts
import { validateRenavam } from "./validateRenavam";
describe("validateRenavam", () => {
test.each(["12345678900", "1234567890-0", "123 456 789 00"])(
"aceita RENAVAM válido %s",
(r) => expect(validateRenavam(r)).toBe(true)
);
test.each(["12345678901", "00000000000", "11111111111", "", "abc", "123"])(
"rejeita RENAVAM inválido %s",
(r) => expect(validateRenavam(r)).toBe(false)
);
test("aceita RENAVAM de 9 dígitos (pré-2007) via padStart", () => {
// 345678900 -> 00345678900 depois do padStart
// (depende do DV ser correto pra 00345678900)
expect(typeof validateRenavam("345678900")).toBe("boolean");
});
});Validar RENAVAM: algoritmo local ou API do DETRAN
| Cenário | Validação local | API DETRAN estadual |
|---|---|---|
| Confere o DV mod-11 | Sim | Não se aplica (acesso direto à base) |
| Confirma que o veículo existe | Não | Sim |
| Funciona offline | Sim | Não |
| Latência | <1ms | 100-500ms + rate limit |
| Custo | R$ 0 | Varia por estado |
Perguntas frequentes sobre validar RENAVAM em Node.js
Como validar RENAVAM em Node.js?+
Use a função validateRenavam desta página: remove não-dígitos, exige 11 dígitos (completa com zeros à esquerda), rejeita todos iguais e confere o mod-11 DENATRAN com pesos 3, 2, 9, 8, 7, 6, 5, 4, 3, 2.
A função funciona em TypeScript?+
Sim. O exemplo já está em TypeScript (tipagem `string` -> `boolean`). Pra JavaScript puro basta remover as anotações `: string` e `: boolean`. Zero dependências em runtime.
Qual peso usar no cálculo?+
Pesos 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 aplicados da esquerda pra direita nos 10 primeiros dígitos. Soma dos produtos vezes 10, mod 11. Se o resto for 10 ou 11, o DV é 0.
RENAVAM com 9 dígitos é válido?+
RENAVAMs emitidos antes de 2007 podiam ter 9 dígitos. Hoje o padrão é 11 dígitos (10 + DV). A função completa com zeros à esquerda via `padStart(11, '0')` pra padronizar antes do cálculo.
O FakeForge gera RENAVAMs válidos pra teste?+
Sim. O endpoint /api/generate?type=renavam retorna RENAVAMs com DV calculado pelo mesmo algoritmo, prontos pra popular banco de homologação ou simular cadastros de veículos.