python--身份证号升位

任务描述

第二代居民身份证是依据2003年6月28日第十届全国人大常委会第3次会议通过的《中华人民共和国居民身份证法》实施的。第一代身份证十五位数升为第二代身份证十八位数的一般规则是:

第一步,在原十五位数身份证的第六位数后面插入19 (1905年1月1日以后出生)或20(2000.1.1 - 2004.12.31出生),这样身份证号码即为十七位数; 第二步,按照国家规定的统一公式计算出第十八位数,作为校验码放在第二代身份证的尾号。

校验码计算方法:将身份证前十七位数分别乘以不同系数并求和 S = Sum(Ai * Wi) Ai: 表示第i位置上的身份证号码数字值, i = 0, ..., 16 Wi: 表示第i位置上的加权因子, Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 S对11取模得到余数0 - 10,对应的校验码如下: 余数 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: `1 0 X 9 8 7 6 5 4 3 2

题目假设所有人均出生于1905年1月1日以后, 2005年1月1日以前

输入格式

输入一个15位身份证号

输出格式

输出一个18位身份证号

示例 1

输入: 310112850409522 输出: 310112198504095227

代码演示

Y = {0:'1',1:'0',2:'X',3:'9',4:'8',5:'7',6:'6',7:'5',8:'4',9:'3',10:'2'}
Wi = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
id = input()
if int(id[6:8]) < 5:
    id = id[0:6]+"20"+id[6:]
else:
    id = id[0:6]+"19"+id[6:]
s = 0
for i in range(0,17):
    s = s + int(id[i]) * Wi[i]
id = id + Y[s%11]
print(id)

你可能感兴趣的:(python,开发语言)