VIN validation

by itzfender

HTML

<input type="text" id="vin" />

TypeScript

function transliterate(c: string): number {
  return '0123456789.ABCDEFGH..JKLMN.P.R..STUVWXYZ'.indexOf(c) % 10;
}

function getCheckDigit(vin: string): string {
  let map: string = '0123456789X';
  let weights: string = '8765432X098765432';
  let sum: number = 0;
  for (let i: number = 0; i < 17; ++i)
    sum += transliterate(vin[i]) * map.indexOf(weights[i]);
  return map[sum % 11];
}

function validateVin(vin: string): boolean {
  if (vin.length !== 17) return false;
  return getCheckDigit(vin) === vin[8];
}

$(document).ready(function() {
  $("body").on('blur', '#vin', function() {
    let $vin = $("#vin");
    $vin.val(function() {
      return this.value.toUpperCase();
    });
    console.log(validateVin($vin.val()));
  });
})