import re def check(vin): # 字符到数字的映射 char_to_num = { '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 } # 加权系数 weights = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2] vin = vin.upper() if not re.match(r'^[1-9A-Z][0-9A-Z]{16}$', vin) or re.match(r'^([0-9A-Z])1{16}$', vin): return False num = 0 for i in range(17): char = vin[i] num += char_to_num[char] * weights[i] remainder = num % 11 check_digit = vin[8] if remainder < 10: valid_digit = str(remainder) else: valid_digit = 'X' return check_digit == valid_digit vin = "LSGKR5AL3GA116839" if check(vin): print(f"{vin} 是有效的VIN码。") else: print(f"{vin} 不是有效的VIN码。")
© 2015-2025 杭州极速互联科技有限公司 版权所有 浙ICP备17047587号-4 浙公网安备33010502005096 增值电信业务经营许可证:浙B2-20190875