10.16638/jki.1671-7988.2021.011.058
车辆识别代码(VIN码)在线管理系统的
开发与应用
范建鹏,姚珂,谭浩,董利娜
(陕西重型汽车有限公司,陕西西安710200)
摘要:文章在工信部对VIN码要求下,借助信息化技术,开发了VIN码的在线管理系统,为VIN码的编制、维护、查询、打印等全生命周期管理提供了有力的平台支撑。
关键词:车辆识别代码;信息技术;在线管理系统
中图分类号:U461.99 文献标识码:A 文章编号:1671-7988(2021)11-181-04
Development and Application of Vehicle Identification Number (VIN) Online
Management System
Fan Jianpeng, Yao Ke, Tan Hao, Dong Lina
( Shaanxi Heavy Duty Automobile Co., Ltd., Shaanxi Xi’an 710200 )
Abstract:The Vehicle Identification Number (Hereinafter referred to as the VIN), as the unique identification code for vehicle identification, is equivalent to the vehicle ID number, and has an irreplaceable position in the process of vehicle production, sales, use, and various businesses. With the further requirements of the Ministry of Industry and Information Technology of GB16735-2019 on the accuracy of the VIN, it is necessary for vehicle manufacturers to conduct online control from the vehicle production link. With the help of information technology, we have developed an online management system for VIN codes, which provides a powerful platform for the preparation, maintenance, query, and printing of VIN throughout the life cycle management.
Keywords: Vehicle identification number; Information technology; Online management system
CLC NO.: U461.99 Document Code: A Article ID: 1671-7988(2021)11-181-04
1 车辆识别代码简介
车辆识别号码(Vehicle Identification Number),简称VIN 码,是由一组十七位字母或数字组成,在
世界范围内用以识别汽车的独一无二的号码,可以识别汽车的生产商、引擎、底盘序号及其他性能等资料[1]。2 VIN码在线管理系统的整体规划
系统采用BS架构,后端使用基于php的thinkphp MVC 框架,前端使用easyui框架。基于用户、菜单、操作的权限管理方式,保证了VIN码在编制、使用、高新过程中的安全性。
2.1 系统模块规划
如图1 所示,系统主要分为三个模块,功能如下:
(1)系统权限管理:不同用户权限管理,保证数据安全;
(2)VIN码编制模块:系统主模块,实现VIN码批量
作者简介:范建鹏(1982-),男,就职于陕西重型汽车有限公司,
从事汽车装配制造、重型商用车工艺系统开发与应用的工艺技术等
工作。
181
汽车实用技术
182 计算、与车辆数据交互进行校验、后期数据更新等;
(3)VIN 码使用模块:包含查询列表页面和条码打印页面。
图1  系统模块规划
2.2 界面设计
主计算界面由三部分构成:
(1)用户权限管理:使用权限管理,编制、校对、使用者权限分开,防止VIN 码修改过程中产生错误;
(2)VIN 码计算器:导入车型、VIN 码前8位、流水号区间和车辆附属信息,点击“计算”按钮计算,点击不同的“导出”按钮导出不同样式的VIN 码excel 文件计算结果;
(3)多种样式计算结果预览:根据不同使用者的需求,点击选项卡,可实现不同样式的计算结果预览。
图2  主界面设计
3 程序设计
(注:程序设计只包含主要功能的部分源码。本系统源码已经在gitee 开源,地址:gitee/fjp203/VINERS ) 3.1 计算功能
(1)VIN 码计算原理:VIN 码由17位构成,前8位可以在工信部汽车公告系统中按车型配置进行查询,后8位为该车生产的顺序号,即流水号。中间位也叫检验位。VIN 码的计算,其实就是计算检验位,检验位的计算原理为:前8位与后8位每一位的加权系数与每一位数字或字母字母对应的值相乘,所得的16个乘积相加,和再对11取余数,此余数就是检验位的值。如果余数是10,则用X 代替。如下表所示:
表1  数字的对应值
表2  字母的对应值
表3  加权系数
(2)VIN 码计算代码:为减轻服务器压力,减少前后端交互,计算功能用JavaScript 在前端实现。具体代码如下:
1. //VIN 码每一位对应的值
2. var position = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2];
3. //alphabet:VIN 码各位字母或数字对应的值
4. var alphabet = [['0', 0], ['1', 1], ['2', 2], ['3', 3], ['4', 4], ['5', 5], ['6', 6], ['7', 7], ['8', 8], ['9', 9], ['A', 1], ['B', 2], ['C', 3], ['D', 4], ['E', 5], ['F', 6], ['G', 7], ['H', 8], ['J', 1], ['K', 2], ['L', 3], ['M', 4], ['N', 5], ['P', 7], ['R', 9], ['S', 2], ['T', 3], ['U', 4], ['V', 5], ['W', 6], ['X', 7], ['Y', 8], ['Z', 9]
5. ];
6. /**
7. * 单个VIN 码计算 8. * @param q8:前8位字符 9. * @param lsh :后8位,即流水号 10. * @returns {string|*} 返回17位VIN 码 11. */
12. function vin(q8, lsh) {
13. var sum = 0; 14. var vin = q + 'X' + lsh; 15. for (i = 0; i < 17; i++) { 16. for (j = 0; j < 33; j++) {
17. if (vin.substr(i, 1) == zmb[j][0]) { 18. sum = sum + alphabet[j][1] * position[i]; 19. } 20. } 21. }
22. if (sum % 11 == 10) { 23. return q + 'X' + lsh; 24. } else {
25. return q + sum % 11 + lsh; 26. } 27. }
范建鹏 等:车辆识别代码(VIN 码)在线管理系统的开发与应用
183
3.2 VIN 码校验原理
根据VIN 码各位的编码规则,编制了以下几条校验规则:
(1)前三位校验:同一车企生产的车辆VIN 码前3位是固定不变的,校验是否相等,不相等,提示错误;
(2)位数校验:前8位长度是否为8,如果不为8,提示错误;
(3)驱动位校验:VIN 码第8位表示驱动,可根据车辆信息,校验此为是否正确,不正确,提示错误;
表4  车辆的驱动型式代码
(4)附件信息校验:利用车辆附件信息,查询车辆其他信息进行校验。例如查询车辆流水号区间是否正确。
校验程序代码如下: 1. /**
2. * VIN 码计算结果校验
3. * @param Arctic :车型
4. * @param vin8:VIN 码前8位
5. * @param lshqj :流水号区间
6. * @constructor
7. */
8. function Verify(Arctic, vin8, lshqj) { 9. if (Arctic == "") {
10. var info_irem = { 'ms': '车型不能为空', 'dj': '1' }; 11. info.push(info_irem); 12. }
13. if (Arctic.substr(0, 2) != "SX") {
14. var info_irem = { 'ms': '车型不首字符不是"SX"', 'dj': '1' };
15. info.push(info_irem); 16. }
17. if (vin8.length != 8) {
18. var info_irem = { 'ms': '此VIN 码有' + vin8.length + '位,应该为8位', 'dj': '1' };
19. info.push(info_irem); 20. }
21. if (lshqj.length != 8 && lshqj.length != 17) {
22. var info_irem = { 'ms': '流水号区间位数不正确' + lshqj.length, 'dj': '1' };
23. info.push(info_irem); 24. }
25. if (row.lshqj != row.lsh2) {
26. var info_irem = { 'ms': '流水号与mes 不匹配' + row.lshqj + '!=' + row.lsh2, 'dj': '1' };
27. info.push(info_irem); 28. } 29. }
3.3 VIN 码导出与更新
导出功能使用phpexcel 分样式进行导出,更新功能借助权限管理,只有编制者才能更新。并且一旦更新,需发送邮件给各流程使用者进行提醒。 3.4 VIN 码的使用
3.4.1 查询
将计算好的VIN 码及车型信息以easyui datagird 表格插
件进行前端列表显示,设计按多种规则进行查询。
图3  VIN 码查询
3.4.2 VIN 码条码显示及打印
VIN 码在使用过程中,由于难以记忆,通常使用条码打印,扫描录入的方式,以避免人工识别产生错误。利用jquery-barcode.js 插件,将18位VIN 码转换为条码进行打印。如图4(涉密要求,图片已经模糊处理)。
图4  VIN 码条码打印 代码如下: 1. /**
2. * 添加VIN 码到打印区域
3. * @param {any} row
4. * @param {any} d
5. */
6. function addvinDiv(row, d = 1) {
7. var div = $("#print_vin_" + row.lsh);
8. if (div.length > 0) {
jquery源码在线9. if (d == 1) {
10. $.messager.alert('数据', '已经存在', 'info');
汽车实用技术
18411. }
12. } else {
13. var string = '<div id="print_vin_' + row.lsh + '" class=
"printvin">' +
14. '<div >' +
15. '<div class="hl">' + row.rwh + '</div>' +
16. '<div class="hr"">' + row.vin + '</div>' +
17. '</div>' +
18. '<div class="vinbar" id="bar_' + row.lsh + '">asdad</ div>' +
19. '<div >' +
20. '<div class="hl">' + row.jsh + '</div>' +
21. '<div class="hr">' + row.vin + '</div>' +
22. '</div></div>';
23. string += '<div class="breakline" id="break_vin_' + row.lsh + '" ></div>';
24. $('#vinPrintAra').append(string);
25. $("#bar_" + row.lsh).empty().barcode(row.vin, "code 128", { barWidth: 2, barHeight: 35, showHRI: false });
26. }
27. }
28. /**
29. * 将div#vinPrintAra 区域的VIN码打印为pdf
30. */
31. function print_vin() {
32. $('#vinPrintAra').jqprint(
33. media = "print3"
34. );
35. }
3.4.3 api数据接口
通过简洁高效的api接口,系统对整车生命周期中获得授权的其他系统开放api,其他系统使用api可以实现VIN码的快速查询调用。实现方法如下:使用restful风格的api接口,通过auth2权限认证,调用参数,实现VIN码的查询。
(1)接口说明:
接口地址:系统网站地址/api
返回格式:json
请求方式:http get/post
请求示例:系统网站地址/api/?Serialnumber=? Seria -lnumberlist=?Cartype=
(2)请求参数说明,见表5。
表5 请求参数说明
(3)返回参数说明,见表6。
表6 返回参数说明
(4)JSON返回示例:
{
"reason": "成功",
"result": {
"Serialnumber": "LX987121",/*本次查询流水号,示例,不代表实际车辆VIN码*/
"VIN": "LZGJL4844LX987121",/*VIN码*/
"Cartype": "************",/*银行卡卡号*/
"idcard": "AZ1158NS664",/*车型,示例,不代表实际车型*/
"affiliat": "TSAS20112018",/*车辆附属信息,示例,不代表实际附属信息*/
},
"error_code": 0
}
4 结语
VIN码管理系统可以在车企广泛使用,借助系统,可以准确、高效、便捷地解决VIN码在车辆生产、检验、销售、使用过程中的查询和应用,为车企、国家车辆监管部门和车辆使用者提供信息化支持。
参考文献
[1] GB16735-2019道路车辆车辆识别代码(VIN)[S].2019.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。