UNPKG

vin-lite

Version:

VIN (Vehicle Identification Number) Checker Lite

264 lines (253 loc) 9.18 kB
const wmi = [ 'YV1', 'YV2', 'YV3', 'YV4', '4V1', '4V2', '4V3', '4V4', '4V5', '4V6', '4VL', '4VM', '4VZ', 'MHA'], vechileCode = { 'A': { '2006': '240', '2015': 'S80', 'present': 'XC90' }, 'B': { '2008': '260', 'present': 'V70, XC70' }, 'C': 'XC90', 'D': 'XC60', 'F': { '2010': '740', 'present': 'New S60/V60' }, 'G': { '2010': '760', 'present': 'V60 Plug-In Hybrid' }, 'H': '780', 'J': 'V70', 'K': '960', 'L': { '1998': '850, S70', 'present': 'V70' }, 'M': { '2013': 'S40, V50, C30, C70', 'present': 'V40' }, 'R': { '2013': 'S40, V50, C30, C70', 'present': 'S60' }, 'S': 'V70, XC70', 'T': 'S80', 'V': 'V40', }, safety = { 'A': 'Air Bag & 3-Point Safety Harness (Seat Belt)', 'X': '3-Point Safety Harness (Seat Belt)' }, body_and_safety = { 'S': 'Sedan (4-door) with Air Bag & 3-Point Safety Harness (Seat Belt)', 'W': 'Wagon (5-door) with Air Bag & 3-Point Safety Harness (Seat Belt)', 'T': 'Sedan (4-door) 3-Point Safety Harness (Seat Belt) - Canada', 'X': 'Wagon (5-door) 3-Point Safety Harness (Seat Belt) - Canada' }, vehicle_platform = { 'C': 'All-New C70', 'H': 'S40 AWD, S60 AWD, S80 AWD', 'J': 'V50 AWD, V70 AWD', 'K': 'C30 FWD', 'L': 'XC60 2WD', 'M': { '2013': 'XC90 5-Seater AWD', 'present': 'V40 Cross Country AWD' }, 'N': 'XC90 5-Seater FWD', 'R': 'XC90 5-Seater AWD', 'S': 'S40 FWD, S60 FWD, S80 FWD', 'V': 'V40 FWD', 'W': 'V50 FWD, V60 FWD, V60 Plug-In Hybrid (AWD), V70 FWD, V70 AWD', 'Y': 'XC90 7-Seater FWD', 'Z': 'XC60 AWD, XC70 AWD, XC90 7-Seater AWD' }, digit5Arr = { '1992': { 'description': 'SafetyEquipment', 'data': safety }, '1998': { 'description': 'BodyandSafetyEquipment', 'data': body_and_safety }, 'present': { 'description': 'VehiclePlatform', 'data': vehicle_platform } }, engineCodeArr = { '17': 'B4204S2 V40 2.0l FWD', '18': 'B4194T V40 1.9l Turbo FWD', '20': 'B4164S3 C30 1.6 FWD', '21': 'B4184S11 V50/S40 1.8', '30': 'D5244T18 XC90 2.4 AWD', '38': 'B5244S4 S40/V50 2.4i FWD', '39': 'B5244S7 S40/V50 2.4i FWD', '40': 'B4204T11 S60/V60 2.0 T5 FWD', '41': 'B5202S 850/V70 2.0i FWD', '43': 'B5204T3 850/V70/S80 2.0 T5 FWD', '47': 'B5204T 850/V70 2.0 T5 FWD', '51': 'B5252S 850/V70 2.5i FWD or D5204T6 V40/V40CC D3/D4', '52': 'B5254T4 S60/V70 R AWD', '53': 'B5234T3 S60/V70 T5 FWD', '54': 'B5244T5 S60 T5 FWD', '55': 'B5254FS 850/V70/S70 FWD', '56': { '2000': 'B5254T S70/V70 GLT FWD - 1999', 'present': 'B5244T 2000 -' }, '57': 'B5234T 850/V70 2.3T FWD Turbo', '58': 'B5234T5 1995-1997 850 T-5R/R ; B5244T3 S60/V70/S80/XC70 2000 -', '59': 'B5254T2 S80/S60/XC90 2.5T FWD/AWD, V70 2.5T FWD, XC70 AWD', '61': 'B5244S S60/V70 2.4 FWD', '64': 'B5244S6 S60/V70 2.4 FWD', '65': 'B5244S2 S80/V70 2.4 FWD', '66': 'B5244S5 S40/V50 2.4 FWD', '67': 'B5244S4 C30/C70 T5 FWD', '68': 'B5254T3 S40/V50 T5 FWD/AWD', '69': 'D5244T5 S80/V70 2.4D FWD', '70': 'D4192T3 S40/V40 / D5244T10 XC60 AWD D5(205)', '71': 'D5244T4 V70 AWD D5(185), XC90 AWD D5(185)', '72': 'D5252T S70/S80 2.5TDi FWD', '73': 'D4192T2 S40/V40', '74': 'D5244T2', '75': 'D4204T C30 2.0D', '76': 'D4164T 1.6D (PSA-Ford Engine)', '77': { '1984': 'D24 (1981-1984)', 'present': 'D5244T8 S40 D5 AT' }, '78': 'D4192T4 S40/V40', '79': 'D5244T D5(163)', '82': 'D5244T15 XC60 AWD D5(215)', '84': 'D4162T S60', '85': 'B8444S XC90/S80 V8 AWD', '88': { '1985': 'B23F (1983-1984)', '1995': 'B230F (1985-95)', 'present': 'D5204T3 XC60' }, '90': 'B6284T S80 2.8 T6', '91': 'B6294T S80/XC90 2.9 T6', '94': 'B6294S S80 2.9 FWD', '97': 'B6299S S80 2.9 FWD', '98': 'B6324S XC90/S80/V70 3.2 FWD/XC70 AWD', '99': 'B6304T4 S80 3.0 T6 AWD', 'AA': 'V60 Plug-In Hybrid', '11': 'B17A', '24': 'B19E', '26': 'B19ET', '37': 'D20', '44': 'B21E', '45': 'B21F', '46': 'B21ET', '48': 'B21LH Jet', '49': 'B21F MPG (1981), B21F Kjet (1982)', '62': 'B28A', '80': 'B230G', '81': 'B23A', '83': 'B230FD w/ pulsair', '86': 'B230FT - EGR', '87': 'B230FT - non EGR', '89': 'B234F', '92': 'B6244F', '93': 'B6254F', '95': 'B6304F with air pump', '96': 'B6204F without air pump', }, digit8Arr = { '1992': { 'description': 'SafetyEquipment', 'data': { '2': '2 Door', '4': '4 Door', '5': '5 Door (Wagon)', '7': '2 Door Coupe (Bertone)' } }, 'present': { 'description': 'EmissionControlEquipment', 'data': { '0': 'SULEV+ (Super Ultra Low Emissions Vehicle) / Engine Codes 39, 55, 64, 72', '2': 'ULEV2 (Ultra Low Emissions Vehicle) / Engine Codes 38, 41, 51, 59, 61, 67, 68, 85, 98, 99', '4': 'Engine Codes 71', '7': 'LEV2 (Low Emissions Vehicle) / Engine Codes 52, 54', '8': 'Engine Codes 70', 'D': 'L6' } } }, gearboxArr = { 1: 'M90/M56 Manual (USA - CDN Check Code)', 2: 'M46/M59/MTX75 Manual (USA - CDN Check Code)', 3: 'M47/M58 Manual (USA - CDN Check Code)', 4: 'M66 Manual (USA - CDN Check Code)', 5: 'ZF22 (USA - CDN Check Code)', 6: 'AW70/71/72 lock-up / AW42 Auto (USA - CDN Check Code)', 7: 'AW70/71 no lock-up / AW50AWD Auto (USA - CDN Check Code)', 8: 'AW42AWD Auto (USA - CDN Check Code)', 9: 'AW55-50SN Auto V50, AW55-51 S40D5 AT (USA - CDN Check Code)', }, factory = { '0': 'Sweden Kalmar Plant', '1': 'Sweden] Torslanda Plant VCT 21(Volvo Torslandaverken) (Gothenburg)', '2': 'Belgium] Ghent Plant VCG 22', '3': 'Canada] Halifax Plant', '4': 'Italy] - Bertone models 240', '5': 'Malaysia', '6': 'Australia', '7': 'Indonesia', 'A': 'Sweden Uddevalla Plant (Volvo Cars/TWR (Tom Walkinshaw Racing))', 'B': 'Italy - Bertone Chongq 31', 'D': 'Italy - Bertone models 780', 'E': 'Singapore', 'F': 'The Netherlands] Born Plant (NEDCAR)', 'J': 'Sweden] Uddevalla Plant VCU 38 (Volvo Cars/ Pininfarina Sverige AB)', 'M': 'PVÖ 53' }, modelYears = require('../modelyears'), rangeYearSelector = require('../../lib/rangeYearSelector'); // Source: https://en.wikibooks.org/wiki/Vehicle_Identification_Numbers_(VIN_codes)/Volvo/VIN_Codes module.exports = { wmi: wmi, decode: function (vin) { const digit4 = vin.substr(3,1), digit5 = vin.substr(3,1), digit8 = vin.substr(7,1), gearbox = vin.substr(8,1), engineCode = vin.substr(5,2), placeCode = vin.substr(10,1), modelYear = modelYears[vin[9]]; let description = vechileCode[digit4], place = factory[placeCode], digit5Desc, digit8Desc; if (typeof description === 'object') { description = rangeYearSelector(description,modelYear); } let result = { description: description, place: place, gearbox: gearboxArr[gearbox] }; digit5Desc = rangeYearSelector(digit5Arr,modelYear); result[digit5Desc.description] = digit5Desc.data[digit5]; if (typeof result[digit5Desc.description] === 'object') { result[digit5Desc.description] = rangeYearSelector(result[digit5Desc.description],modelYear); } result.engine = engineCodeArr[engineCode]; if (typeof result.engine === 'object') { result.engine = rangeYearSelector(result.engine,modelYear); } digit8Desc = rangeYearSelector(digit8Arr,modelYear); result[digit8Desc.description] = digit8Desc.data[digit8]; if (typeof result[digit8Desc.description] === 'object') { result[digit8Desc.description] = rangeYearSelector(result[digit8Desc.description],modelYear); } return result; } };