不能反攻大陸的真正理由!
(從身分證編碼規則談起 ..) 大家知道為什麼不能反攻大陸嗎?



有很多傳說.. 
老共太強? No ! 
老蔣沒有LP?  NO! 
 美國杜魯門總統阻撓?
No! No! NO!  
 其實最主要原因是因為:
   身份證號碼..
  不夠用了 .. 
嘿嘿嘿!  

 不要告訴別人喔!
  這件事全世界現在..
   只有兩個人知道, 對啦, 一個就是我:-)

  阿眾所週知, 
身份字號的第一位為英文字母,
阿它代表你的出生地(其實應該說是登記出生的所在), 參見下表。
第二位為數字,是男女生之代碼,男生為 1,女生為 2, 
(? 阿變性的應該可以用 3 和 4 代表男變女 或 女變男..?)
接下來為流水號 (sequence number), 
最後一位則為檢查號碼(weighted check sum), 是算出來的!
   阿這樣怎會跟反攻大陸有關呢?   別急 ! 且聽我慢慢道來 .. 
是這樣的,
   當初開始統編身份證號碼時, 省屬以上單位只有 22 個,
       就是以下沒有星號(*)帶頭的, 所以 IO 很像 1 與 0 不用,
         W 與 M 對沒學過英文的會搞錯不用, Z 很像 2 也不用 !
      用 22 個字母依序對應兩位數 10 到 31,
      後來金門縣用掉 W 對應 32, 連江縣用掉 Z 對應 33,
   最後嘉義市和新竹市分別升格為省轄市把 I 和 O 也用掉了! 
(以前住嘉義市的和嘉義縣的一樣用Q, 新竹市的在民國70年以前的和新竹縣一樣用 J)
(注意下表如果把有星號的項目拿掉則號碼是連續的)
至此二十六個字母用光了, 不允許再升格!
(聽說這也導致後來的廢省:-( 害得宋楚瑜和李登輝翻臉 ! :-)
阿最嚴重的當然是 .. 

 也不能反攻大陸了!  

不然身份證號碼就沒辦法編了. .
  
為此, 所有當初參與編身分證號碼的都被捉去槍斃了!  

也就是因為這樣, 這件事就只剩下我蔡神一個人知道! 

  (以上純屬瞎掰, 若有巧合 .. 阿就是巧合咩:)

算檢查碼(最後一位)要先把英文碼根據下表轉換成兩位數字 :
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 台南縣 計算檢查號碼的演算法: (a) 先把英文字母依照上表轉成兩位數字, 這樣連同其餘數字共有十一位 最右邊一位是檢查碼, 是依據其餘十位算出來的 (b) 各數字從左到右依次乘上 1, 9, 8, 7, 6, 5, 4, 3, 2, 1 (檢查碼先不管) (c) 求出(b)之和,除以10取餘數,再用10減該餘數,結果就是檢查碼, 但是若餘數為0,則檢查碼就是 0。 例如: 身份證號碼 A123456789 剛好是個合法的號碼: A 1 2 3 4 5 6 7 8 9 1 0 1 9 8 7 6 5 4 3 2 1 ------------------------------------ 1 + 0 + 8+14+18+20+20+18+14+ 8 = 121 121 % 10 = 1 ( % 就是取餘數) 10 - 1 = 9 即為 檢查碼 (check sum)

**阿根據電視報導, 
  該位擁有一條龍A123456789身分證號
   的先生困擾多多!
  包括無法上網購票, 因為都被禁掉了!
  也沒銀行要給他申請信用卡! 
因為懷疑那是假的號碼!!

**問題思考 : 
 1. 為什麼要採取 weighted sum 來算 check sum? 
 2. 這樣檢查碼的比重剛好也是 1, 有蛇麼缺點? 
    阿廢話..用算出的檢查碼的比重當然是 1, 我是指它左邊那位比重也是 1 啦!
     Hint: 人在看連續數字容易把鄰近的看對調, 打字時不小心也會打對調.
 3. 新竹市最後把 O 用掉對應 35 是個嚴重的錯誤
     因為 O 有時寫不好會被誤為 D, 此時 O 和 D 互相寫錯是查不出來的, 為蛇麼?  
 4. 寫程式如何 A 對到10, B對到11, ... ? 有很多方法! 
  ==>可用超級賴皮法寫26個 if :-) 但是, 這樣你好意思嗎?
  ==>也可以利用一段一段(A到H, J到N, ...)寫數個 if, 
  ==>當然更方便的是乾脆造一個 table (array) 來查!
  ?? 如何查?  阿..福氣啦  .. 阿不是 .. 我是說習題啦 :-)
 5.所以, 習題來囉!
  阿就是要寫一個至少可以檢查身分證號碼的程式,
   最好也要可以生出合法的身分證號碼!
   甚至還要可指定出生地與男女!(就是身分證號前面兩碼)  
 Hint: 用 fgets( ) 把整列當字串讀入再處理, 字母要允許輸入大寫或小寫!
       可規定輸入 -1 或是 quit 表示結束.
 6. 這個習題的目的, 
    除了讓同學練習字串處理與瞭解ASCII碼之外,
    也讓同學知道有檢查碼(checksum)這種概念!
    從身分證編碼規則中知道有所謂的加權檢查和(Weighted checksum) 
-- 
後記: 關於新五都 .. 
  自從馬英九當總統後, 積極與老共修好與示好..
  阿當然老共也就給與回報,
  根據路邊社消息指出,
   老共已經同意把福建南邊以及海南島等讓給台灣,
  做為馬英九競選連任的賀禮與籌碼!
  阿可是這樣身分證號碼不夠用啊??
  於是..靈機一動! 有了 .. 可以弄出三個字母來備用:
 對.. 你猜對了.. 就是合併一些縣市:
   台中縣市合併, 讓出 L;
   台南縣市合併, 讓出 R;
   高雄縣市合併, 讓出 S;
  阿台北縣太大了, 只好不合併!
  阿桃園縣市本來就只用一個字母, 升格也沒鳥用,
 所以雖然人口比台南縣市合起來還多, 仍暫不准升格!
  (註: 桃園市是縣轄市, 歸桃園縣管轄) 
還好不是空出這三個: 台中縣 + 雲林縣 + 南投縣,
不然紀曉嵐和陳唐山都會用台語說..那就不太好囉:-)

這就是何以會有新五都的秘密, 噓 .. 不要太大聲, 會被抓去關喔! 

"Beware of bugs in the above code; I have only proved it correct, not tried it."
      -- Donald Knuth   (/usr/games/fortune)
Murphy's Law is recursive. 

Washing your car to make it rain doesn't work.
It is much easier to suggest solutions when you know nothing about the problem.


參考答案 (Big5 編碼)
或   if you can NOT read it, Click here to see 參考答案 (Utf8 編碼)
You are the -th visitors to this page.