You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:15:04