Digite o RENAVAM do veículo e veja na hora se o tamanho e o dígito verificador estão corretos.
Processamento local: nada do que você digita sai do seu navegador.
Como usar
Digite o RENAVAM, que aparece no CRLV. O padrão atual tem 11 dígitos; números antigos de 9 ou 10 dígitos são completados com zeros à esquerda antes da conta. O resultado aparece enquanto você digita.
Como o dígito verificador é calculado
Multiplicam-se os 10 primeiros dígitos pelos pesos 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 e somam-se os produtos. A soma multiplicada por 10, dividida por 11, deixa um resto: esse é o dígito verificador, e se for 10 vira 0.
Isso só mostra que o número é consistente. A ferramenta não consulta o Detran nem o Senatran, então não confirma que o veículo existe, de quem é, nem sua situação.
Como implementar em código
Exemplos prontos para usar no seu projeto.
// RENAVAM: 11 dígitos (os antigos, de 9, ganham zeros à esquerda)
function renavamValido(valor) {
let n = String(valor).replace(/\D/g, '');
if (n.length < 9 || n.length > 11) return false;
n = n.padStart(11, '0');
if (/^(\d)\1{10}$/.test(n)) return false;
const pesos = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
const soma = pesos.reduce((acc, p, i) => acc + p * Number(n[i]), 0);
let dv = (soma * 10) % 11;
if (dv === 10) dv = 0;
return dv === Number(n[10]);
}
console.log(renavamValido('86769597308')); // true
import re
def renavam_valido(valor: str) -> bool:
"""RENAVAM: 11 dígitos (os antigos, de 9, ganham zeros à esquerda)."""
n = re.sub(r"\D", "", valor)
if not 9 <= len(n) <= 11:
return False
n = n.zfill(11)
if len(set(n)) == 1:
return False
pesos = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
soma = sum(p * int(c) for p, c in zip(pesos, n))
dv = (soma * 10) % 11
if dv == 10:
dv = 0
return dv == int(n[10])
print(renavam_valido("86769597308")) # True
import (
"regexp"
"strings"
)
var naoDigito = regexp.MustCompile(`\D`)
// RenavamValido valida o RENAVAM (11 dígitos; os de 9 ganham zeros à esquerda).
func RenavamValido(valor string) bool {
n := naoDigito.ReplaceAllString(valor, "")
if len(n) < 9 || len(n) > 11 {
return false
}
n = strings.Repeat("0", 11-len(n)) + n
pesos := []int{3, 2, 9, 8, 7, 6, 5, 4, 3, 2}
soma, repetido := 0, true
for i := 0; i < 11; i++ {
if n[i] != n[0] {
repetido = false
}
if i < 10 {
soma += pesos[i] * int(n[i]-'0')
}
}
if repetido {
return false
}
dv := (soma * 10) % 11
if dv == 10 {
dv = 0
}
return dv == int(n[10]-'0')
}
/// RENAVAM: 11 dígitos (os antigos, de 9, ganham zeros à esquerda).
bool renavamValido(String valor) {
var n = valor.replaceAll(RegExp(r'\D'), '');
if (n.length < 9 || n.length > 11) return false;
n = n.padLeft(11, '0');
if (RegExp(r'^(\d)\1{10}$').hasMatch(n)) return false;
const pesos = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
var soma = 0;
for (var i = 0; i < 10; i++) {
soma += pesos[i] * int.parse(n[i]);
}
var dv = (soma * 10) % 11;
if (dv == 10) dv = 0;
return dv == int.parse(n[10]);
}
final class Validador {
/** RENAVAM: 11 dígitos (os antigos, de 9, ganham zeros à esquerda). */
static boolean renavamValido(String valor) {
String n = valor.replaceAll("\\D", "");
if (n.length() < 9 || n.length() > 11) return false;
n = "0".repeat(11 - n.length()) + n;
if (n.matches("(\\d)\\1{10}")) return false;
int[] pesos = {3, 2, 9, 8, 7, 6, 5, 4, 3, 2};
int soma = 0;
for (int i = 0; i < 10; i++) soma += pesos[i] * (n.charAt(i) - '0');
int dv = (soma * 10) % 11;
if (dv == 10) dv = 0;
return dv == n.charAt(10) - '0';
}
}