@cloud20x/vin-decoder
Version:
VIN (Vehicle Identification Number) Decoder Lite
109 lines (97 loc) • 2.71 kB
JavaScript
var vin = require("./");
const fs = require("fs");
const brands = require("./newStuff/brand_options.json");
const vins = require("./newStuff/vin_mapping.json");
// Save brands name
let brandsObj = {};
for (let k = 0; k < brands.length; k++) {
brandsObj[brands[k].brand_guid] = {
name: brands[k].brand_name,
options: {},
wmi: [],
};
}
// Save brands WMIs
const keys = Object.keys(brandsObj);
for (let k = 0; k < vins.length; k++) {
if (keys.find((ky) => ky == vins[k].mb_brand_guid)) {
let obj = brandsObj[vins[k].mb_brand_guid];
if (!obj.wmi.find((w) => w == vins[k].vin_wmi_part)) {
obj.wmi.push(vins[k].vin_wmi_part);
}
}
}
// Save options
for (let k = 0; k < brands.length; k++) {
let obj = brandsObj[brands[k].brand_guid];
obj.options[brands[k].mb_option_manufacturer_ordercode] =
brands[k].mb_option_name;
}
// Write manufacturers
keys.map((k) => {
const fileName = brandsObj[k].name.toLowerCase().replaceAll(" ", "_");
const filePath = `./db/manufacturers/${fileName}.js`;
const content = `const wmi = ${JSON.stringify(brandsObj[k].wmi)};
const options = ${JSON.stringify(brandsObj[k].options, null, 2)};
const modelYears = require('../modelyears.json');
const rangeYearSelector = require('../../lib/rangeYearSelector');
module.exports = {
wmi,
decode: function(vin) {
let optionCode = vin.slice(3, -11)
if(options[optionCode]) {
return 'OK'
}
}
}`;
fs.writeFileSync(filePath, content, (error) => {
console.log({ error });
});
});
// Write manufacturersIndex.json
let content = {};
keys.map((k) => {
content[brandsObj[k].name.toLowerCase().replaceAll(" ", "_")] =
brandsObj[k].wmi;
});
fs.writeFileSync(
"./db/manufacturersIndex.json",
JSON.stringify(content, null, 2),
(error) => {
console.log({ error });
}
);
// Test
const testVins = fs.readFileSync(
"./newStuff/positivetestcases.test.xxl",
"utf-8",
(error) => {
console.log({ error });
}
);
const vinsArr = testVins.split("\n");
let valids = [];
let notValids = [];
for (let k = 0; k < vinsArr.length; k++) {
if (vin.isValid(vinsArr[k])) {
valids.push(vinsArr[k]);
} else notValids.push(vinsArr[k]);
}
console.log("Total cases: ", vinsArr.length);
console.log("Valids: ", valids.length);
console.log("Not valids: ", notValids.length);
/*
// list all notValids
for(i=0;i<notValids.length;i++) {
console.log(notValids[i])
}
*/
/*
// decode some of the vins
for(i=0;i<valids.length;i=i+25) {
console.log(vin.decode(valids[i]))
}
*/
// test single VIN
//console.log("WBADATTESTSTUB001", vin.isValid("WBADATTESTSTUB001"))
//console.log("ZFADATTESTSTUB001", vin.isValid("ZFADATTESTSTUB001"))