引言:身份證號碼在產品設計中的應用比較多,如實名認證、綁定銀行卡、金融資料錄入等,本文將主要分享身份證號碼編碼規則及其在產品設計中的應用。

說明:本文除特別說明外,身份證號碼專指18位公民身份號碼

一、身份證號碼結構

早期‘身份證號碼’叫‘社會保障號’,為15位,1999年開始更名為公民身份證號碼,即第二代身份證,為18位,且終身不變。

430512  19890813  136  7

公民身份號碼是特徵組合碼,由前十七位数字本體碼和最後一位数字校驗碼組成。排列順序從左至右依次為六位数字地址碼,八位数字出生日期碼,三位数字順序碼和一位数字校驗碼。

地址碼: 表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼。對於新生兒,該地址碼為戶口登記地行政區劃代碼。需要沒說明的是,隨着行政區劃的調整,同一個地方進行戶口登記的可能存在地址碼不一致的情況。行政區劃代碼按GB/T2260的規定執行。

出生日期碼:表示編碼對象出生的年、月、日,年、月、日代碼之間不用分隔符,格式為YYYYMMDD,如19880328。按GB/T 7408的規定執行。

順序碼: 表示在同一地址碼所標識的區域範圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。

校驗碼: 根據本體碼,通過採用ISO 7064:1983,MOD 11-2校驗碼系統計算出校驗碼。算法可參考下文。前面有提到数字校驗碼,我們知道校驗碼也有X的,實質上為羅馬字符X,相當於10.

二、15位與18位身份證號碼差異

出生日期碼:15位身份證號碼中出生日期碼為4位,其中年份代碼僅有2位,如590328,代表1959年生。

校驗碼:15位身份證號碼中無校驗位。

三、校驗碼算法

將本體碼各位数字乘以對應加權因子並求和,除以11得到餘數,根據餘數通過校驗碼對照表查得校驗碼。

加權因子:

校驗碼:

算法舉例:

本體碼為:11010519491231002

第一步: 各位數與對應加權因子乘積求和1*7+1*9+0*10+1*5+***=167

第二步:對求和進行除11得餘數167%11=2

第三步:根據餘數2對照校驗碼得X

因此完整身份證號為:11010519491231002X

四、編碼規則的應用

如上所述,身份證號碼是基於一定的規則的,從身份證號碼中可以挖掘以下信息:

  1. 身份證長度驗證:身份證長度僅存在15位或18位兩種長度;
  2. 身份證輸入正確性驗證:如身份證號為18位,可根據本體碼與校驗碼得關係驗證身份證號碼輸入有誤,需要指出的是,驗證通過並不代表身份證號碼的真實性;
  3. 獲得戶籍註冊地信息:大部分情況下,該地即為出身地或籍貫。對應時需留意行政區劃代碼的更新迭代;
  4. 出生年月及其正確性;
  5. 性別:順序碼中奇數為男性,偶數位為女性;
  6. 根據18位與15位身份證號碼編碼規則及校驗碼算法,將15位身份證號碼轉換為18位身份證號碼;
  7. 小心坑:因校驗碼為X,實際上有大小寫輸入不同,請注意兼容或統一。

 

作者:MrColin,支付結算產品經理,略懂技術

申明:本文為本人在知乎專欄文章,現將該文章在人人都是產品經理分享。

本文由 @MrColin 原創發佈於人人都是產品經理。未經許可,禁止轉載。