中華民國身份證檢查函式

剛剛在網路上晃呀晃,才知道中華民國身份證天字第一號是 Y10000001,持有人為[空一頁]蔣公。

然後再順路逛到中華民國國民身分證解釋頁,才了解原來身份證是這樣算的呀(請見 wiki)~

用 PHP 檢查身份證號是否合法差不多就是這樣…

php · [高亮] · [原始]

  1. function is_valid_id($id)
  2. {
  3.   $cities = array(
  4.     ‘A’ => 10// 台北市
  5.     ‘B’ => 11// 台中市
  6.     ‘C’ => 12// 基隆市
  7.     ‘D’ => 13// 台南市
  8.     ‘E’ => 14// 高雄市
  9.     ‘F’ => 15// 台北縣
  10.     ‘G’ => 16// 宜蘭縣
  11.     ‘H’ => 17// 桃園縣
  12.     ‘I’ => 34// 嘉義市
  13.     ‘J’ => 18// 新竹縣
  14.     ‘K’ => 19// 苗栗縣
  15.     ‘L’ => 20// 台中縣
  16.     ‘M’ => 21// 南投縣
  17.     ‘N’ => 22// 彰化縣
  18.     ‘O’ => 35// 新竹市
  19.     ‘P’ => 23// 雲林縣
  20.     ‘Q’ => 24// 嘉義縣
  21.     ‘R’ => 25// 台南縣
  22.     ‘S’ => 26// 高雄縣
  23.     ‘T’ => 27// 屏東縣
  24.     ‘U’ => 28// 花蓮縣
  25.     ‘V’ => 29// 台東縣
  26.     ‘W’ => 32// 金門縣
  27.     ‘X’ => 30// 澎湖縣
  28.     ‘Y’ => 31// 陽明山
  29.     ‘Z’ => 33// 連江縣
  30.   );
  31.  
  32.   $id = strtoupper($id);
  33.  
  34.   // 檢查格式
  35.   if (!preg_match(‘/[A-Z][1-2]\d{8}/’, $id))
  36.     return false;
  37.  
  38.   $city = (string)$cities[$id[0]];
  39.  
  40.   $total = $city[0];
  41.   $id[0] = $city[1];
  42.  
  43.   for ($i=0; $i<10; $i++)
  44.     $total += $id[$i] * (9 - $i);
  45.  
  46.   $total += $id[9];
  47.  
  48.   return (($total % 10) === 0);
  49. }
function is_valid_id($id)
{
  $cities = array(
    \'A\' => 10,  // 台北市
    \'B\' => 11,  // 台中市
    \'C\' => 12,  // 基隆市
    \'D\' => 13,  // 台南市
    \'E\' => 14,  // 高雄市
    \'F\' => 15,  // 台北縣
    \'G\' => 16,  // 宜蘭縣
    \'H\' => 17,  // 桃園縣
    \'I\' => 34,  // 嘉義市
    \'J\' => 18,  // 新竹縣
    \'K\' => 19,  // 苗栗縣
    \'L\' => 20,  // 台中縣
    \'M\' => 21,  // 南投縣
    \'N\' => 22,  // 彰化縣
    \'O\' => 35,  // 新竹市
    \'P\' => 23,  // 雲林縣
    \'Q\' => 24,  // 嘉義縣
    \'R\' => 25,  // 台南縣
    \'S\' => 26,  // 高雄縣
    \'T\' => 27,  // 屏東縣
    \'U\' => 28,  // 花蓮縣
    \'V\' => 29,  // 台東縣
    \'W\' => 32,  // 金門縣
    \'X\' => 30,  // 澎湖縣
    \'Y\' => 31,  // 陽明山
    \'Z\' => 33,  // 連江縣
  );

  $id = strtoupper($id);

  // 檢查格式
  if (!preg_match(\'/[A-Z][1-2]\\d{8}/\', $id))
    return false;

  $city = (string)$cities[$id[0]];

  $total = $city[0];
  $id[0] = $city[1];

  for ($i=0; $i<10; $i++)
    $total += $id[$i] * (9 - $i);

  $total += $id[9];

  return (($total % 10) === 0);
}

4 Responses to “中華民國身份證檢查函式”

  1. Kai-shao Says:

    那張蔣介石的身分證不是天字第一號,只是「陽明山管理局」第一號罷了。

    蔣介石把自己住的地方改為「陽明山管理局」,下轄士林鎮、北投鄉,陽明山等地,局長由他派(沒有民選)。陽明山沒有偉大到要另立行政管理單位,只因他老兄住那裡罷了。

    陽明山管理局現早就裁撤了,Y字頭的身分證字號也不再發放,以前是Y字頭的老人不曉得有沒有改。

    蔣介石那張身分證是九位數,最後一碼檢查碼當年還未出來。

  2. Beata Says:

    哦!原來如此!

    想來是我誤會了,傻不楞登的以為是首發呢!
    謝謝 Kai-shao 提供的資訊哦!

  3. 博士家教 Says:

    身份證檢查公式,網路上早就有流傳很久了,不過,不過我倒是不知道,驗證公式,居然大辣辣就放在wiki,這樣很多人,輕鬆就能寫出程式了

  4. 无鸣骑士 Says:

    囧 原来是这样的…

Leave a Comment