老版身份證號碼轉為新版身份證號碼(15位轉18位)
阿新 • • 發佈:2018-12-19
【問題描述】
老版的身份證號碼是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)})