车架号校验规则实现
# 车架号校验函数VIN = input("请输入车架号")
vin = str.lower(VIN)#转化为小写
letter = "0123456789abcdefghijklmnopqrstuvwxyz"#字母数字集合
dict1 = dict({'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})
while True:
count1 = 0#辅助判断
weighted = 0 #加权
check = 0 #校验码
# 以下部分判断是否全部为数字字母
for each in vin:
if each in letter:#用in判断是否包含在字母数字集合内
count1 = count1 + 1
else:
count1 = count1 + 0
if len(vin) != 17 :
print("车架号不为17位")
elif count1 != 17 :
print("车架号只能为数字与字母的组合")
elif "o"in vin or "i"in vin or "q"in vin:
print("车架号不应该存在O、I、Q字母")
else:
for (y1,y2) in zip(vin,):#两个参数的for 应该用zip实现
weighted = weighted + dict1.get(y1)*y2 #get方法获取dict对应的value
check = weighted % 11 # 用%获取余数
if (check == int(vin)) or ((check == 10) and (vin == "x")):#vin切片为str类型,需要转化为int,注意用括号隔开判断条件
print("车架号符合规则,校验通过")
else:
print("车架号不符合规则,校验未通过")
VIN = input("请输入车架号")
vin = str.lower(VIN)#转化为小写
其实,非常郁闷的事情是.isalnum方法,明明是(判断是否数字和字母的组合),为什么汉字也给我返回一个Ture? 汉字会被判定为字母
解决办法:.encode('utf-8').isalnum 校验码如果是X将会导致错误,调整一下
# 车架号校验函数
VIN = input("请输入车架号")
vin = str.lower(VIN)#转化为小写
letter = "0123456789abcdefghijklmnopqrstuvwxyz"#字母数字集合
dict1 = dict({'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})
dict2 = dict({'x':10,'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9})
while True:
count1 = 0#辅助判断
weighted = 0 #加权
check = 0 #校验码
# 以下部分判断是否全部为数字字母
for each in vin:
if each in letter:#用in判断是否包含在字母数字集合内
count1 = count1 + 1
else:
count1 = count1 + 0
if len(vin) != 17 :
print("车架号不为17位")
elif count1 != 17 :
print("车架号只能为数字与字母的组合")
elif "o"in vin or "i"in vin or "q"in vin:
print("车架号不应该存在O、I、Q字母")
else:
for (y1,y2) in zip(vin,):#两个参数的for 应该用zip实现
weighted = weighted + dict1.get(y1)*y2 #get方法获取dict对应的value
check = weighted % 11 # 用%获取余数
if check == dict2.get(vin): #vin可能是x,使用int会报错,调整为字典方法对比校验码
print("车架号符合规则,校验通过")
else:
print("车架号不符合规则,校验未通过")
VIN = input("请输入车架号")
vin = str.lower(VIN)#转化为小写 突然想起 vin 如果是错误的车架号 可能不是0-9、x 而是a、b之类的其他字母{:10_266:},再次调整一下
# 车架号校验函数
VIN = input("请输入车架号")
vin = str.lower(VIN)#转化为小写
letter = "0123456789abcdefghijklmnopqrstuvwxyz"#字母数字集合
dict1 = dict({'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})
dict2 = dict({'a':100,'b':100,'c':100,'d':100,'e':100,'f':100,'g':100,'h':100,'j':100,'k':100,'l':100,'m':100,'n':100,'p':100,'r':100,'s':100,'t':100,'u':100,'v':100,'w':100,'x':10,'y':100,'z':100,'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9})
while True:
count1 = 0#辅助判断
weighted = 0 #加权
check = 0 #校验码
# 以下部分判断是否全部为数字字母
for each in vin:
if each in letter:#用in判断是否包含在字母数字集合内
count1 = count1 + 1
else:
count1 = count1 + 0
if len(vin) != 17 :
print("车架号不为17位")
elif count1 != 17 :
print("车架号只能为数字与字母的组合")
elif "o"in vin or "i"in vin or "q"in vin:
print("车架号不应该存在O、I、Q字母")
else:
for (y1,y2) in zip(vin,):#两个参数的for 应该用zip实现
weighted = weighted + dict1.get(y1)*y2 #get方法获取dict对应的value
check = weighted % 11 # 用%获取余数
if check == dict2.get(vin): #vin可能是x,使用int会报错,调整为字典方法对比校验码
print("车架号符合规则,校验通过")
else:
print("车架号不符合规则,校验未通过")
VIN = input("请输入车架号")
vin = str.lower(VIN)#转化为小写
页:
[1]