[精讚] [會員登入]
21717

[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

你可能感興趣的文章

Smarty安裝 smarty 是著名的樣版引擎,非常的好用,用多了突然發現拿掉smarty反而不會寫php了,以下是安裝過程..

[PHP] 陣列新增資料及整理 在php陣列加入項目和重新整理陣列的方法

使用Yahoo OAuth2 2/2 使用Yahoo OAuth2認證我的網頁

[PHP] 解析二進位圖片 使用php來解析png圖片,把資料寫在16進位格式

PHP cli 傳入參數 php cli (PHP命令列的傳入參數使用方法

[PHP] 2個程式的觀念 整理2個PHP的程式觀念,參考參考。

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

Jun
關於 function chk_pid() chr應該改為ord才正確,chr應該是把ascii chr 是將輸入 ASCII code編碼 (int),回傳對應的ASCII code字元 @2021-07-09 14:48:37

新精讚
耶,對。因為都沒有遇到那麼特殊的身分證,所以都沒有發現錯誤。大感謝,程式範例第16行改成ord。
2021-07-10 13:36:18

隨機好文

[jQuery] select 元件的取值及給值 html中的元件select,在jquery中要如何使用?

SELinux 常用指令和檔案 在Redhat系列中,Centos5以後加入了selinux,他並沒有這麼可怕,不必每次看到Selinux ,就想把他

PHP for sphinx 函式庫安裝 PECL/sphinx PHP>= 5.2.2 已經能原生支援 sphinx,可是預設的沒有裝,我們得自己裝才能用

UTF8中文字/全形一覽 快速查詢urf-8的中文字,共計13246中文字(5401常用字+7652罕用字+日文或編號),292全形符號,27半形符號。

Smarty安裝 smarty 是著名的樣版引擎,非常的好用,用多了突然發現拿掉smarty反而不會寫php了,以下是安裝過程..