<<新主題 | 舊主題>>
娛樂滿紛 26FUN » 吹水版 » [轉]身份證號碼的秘密
返回列表 回復 發帖

[轉]身份證號碼的秘密

係香港,每一個居民都會獲發一張身份證,證上的號碼一共分為 3 個部分:第一個部分是由 1 個或 2 個英文字母所組成,第二部分是 6 個數目字,第三部分有 1 對括號,中間是 1 個數目字或者是英文字母 “A”。例如:“H856249(2)” 就是一個通常見到的身份證號碼了。
0 m/ C. _7 p' {' |1 B4 c6 {; x
: k& w  q: z1 D2 F相信年滿 30 歲的居民都會記得,大約在 20 年前,身份證號碼原本是沒有那個括號部分的,祇是某一年,政府更換了一張「電腦化」的身份證之後,才加上這個部分的。記得當年民間就流傳了很多傳聞,猜測那個括號中的數字,倒底有甚麼意義。(我亦曾經聽過一些傳說,十分可笑,但現在不一一細表了。)不過,自從有人在一些介紹趣味數學的刊物、網頁,又或者是一些電腦雜誌、教科書中解釋了這個括號中的數字是怎樣計算出來之後,這些傳聞就漸漸消失了。& @- u( Y. X& {# y, j  U

4 i4 V7 |& k- z& O5 L7 T6 Y9 o: `; q/ X) Z* F" e7 r1 d
原來,這個數字是用以下方法計算出來的:
/ V1 w# a) w5 v4 E2 }: K6 t首先,我們將身份證號碼中第一部分的英文字母,按字母的次序轉換成一個數字。例如:“A” 就轉成 “1”,“B” 就轉成 “2”,其餘的如此類推。然後將身份證號碼中的每一個數字(包括由字母轉換成的數字),由左至右,分別乘以 8、7、6、5、4、3、2 等數值,並將結果加起來。(如果身份證號碼有 2 個英文字母,則第一個字母應該乘以 9,其他數字則同上。)' v, o" }% T7 ]# y! v

. X( x8 P1 v- j; |* d例如:我在上面提過的身份證號碼,如果不理括號裏面的數字,應該是 “H856249”。先將 “H” 轉換成 8,然後由左至右乘以上述的倍數並求和,得1 O/ m% N; v+ f, y

6 ^9 U* @/ H" g4 a$ B5 s7 q8 ´ 8 + 8 ´ 7 + 5 ´ 6 + 6 ´ 5 + 2 ´ 4 + 4 ´ 3 + 9 ´ 2 = 218
6 n4 D% Q1 Z, Z) b
8 t$ H$ @8 o* p+ a% ?跟著就按以下的步驟計算出括號中的數字:先將上述的總和除以 11,如果整除,那麼括號內的數字就等於 0;如果有餘數,那麼就將 11 減該餘數,所得的差就是括號內的數字了。萬一那個差等於 10,就將括號內的數字定為 “A”。
3 K6 _3 q# S! w- `- H8 F6 g+ \
0 _( i8 A: x0 @; P' L, J9 d例如:在上面的例子中,我們將 218 除以 11,得餘數 9,所以括號中的數字就等於 11 - 9 = 2,整個身份證號碼就變成 “H856249(2)” 了。3 S, ?5 d. I" E' D
1 l* J% F& C3 U6 L+ ?4 L
又如果身份證號碼是 “H856049”,那麼總和將會是 210,餘數是 1,差是 10,所以括號中的數字就應該是 “A” 了。
! Y& ~% Q& y3 m- P' _/ H9 J$ g, j8 ~
原來身份證中的括號數字,就是這樣計算出來的!不過,大家有沒有想過,為甚麼我們要在原有的身份證號碼後面,加多 1 個數字呢?將身份證號碼裏的數字兜兜轉轉地計算一番,到底有甚麼意義呢?
* g( K- L1 j0 J- I- }% D
! Q+ Q9 k$ ]$ Z8 `7 \我曾經讀過一些文章,解釋使用括號數字的原因,是為了防止非法入境者偽造身份證!文章作者表示:因為偽造身份證的歹徒並不知道身份證號碼的秘密,當警察在街上截查身份證時,可以通過以上的計算,分辨出身份證的真偽!
6 ~- b( Q8 \/ L& O  ]
  o, C7 k0 J0 M3 y3 w$ m不消說,相信大家都會覺得以上的解釋荒謬之極!第一、既然我可以知道身份證號碼的計算方法,偽造身份證的人又怎可能不知?第二、相信大多數人在計算上述身份證號碼的總和與及餘數時,都會用計算機來輔助計算,我很懷疑在街上巡邏的執法人員,他們是否每一位都有如此強的心算能力,能夠即時進行上述的運算?故此,身份證號碼中的括號數字是用來仿偽的解釋,似乎並不合理。$ p; ?& j) ^6 \( i
1 Q: i6 H8 }, `9 b6 B. G1 S
那麼,這個數字又有甚麼用處呢?8 H4 J* Z& o+ z# \# Y$ j
9 d- w8 K( g7 R; T
大家知道,不同的人會有一個不同的身份證號碼,所以身份證號碼是一個用來識別巿民的最簡單方法。我們在日常生活之中,有無數的地方,都需要到這個號碼。正因為它簡單,亦正因為它重要,我們不應該在紀錄或抄寫的過程之中,將身份證號碼搞錯,否則可能會帶來非常嚴重的後果。2 V' b1 j1 k; O- P6 j0 u

1 d: n3 i3 b+ w但在以前,當我們印發身份證的時候,所有號碼都是緊貼在一起的,例如:“H856249” 這號碼之前的 “H856248” 和之後的 “H856250” 都屬於另一個人。萬一我們誤將 “H856249” 錯寫為 “H856248”,那麼就會有麻煩了!但是,這祇是 1 個數字之差,我們亦不容易察覺到這個錯誤。
/ ^- r/ K* @" h
, h7 T6 g% h& c' y2 ?+ ^; l為了解決以上的問題,我們引入了一個括號數字,術語上,我們稱它為「核對數位」(check digit)。引入這個核對數位最簡單的目的,就是將原本緊逼在一起的號碼分開,因為我們祇會從 0 至 9 或 A 中選擇其中一個數字作為這個核對數位,所以每個身份證號碼之間,都會有 11 個數字的「距離」。& P7 P2 B7 n6 [; M( X

2 _1 d8 X, V" s0 U: S) C第二、由於電腦的發明,當我們將資料輸入電腦時,我們同時可以指示電腦檢查那身份證的號碼是否正確,從而防止輸入資料時的人為錯誤。事實上,檢查身份證號碼是否正確的方法,比計算核對數位的方法直接得多,方法如下:5 |7 h& C: T& h& ?1 D
6 ?( G. ~1 A( e$ ~/ `
首先,我們依舊將身份證號碼中第一部分的英文字母轉換成數字。然後將身份證號碼中的每一個數字(包括核對數位),由左至右,分別乘以每個位的「位值倍數」,即 8、7、6、5、4、3、2 和 1(即將核對數位乘以 1),並將結果加起來,以後稱這個值為「核對值」。最後,將這個核對值除以 11。留意核對數位是將 11 減去前面 7 個位乘以其位值倍數之和除以 11 後的餘數,故此,連同核對數位計算出來的核對值,必定能夠被 11 整除。因此,如果我們發覺核對值不能被 11 整除,那麼輸入的身份證號碼就一定有錯了。(注意:電腦的運算速度非常之高,將身份證號碼輸入電腦後,一按鍵,它就可以完成有關的驗算,相信連使用電腦的人,亦不會察覺到電腦其實已做了很多次的計算!)
- \! F; V+ I" a% c- ]' i: l* ~. k' v1 S
2 R5 G4 E$ M5 t& x! j2 J例如:“H856249(2)” 是一個正確的號碼,按上述方法計算出的核對值等於1 c9 K$ J/ F4 t9 h2 Q( l  w$ i0 W
" f7 L( i* N+ G  I1 I! i
8 ´ 8 + 8 ´ 7 + 5 ´ 6 + 6 ´ 5 + 2 ´ 4 + 4 ´ 3 + 9 ´ 2 + 2 ´ 1 = 220
$ {; ^1 O* K0 f  d! K; d6 t
9 F% v6 `# m- _# v# R明顯這個數能夠被11所整除。假如在輸入資料時,將其中 1 個位的數字或字母搞錯,例如:變成 “K856249(2)”、“H856049(2)” 或 “H856249(A)”,那麼計算出來的核對值就會分別變成 244、212 和 228。由於這些數值不能被 11 整除,因此我們便知道這些號碼有錯了。. Q. q: F- K$ o7 t  v9 V

5 Y2 T; ^) Q) v" Z& e% T" f事實上,如果一個身份證號碼的正確核對值為 A,而在輸入資料時,(由右邊數起的)第 k 個位原本是 a,但現在錯入成 b(a ¹ b),那麼該核對值將會變成
" O& a) {% F7 M2 H: {0 @  G; ]1 W, z9 b5 i
A - a ´ k + b ´ k = A + (b - a) ´ k - c, }1 b; D4 |: h6 {$ b

0 s1 ]! s- C) B2 F& w留意在這裏,除非錯誤發生在第一個位的英文字母上,否則 (b - a) 的絕對值和k都祇會是 1 至 10 之間的數字,不會大於 11,故此 (b - a) ´ k 這個部分,不可能被 11 整除。但因為 A 本身可以被 11 整除,所以整個核對值 A + (b - a) ´ k,便不能被 11 所整除了。由此可以知道輸入的資料有錯。
, l# P. M" O. F, H
7 `5 U$ U4 Y$ P* X9 {: r當然,應用核對值的方法有一個死穴,就是頭一個字母如果錯入了一個和原本字母相隔 11 個位的字母,例如:將 “H856249(2)” 錯入成 “S856249(2)”(其核對值為 308,可以被 11 整除),那麼電腦亦無法知道到輸入的資料有錯了。不過,相信發生如此錯誤的機會極之小,所以這個方法亦相當可靠。3 {6 S" T% s4 z. m% K
) _" p8 |8 T0 U( a0 N9 b. k
還有,如果輸入資料時出現 2 處或以上的錯誤,例如:將 “H856249(2)” 錯入成 “H856049(A)”,我們亦無法將錯誤檢查出來。(當然,如果太容易出現 2 處的輸入錯誤,那麼我認為最佳的解決辦法,就是辭退那位輸入員,改聘另一位更可靠的人選了!)
6 S, u2 |* q5 @+ c0 R2 B3 p' k+ U2 A5 D8 {. A
另一個秘密
1 a7 t+ H: W  y) D留意在上面的討論中,那個位值倍數其實沒有多大的作用。事實上,如果我們不乘上任何倍數而直接將所有數位加起來,再定出一個核對數位,我們依然可以檢查出輸入資料時(1 處)的錯誤。那麼,我們為甚麼需要加入這個位值倍數呢?
4 H+ J  |# w/ o. A+ @' h
# O- Z6 \2 T. g# `2 n, }原來這亦是用來防止一般人一個容易犯上的錯誤,這就是誤將其中的兩個數字的位置對調。例如:將 “H856249(2)” 錯誤地變成 “H856294(2)”。
. E% U5 r6 E: i  m: R1 H# ]$ |! t  J5 T* ?# [2 r2 O; f
我們再假設正確身份證號碼的核對值為 A,第 k 位的數字為 a,第 k + n 位的數字為 b(a ¹ b;n ³ 1),如果我們錯誤地將 a、b 兩個數字對調了,那麼該核對值便會變成
; \3 V5 y- x& j0 j4 R0 ?& \- ^# \+ E; X' ]: _! J# b
A - a ´ k - b ´ (k + n) + a ´ (k + n) + b ´ k = A + (a - b) ´ n
9 R$ r8 P1 x: p7 X. L0 x* p; D& s, ^: v! D9 I9 l* ^/ v) P* G! J
同理,a、b 和 n 都祇會是 0 至 9 之間的數字,故此 (a - b) ´ n 這個部分,以至是整個核對值,都不能被 11 所整除,由此可以知道輸入的資料有錯了。留意如果沒有這個位值倍數,我們就無法偵測出這種錯誤了。5 S5 m- z1 r4 R, d* r/ y$ p- J
/ p' `, v7 z3 _8 _$ c1 I  ]
總而言之,身份證號碼中的核對數位,是一個簡單但非常聰明的設計,它可以讓我們很容易地偵測出輸入資料時的兩種常犯的錯誤,從而確保資料的可靠性。在整個過程中,亦請大家細心欣賞 11 這個數字的功用。由於 11 是一個質數(而且剛好大於 10),任何兩個小於它的數字相乘,都不能被它所整除,所以才能夠在上述運算中,找到輸入時的錯誤。如果換了一個合成數,情況就不同了。例如:12,我們知道 4 和 6 都小於 12,但 4 ´ 6 的結果,卻能被 12 所整除,因此 12 不可以用來做核對過程中的除數。
( L1 u9 D) U. t
4 O3 S+ S  T5 x! K# S最後,個人認為,既然核對數字已經成為身份證號碼中一個不可或缺的一部分,故此我們其實亦不必將它特別地指明,以一對括號將它括起來。更何況,將它括起來後,更會引起一些不知情的人胡亂猜測,實在無謂。故此,我提議政府在改發新的身份證明文件的同時,將這一對括號刪去。這不是更好的嗎?
malaysia 1 how???=.='''
我聽過p=新移民的說法
這是真的( W  j+ v( W8 b" a! n) U: j% L$ {
Form 5 電腦堂書本有講, 個個位叫 Check Digit
要相信自己!!!
好似好難明....
有冇可以提供頭頭d英文有冇意思0 m: k4 e) d6 l1 d6 E+ M
P,H,V 好似係新移民. H7 D  m% q0 _# L2 T1 Z
R. XG 好似係攞WORK PERMIT8 i! c5 k0 t5 X, U6 a  W1 i( F
K,G,Z 多數香港出世,住左香港好多年
我地電腦都有個功課係要我地寫計身分證括號數既程式。
; R! C3 I7 C  g* f: p用pascal寫。
<a href="http://22sc.net/bbs/get.php?id=44"><img src="http://22sc.net/bbs/images/logo.gif"></a>
我地中三電腦都有教
返回列表 回復 發帖
<<新主題 | 舊主題>>
娛樂滿紛 26FUN » 吹水版 » [轉]身份證號碼的秘密

重要聲明:26fun.com為一個討論區服務網站。本網站是以即時上載留言的方式運作,26fun.com對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。26fun.com有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。