python效验车辆VIN码小程序


前言

关于车辆的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)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值