1. 程式人生 > >老版身份證號碼轉為新版身份證號碼(15位轉18位)

老版身份證號碼轉為新版身份證號碼(15位轉18位)

【問題描述】

老版的身份證號碼是15位的,有些政府網站上登記的是老版的號碼,15位,未做更新,所以需要手動更新為18位。

【解決辦法】

import numpy as np
def id_corrected(id_card):
    """
    將老版15位身份證號碼轉化為新版的18位身份證號碼
    邏輯:1-6位是地區號碼——》保持不變
          7-12位是生日yymmdd——》轉為yyyymmdd格式——》轉化為17位
          新增最後一位校驗碼——》加權求和後關於11取餘數為i——》根據校驗碼list,取校驗碼為list[i]
          前17位+校驗碼——》獲得18位身份證號碼      
    """
    try:
        year =int(id_card[6:8])
        year_now = int(dt.datetime.now().strftime('%Y'))-2000
        if year > year_now:
            id_card_temp = id_card[0:6]+'19'+id_card[6:]   #補齊日期碼
        else:
            id_card_temp = id_card[0:6]+'20'+id_card[6:]   #補齊日期碼 
        a =np.array(list(map(int, id_card_temp)))
        b = np.array((7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2))
        last_number_temp = np.dot(a,b)%11
        check_code_list = ("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2")
        check_code = check_code_list[last_number_temp]
        id_number =id_card_temp+ str(check_code)
        return id_number
    except Exception as e:
        param=json.dumps({"id_card":id_card})
        raise Exception({"msg":"更正使用者身份證號碼失敗, 函式: id_corrected, 引數: "+param+", 異常資訊: "+str(e)})