python效验车辆VIN码小程序

您所在的位置:网站首页 车辆识别码对应的车辆信息 python效验车辆VIN码小程序

python效验车辆VIN码小程序

2024-07-10 00:47| 来源: 网络整理| 查看: 265

文章目录 前言一、VIN码的校验方法二、程序实现1.需要使用的库2.完整代码

前言

关于车辆的VIN码简单的介绍:VIN是英文Vehicle Identification Number(车辆识别码)的缩写。因为SAE标准规定:VIN码由17位字符组成,所以俗称十七位码。它包含了车辆的生产厂家、年代、车型、车身型式及代码、发动机代码及组装地点等信息。正确解读VIN码,对于我们正确地识别车型,以致进行正确地诊断和维修都是十分重要的。(来自百度百科)

一、VIN码的校验方法

VIN码各位数字和字母=》对应值

在这里插入图片描述 VIN码从第1位到第17位,位数的加权值 在这里插入图片描述 计算方法:VIN前8位和后8位对应值乘以位数的加权值相加,除以11,所得余数是否与第9位数相等,一样为对,不一样就是错的。 补充说明:VIN码是没有O和I的,但是再输入的时候允许你输错,自动以为你输入的是0。也就是说你输入Q,O默认为0,输入I默认为1

二、程序实现

我也上网搜过类似的文章,有C,java语言实现的,但没找用python的,我想python应该也能实现,下面是个人方法,可能会比较繁琐

1.需要使用的库 import pandas as pd

pandas库是非常强大的,他的表关系正好能实现字母与数字的对应关系: 安装pip install pandas

2.完整代码

代码如下(示例):

import pandas as pd from pandas.core.frame import DataFrame lists = { "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, "0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9, } df = pd.DataFrame(lists,index=[0])#变成dataframe类型,打印结果如下效果 # A B C D E F G H J K L M N ... X Y Z 0 1 2 3 4 5 6 7 8 9 #0 1 2 3 4 5 6 7 8 1 2 3 4 5 ... 7 8 9 0 1 2 3 4 5 6 7 8 9 def NUM(text): if len(text) == 17:#判断它是否为17位数 text = text.upper()#小写字母转化为大写字母 text1 = text.replace("Q","0").replace("O","0").replace("I","1")#替换文本中的字母 num1 = int(df[text1[0]].to_string()[-1])#第一位 num2 = int(df[text1[1]].to_string()[-1])#第二位 num3 = int(df[text1[2]].to_string()[-1])#第三位 num4 = int(df[text1[3]].to_string()[-1])#第四位 num5 = int(df[text1[4]].to_string()[-1])#第五位 num6 = int(df[text1[5]].to_string()[-1])#第六位 num7 = int(df[text1[6]].to_string()[-1])#第七位 num8 = int(df[text1[7]].to_string()[-1])#第八位 num10 = int(df[text1[-8]].to_string()[-1])#第九位 num11 = int(df[text1[-7]].to_string()[-1])#第十位 num12 = int(df[text1[-6]].to_string()[-1])#第十一位 num13 = int(df[text1[-5]].to_string()[-1])#第十二位 num14 = int(df[text1[-4]].to_string()[-1])#第十三位 num15 = int(df[text1[-3]].to_string()[-1])#第十四位 num16 = int(df[text1[-2]].to_string()[-1])#第十五位 num17 = int(df[text1[-1]].to_string()[-1])#第十六位 Num1 = num1 * 8 + num2 * 7 + num3 * 6 + num4 * 5 + num5 * 4 + num6 * 3 + num7 * 2 + num8 * 10#前8位的和 Num2 = num10 * 9 + num11 * 8 + num12 * 7 + num13 * 6 + num14 * 5 + num15 * 4 + num16 * 3 + num17 * 2#后8位的和 Nums = Num1 + Num2 if Nums % 11 == int(text1[8]): print("VIN正确:",text1) else: print("VIN不符合规则:",text) else: print("VIN位数不对") if __name__=='__main__': text = input('输入VIN号:') NUM(text)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3