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")); // false

Node 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: 12345678900

Rota 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árioValidação localAPI DETRAN estadual
Confere o DV mod-11SimNão se aplica (acesso direto à base)
Confirma que o veículo existeNãoSim
Funciona offlineSimNão
Latência<1ms100-500ms + rate limit
CustoR$ 0Varia 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.

Páginas relacionadas