[精讚] [會員登入]
22699

[PHP] 台灣身分證號及檢查程式

台灣身分證號及PHP檢查程式

分享此文連結 //n.sfs.tw/10563

分享連結 [PHP] 台灣身分證號及檢查程式@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2021-07-10 13:36:51 最後編修
2017-01-06 15:22:24 By 張○○
 

自動目錄

台灣地區身分證字號編碼規則

共有十個字元,第1個字元是大寫英文字母,由初次登記的戶籍地決定[2]

第2個字元是數字或大寫英文A-D,分別代表的意義如下[3]

  臺灣地區有戶籍國民:男性為1、女性為2 

  臺灣地區無戶籍國民、大陸地區人民、港澳居民:男性使用A、女性使用B(入出境管理局使用)

  外國人:男性使用C、女性使用D(警察局外事科/課使用)

第3~9個字元是數字,共有7位數,有10,000,000組

第3碼依內政部92年4月24日台內戶字第0920063929號函規定[5],自92年7月開始,有關在台無戶籍之外籍、港澳、大陸地區人民及無戶籍國民申請定居時,另行配賦國民身分證統一編號,並以第三碼「6、7、8、9」為區別碼,其區別標準如下:

  1、載有「取得國籍日期」者,配賦代碼「6」。
  2、載有「海外僑民」者,配賦代碼「7」。
  3、載有「港澳居民」者,配賦代碼「8」。
  4、載有「大陸地區人民」者,配賦代碼「9」。

無論如何都是數字

第10個字元是數字,檢查碼

  檢查碼的演算似乎沒有官方的說明文件,但可參考維基百科上的演算方法;若第二碼非數字者,可參考[4]的說明

PHP的檢查程式

為此我撰寫了一個PHP的檢測身分證字號的程式,他能檢驗是否能符合以上所有規則,回傳真假。相較於其他人寫的程式,我在程式碼上做了優化,並測試了一千萬筆的資料,發現程式速度非常的快,代價就是不易讀。

/** 函數名稱:boolean check_pid(string)
* 功能:身分證字號檢查
* 語法:check_pid(身分證字串)
* 回傳:符合規則成功回傳true, 否則回傳false
**/

function chk_pid($id) {
    if( !$id )return false;
    $id = strtoupper(trim($id)); //將英文字母全部轉成大寫,消除前後空白
    //檢查第一個字母是否為英文字,第二個字元1 2 A~D 其餘為數字共十碼
    $ereg_pattern= "^[A-Z]{1}[12ABCD]{1}[[:digit:]]{8}$";
    if(!ereg($ereg_pattern, $id))return false;
    $wd_str="BAKJHGFEDCNMLVUTSRQPZWYX0000OI";   //關鍵在這行字串
    $d1=strpos($wd_str, $id[0])%10;
    $sum=0;
    if($id[1]>='A')$id[1]=ord($id[1])-65; //第2碼非數字轉換依[4]說明處理
    for($ii=1;$ii<9;$ii++)
        $sum+= (int)$id[$ii]*(9-$ii);
    $sum += $d1 + (int)$id[9];
    if($sum%10 != 0)return false;
    return true;
}
 

參考資料

[1] Javascript 的身分證字號檢查程式 http://squall75726.pixnet.net/blog/post/309981516#comment-42707747

[2] 維基百科上身分證 https://zh.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E5%9C%8B%E6%B0%91%E8%BA%AB%E5%88%86%E8%AD%89

[3] 內政部外來人口統一證號編碼原則 https://www.immigration.gov.tw/ct_cert.asp?xItem=1106801&ctNode=32601

[4 外國人身分證字號驗證 http://gomumu.pixnet.net/blog/post/3128951-%5B%E7%9F%A5%E8%AD%98%2B%5D%E5%A4%96%E7%B1%8D%E4%BA%BA%E5%A3%AB%E7%94%A8%E7%9A%84%E7%B5%B1%E4%B8%80%E8%AD%89%E8%99%9F%E7%B7%A8%E7%A2%BC%E8%A6%8F%E5%89%87

[5] http://mlhr.miaoli.gov.tw/law.php?page=21&kind=24


 

END

你可能感興趣的文章

[PHP] 陣列排序 sort, ksort, asort, usort... 簡單的記錄PHP的陣列排序,因為常常會用到。

[PHP] 台灣身分證號及檢查程式 台灣身分證號及PHP檢查程式

設定Google analytics API #1 -- Google網站上的設定 讓你的網站能夠存取你的Google analytics上面的資料

[Centos 6& 7] 安裝php-geoip php-geoip是PHP由domain、ip查詢城市國家資料非常強的函式

[CodeIgniter 3] 資料庫的使用方法整理2/2 CI3 承襲 CI2,有很多的builder class可以用,依各人的使用習慣,有人喜歡一堆sql字串,有人喜歡用helper

[CI3] 使用和修改日曆類別 calendar library CI3有一個日曆圖書館 library,可以快速的建立一個日曆,但是想修改讓他更棒

隨機好文

[Freebsd] 定時測試 ADSL 是否斷線並重連 中華電信 ADSL 雖有固定 ip,可是他卻會不定時「斷線」, 使用以下的 方法可以定時測試是否斷線,以及重新撥接。

[札記] 2016.7~12月札記 札記,只是札記

設計的工作絕不接受比價 拿買陽春麵的價格想買牛肉麵,寧願倒掉也不賣

對物品的感情 這個議題很奇怪,可是大部分的人都會有,物品是死的,壞了就淘汰,出新的就被替換。為何會有情感?

[MYSQL] 設定字串欄位的預設值 新增表格的時候,字串欄位給予預設空值;數字欄位給預設數值;日期欄位給空值。