Validador de RENAVAM

Este validador confere se um número de RENAVAM é válido pelo cálculo do dígito verificador. Ele aceita o formato atual, com 11 dígitos, e o antigo, com 9, que ganha dois zeros à esquerda. Serve para pegar erros de digitação em cadastros e testar sistemas; ele não consulta o Detran, então não mostra o dono nem a situação do veículo.

Atualizado em · Por Leonardo Gaertner

Achou um resultado errado ou tem uma sugestão? Avise por e-mail.

Como usar

  1. Digite ou cole o RENAVAM, com ou sem pontuação.
  2. Com 11 dígitos, o resultado aparece na hora. Para o antigo, de 9, saia do campo.
  3. Se aparecer inválido, confira se algum número foi trocado.

Como funciona

O último dígito do RENAVAM é calculado a partir dos 10 anteriores: cada um é multiplicado por um peso (3, 2, 9, 8, 7, 6, 5, 4, 3 e 2), a soma é multiplicada por 10 e dividida por 11, e o resto é o dígito, com 10 virando 0. O validador refaz a conta e compara com o dígito digitado.

Uma troca de um único número quase sempre muda o resultado, por isso a conferência pega a maioria dos erros de digitação. Um número válido no cálculo, porém, pode não pertencer a nenhum veículo: só a consulta ao Detran confirma.

Exemplos

26827649960: válido

26827649961: inválido (o dígito certo é 0)

639854150 (antigo, 9 dígitos): válido, e no formato atual fica 00639854150

Como conferimos esta ferramenta

O cálculo do dígito é comparado com duas bibliotecas independentes: a validation-br, em JavaScript, e a validate-docbr, em Python, em milhares de números sorteados, inclusive no formato antigo de 9 dígitos. Veja como o site é testado.

Em código

Para validar o RENAVAM no seu sistema, este é o mesmo cálculo da ferramenta: completa o número antigo com zeros, recusa sequências repetidas e confere o dígito.

JavaScript
// Valida o RENAVAM: 11 dígitos (os antigos, de 9, ganham dois zeros à esquerda).
// O dígito é (soma dos 10 primeiros × pesos 3,2,9,8,7,6,5,4,3,2) × 10 mod 11, e 10 vira 0.
function validarRenavam(valor) {
  let r = String(valor).replace(/\D/g, '');
  if (r.length === 9) r = r.padStart(11, '0');
  if (r.length !== 11 || /^(\d)\1{10}$/.test(r)) return false;
  const pesos = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
  const soma = pesos.reduce((s, p, i) => s + Number(r[i]) * p, 0);
  const dv = ((soma * 10) % 11) % 10; // resto 10 vira 0
  return dv === Number(r[10]);
}

console.log(validarRenavam('26827649960')); // true
Python
import re


def validar_renavam(valor: str) -> bool:
    r = re.sub(r"\D", "", str(valor))
    if len(r) == 9:  # RENAVAM antigo: completa com zeros à esquerda
        r = r.zfill(11)
    if len(r) != 11 or r == r[0] * 11:
        return False
    pesos = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
    soma = sum(int(d) * p for d, p in zip(r, pesos))
    dv = (soma * 10) % 11 % 10  # resto 10 vira 0
    return dv == int(r[10])


print(validar_renavam("26827649960"))  # True
PHP
<?php
function validarRenavam(string $valor): bool
{
    $r = preg_replace('/\D/', '', $valor);
    if (strlen($r) === 9) {
        $r = str_pad($r, 11, '0', STR_PAD_LEFT); // RENAVAM antigo
    }
    if (strlen($r) !== 11 || preg_match('/^(\d)\1{10}$/', $r)) {
        return false;
    }
    $pesos = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
    $soma = 0;
    foreach ($pesos as $i => $p) {
        $soma += (int) $r[$i] * $p;
    }
    $dv = ($soma * 10) % 11 % 10; // resto 10 vira 0
    return $dv === (int) $r[10];
}

var_dump(validarRenavam('26827649960')); // bool(true)

Perguntas frequentes

Onde encontro o RENAVAM do meu carro?

No documento do veículo (CRLV), impresso ou digital, no aplicativo Carteira Digital de Trânsito e nos sites dos Detrans. Ele tem 11 dígitos, ou 9 nos documentos mais antigos.

Este validador consulta débitos ou o dono do veículo?

Não. Ele só confere o cálculo do dígito verificador, sem acessar nenhum cadastro. O número digitado não sai do seu navegador.

Como validar RENAVAM no meu sistema?

Use o código desta página, em JavaScript, Python ou PHP: ele faz a mesma conta do validador e já trata o formato antigo de 9 dígitos.