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);
}


-------------------------------------------------------
第一位為英文字母
第二個數字是男女生之分,男生為 1,女生為 2
 
身份證字號後面八個數字之中,前面七個可以隨便打
最後一位為檢查碼,必須經過之前一個字母與8個數字的組合計算後得出
 
檢查碼的運算原則:
 
英文代號以下表轉換成數字
A=10 台北市 J=18 新竹縣 S=26 高雄縣
B=11 台中市 K=19 苗栗縣 T=27 屏東縣
C=12 基隆市 L=20 台中縣 U=28 花蓮縣
D=13 台南市 M=21 南投縣 V=29 台東縣
E=14 高雄市 N=22 彰化縣 W=32 金門縣
F=15 台北縣 O=35 新竹市 X=30 澎湖縣
G=16 宜蘭縣 P=23 雲林縣 Y=31 陽明山
H=17 桃園縣 Q=24 嘉義縣 Z=33 連江縣
I=34 嘉義市 R=25 台南縣
 
(1)英文轉成的數字, 個位數乘9再加上十位數
(2)各數字從右到左依次乘1、2、3、4....8
 
(1)與(2)的和,除10求出餘數
用10減該餘數,結果就是檢查碼,若餘數為0,檢查碼就是 0。
 
例如: 身份證號碼是 Z12345678?
 
Z 1 2 3 4 5 6 7 8 
    3 3
X X X X X X X X X X
1 9 8 7 6 5 4 3 2 1 
 ─────────────────────
3 + 27 + 8 + 14 + 18 + 20 + 20 + 18 +14 + 8 = 150
150/10=15....0 (餘數)
10-0=10 (檢查碼為0)
∴身份證字號為Z123456780
 
參考自: http://www.javaworld.com.tw/jute/post/view?bid=35&id=33999&sty=3 









arrow
arrow
    全站熱搜

    天秤女~佳佳 發表在 痞客邦 留言(0) 人氣()