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()));
});
})