Chassi (VIN)
Números de identificação veicular (chassi): validação estrutural e do dígito verificador.
Validar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca4 casos falham
- Ruby, biblioteca3 casos falham
- Rust, biblioteca4 casos falham
- .NET, biblioteca4 casos falham
- Erlang, biblioteca
Valida um chassi (VIN): 17 caracteres nas três seções da Resolução CONTRAN nº 968/2022, art. 3º (WMI, VDS e VIS), cada um um dígito ou uma letra que não seja I, O ou Q. A validação ignora maiúsculas e minúsculas e os espaços nas pontas.
- A regra brasileira não exige dígito verificador, e muitos chassis fabricados no Brasil não o têm, então por padrão a função não o verifica:
9BWZZZ377VT004251é válido. A 2.4.0 sempre exigia o dígito verificador norte-americano. options.checkDigit: trueacrescenta as regras norte-americanas do 49 CFR 565.15: o 9º caractere precisa ser o dígito verificador por módulo 11 ponderado (0a9ouX), e o 10º (ano-modelo) não pode serU,Znem0. Use para um veículo fabricado para os Estados Unidos ou o Canadá, ou para manter o resultado da 2.4.0.- A exclusão de
I,OeQvem da ISO 3779:2009, não da resolução: a resolução não lista caractere proibido e remete a gravação à ABNT NBR 6066:2022 (art. 5º). Os chassis de regularização do Anexo II dela (WMIXXX) são escritos sem essas letras, então passam. - Um VIN não tem agrupamento impresso, então um espaço,
.,-ou/no meio dele torna o valor inválido. - Um VIN com todos os caracteres iguais é rejeitado.
- Só contam as letras ASCII e os dígitos. Uma letra não ASCII que vira letra ASCII ao ser passada para maiúscula (
ß,ſ) é rejeitada. Até a 2.4.0 esses caracteres eram convertidos em letras ASCII. options.checkDigitéfalsepor padrão.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
value | string | sim |
options | IsValidVinOptions | não |
options.checkDigit | boolean | não |
| retorna | boolean |
Valida um VIN (Vehicle Identification Number / chassi). Por padrão confere 17 caracteres nas três seções da Resolução CONTRAN nº 968/2022, art. 3º (o WMI, o VDS e o VIS), cada um algarismo ou letra maiúscula exceto I, O e Q.
- A exclusão de
I,OeQvem da ISO 3779, não da resolução: ela não lista caractere proibido e remete a gravação à ABNT NBR 6066:2022 (art. 5º), norma paga sem cópia oficial gratuita. Os VINs de regularização do Anexo II dela (WMIXXX) são escritos sem essas letras, então passam. - Opções (
IsValidVinOptions):checkDigit: truetambém exige as regras norte-americanas do 49 CFR 565.15, o dígito verificador na 9ª posição e um código de ano-modelo diferente deU,Ze0na 10ª. Use para o VIN de um veículo fabricado para os Estados Unidos ou o Canadá. - As normas brasileiras não exigem o dígito verificador, e muitos VINs fabricados no Brasil não o têm. Até a 2.4.0 ele era sempre exigido; passe
{ checkDigit: true }para manter esse comportamento. - Não diferencia maiúsculas de minúsculas e ignora espaços ao redor; um valor de um único caractere repetido é rejeitado. Um VIN é impresso em uma sequência contínua, então espaço,
.,-ou/entre os caracteres é rejeitado em vez de removido. Só contam letras ASCII e algarismos: uma letra não ASCII que vira letra ASCII em maiúsculas (ſ,ß) é rejeitada.
import { isValidVin } from '@brazilian-utils/brazilian-utils';
isValidVin('9BWZZZ377VT004251'); // true (VIN brasileiro, sem dígito verificador)
isValidVin('9BWZZZ377VT004251', { checkDigit: true }); // false (o 9º caractere não é o dígito verificador)
isValidVin('1HGCM82633A004352', { checkDigit: true }); // true
isValidVin('1m8gdm9axkp042788', { checkDigit: true }); // true (dígito verificador X, minúsculo)
isValidVin('1HGCM82633A004353', { checkDigit: true }); // false (dígito verificador inválido)
isValidVin('00000000000000000'); // false (todos os caracteres iguais)
isValidVin('1HGCM8263IA004352'); // false (contém a letra excluída I)
isValidVin('1HGCM82633A00435'); // false (16 caracteres)
isValidVin('1HGCM 82633 A004352'); // false (um separador entre os caracteres)Fonte: ISO 3779:2009, 49 CFR 565.15 e Resolução CONTRAN nº 968/2022.
Código: brazilian-utils/javascriptTeste com JavaScript isValidVin
Casos de teste compartilhados (43) e o resultado em cada biblioteca vin.isValid
Fontes oficiais
- iso.org/standard/52200.html
- ecfr.gov/current/title-49/…/section-565.15
- gov.br/transportes/pt-br/…/resolucao9682022.pdf
- vpic.nhtsa.dot.gov/api
Veja também RENAVAM
Atualizado em
