身份證號碼的故事
文章推薦指數: 80 %
阿眾所週知, 身份字號的第一位為英文字母, 阿它代表你的出生地(其實應該說是登記出生的所在), 參見下表。
第二位為數字,是男女生之代碼,男生為1,女生為2, (? 阿 ...
不能反攻大陸的真正理由!
(從身分證編碼規則談起..)
大家知道為什麼不能反攻大陸嗎?
有很多傳說..
老共太強?No!
老蔣沒有LP?NO!
美國杜魯門總統阻撓?
No!No!NO!
其實最主要原因是因為:
身份證號碼..
不夠用了..
嘿嘿嘿!
不要告訴別人喔!
這件事全世界現在..
只有兩個人知道,對啦,一個就是我:-)
阿眾所週知,
身份字號的第一位為英文字母,
阿它代表你的出生地(其實應該說是登記出生的所在),參見下表。
第二位為數字,是男女生之代碼,男生為1,女生為2,
(?阿變性的應該可以用3和4代表男變女或女變男..?)
接下來為流水號(sequencenumber),
最後一位則為檢查號碼(weightedchecksum),是算出來的!
阿這樣怎會跟反攻大陸有關呢?別急!且聽我慢慢道來..
是這樣的,
當初開始統編身份證號碼時,省屬以上單位只有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剛好是個合法的號碼:
A123456789
10
1987654321
------------------------------------
1+0+8+14+18+20+20+18+14+8=121
121%10=1(%就是取餘數)
10-1=9即為檢查碼(checksum)
**阿根據電視報導,
該位擁有一條龍A123456789身分證號
的先生困擾多多!
包括無法上網購票,因為都被禁掉了!
也沒銀行要給他申請信用卡!
因為懷疑那是假的號碼!!
**問題思考:
1.為什麼要採取weightedsum來算checksum?
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)這種概念!
從身分證編碼規則中知道有所謂的加權檢查和(Weightedchecksum)
--
後記:關於新五都..
自從馬英九當總統後,積極與老共修好與示好..
阿當然老共也就給與回報,
根據路邊社消息指出,
老共已經同意把福建南邊以及海南島等讓給台灣,
做為馬英九競選連任的賀禮與籌碼!
阿可是這樣身分證號碼不夠用啊??
於是..靈機一動!有了..可以弄出三個字母來備用:
對..你猜對了..就是合併一些縣市:
台中縣市合併,讓出L;
台南縣市合併,讓出R;
高雄縣市合併,讓出S;
阿台北縣太大了,只好不合併!
阿桃園縣市本來就只用一個字母,升格也沒鳥用,
所以雖然人口比台南縣市合起來還多,仍暫不准升格!
(註:桃園市是縣轄市,歸桃園縣管轄)
還好不是空出這三個:台中縣+雲林縣+南投縣,
不然紀曉嵐和陳唐山都會用台語說..那就不太好囉:-)
這就是何以會有新五都的秘密,噓..不要太大聲,會被抓去關喔!
"Bewareofbugsintheabovecode;Ihaveonlyproveditcorrect,nottriedit."
--DonaldKnuth(/usr/games/fortune)
Murphy'sLawisrecursive.
Washingyourcartomakeitraindoesn'twork.
Itismucheasiertosuggestsolutionswhenyouknownothingabouttheproblem.
參考答案(Big5編碼)
或 ifyoucanNOTreadit,
Clickheretosee參考答案(Utf8編碼)
Youarethe
-thvisitorstothispage.
延伸文章資訊
- 1用身分證字號判斷你是哪裡人! - 橘子亂說話
身分證字號的編碼規則目前的中華民國身分證字號一共有十碼,包括起首一個大寫的英文字母與接續的九個阿拉伯數字。其中首碼英文代碼是以初次登記的戶籍 ...
- 2身分證字號編碼公式 - sasimiyu - 痞客邦
身分證字號編碼公式 ... 一般而言大家對身份字號的認知,多是知道共有10位,第一位為英文字母,知道再多一點的大概就是第二個數字是男女生之分,男生為1, ...
- 3中華民國國民身分證 - 维基百科
中華民國國民身分證,是中華民國國民的身分證,目前在臺澎金馬設有戶籍的人民皆領有之。《姓名條例施行細則》第二條第一項:「國內有戶籍國民本名之證明為國民身分證。
- 4檢查身分證字號
轉換後的身分證字號(共11位數字)每一位數均有固定的權重(Weight),由左往右依序為『1 9 8 7 6 5 4 3 2 1 1』。判斷身分證字號是否正確的方法為: 各位數字與其相對應的權重...
- 5台灣身分證字號產生規則解析|英文/出生地對照 - 生活智慧王