Python实现15位身份证转18位:第6位后加19并计算校验位方法
15位身份证批量转18位修改方案
以下是修改后可直接运行的完整代码:
def id15218(id15): # 15位转17位:第6位后插入19 id17 = id15[:6] + '19' + id15[6:] # 校验位计算权重和对应结果 xishu = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] yushu = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2] count = 0 for i in range(17): # 每一位单独转int乘对应权重 count += int(id17[i]) * xishu[i] last = count % 11 return f'{id17}{yushu[last]}' if __name__ == '__main__': # 如需指定读取前n条,可替换为下面注释的逻辑 # n = int(input()) # with open('id15.txt', 'r', encoding='utf-8') as file: # for _ in range(n): # line = file.readline().strip() with open('id15.txt', 'r', encoding='utf-8') as file: for line in file: line = line.strip() if not line: continue # 按空白字符拆分,取第一个字段就是15位身份证号 id15 = line.split()[0] id18 = id15218(id15) print(f'New Identification no: {id18}')
核心修改说明
- 身份证号全程用字符串处理,避免转int丢失前导零,同时直接通过切片
id15[:6] + '19' + id15[6:]即可完成19的插入,无需拆分列表 - 修复校验位计算逻辑:原代码把整个身份证号当整数乘权重,实际要求每一位单独取数乘对应位置的权重后累加取模
- 修复变量名错误:函数内原调用的
id是全局变量,改为使用传入的参数处理 - 优化文件读取逻辑:不固定切割字符串后4位,改为按空白字符拆分每一行取第一个字段,适配不同长度的后缀名称,避免切错身份证号
内容的提问来源于stack exchange,提问作者LittleTim
相关产品推荐
相关产品推荐

