Chassi (VIN)

Números de identificação veicular (chassi): validação estrutural e do dígito verificador.

  • Matriz de paridade

Validar

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: true acrescenta as regras norte-americanas do 49 CFR 565.15: o 9º caractere precisa ser o dígito verificador por módulo 11 ponderado (0 a 9 ou X), e o 10º (ano-modelo) não pode ser U, Z nem 0. 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, O e Q vem 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 (WMI XXX) 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 é false por padrão.
ParâmetroTipoObrigatório
valuestringsim
optionsIsValidVinOptionsnão
options.checkDigitbooleannão
retornaboolean

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, O e Q vem 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 (WMI XXX) são escritos sem essas letras, então passam.
  • Opções (IsValidVinOptions): checkDigit: true també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 de U, Z e 0 na 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/javascript
Teste com JavaScript isValidVin
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (43) e o resultado em cada biblioteca vin.isValid

Fontes oficiais

Veja também RENAVAM

Atualizado em

Nesta página