香港身份证问题请问香港身份证第一
在香港每一个居民都会获发一张身份证,证上的号码一共分为 3 个部分:
第一个部分是由 1 个或 2 个英文字母所组成.
第二部分是 6 个数目字.
第三部分有 1 对括号,中间是 1 个数目字或者是英文字母 “A”。
例如:“H856249(2)” 就是一个通常见到的身份证号码了.
身份证号码秘密中的秘密:
相信年满 30 岁的居民都会记得,大约在 20 年前,身份证号码原本是没有那个括号部分的,只是某一年,政府更换了一张「电脑化」的身份证之后,才加上这个部分的。 记得当年民间就流传了很多传闻,猜测那个括号中的数字,倒底有甚麼意义。(我亦曾经听过一些传说,十分可笑,但现在不一一细表了...全部
在香港每一个居民都会获发一张身份证,证上的号码一共分为 3 个部分:
第一个部分是由 1 个或 2 个英文字母所组成.
第二部分是 6 个数目字.
第三部分有 1 对括号,中间是 1 个数目字或者是英文字母 “A”。
例如:“H856249(2)” 就是一个通常见到的身份证号码了.
身份证号码秘密中的秘密:
相信年满 30 岁的居民都会记得,大约在 20 年前,身份证号码原本是没有那个括号部分的,只是某一年,政府更换了一张「电脑化」的身份证之后,才加上这个部分的。
记得当年民间就流传了很多传闻,猜测那个括号中的数字,倒底有甚麼意义。(我亦曾经听过一些传说,十分可笑,但现在不一一细表了。)不过,自从有人在一些介绍趣味数学的刊物、网页,又或者是一些电脑杂志、教科书中解释了这个括号中的数字是怎样计算出来之后,这些传闻就渐渐消失了。
原来,这个数字是用以下方法计算出来的:
身份证号码的秘密
首先,我们将身份证号码中第一部分的英文字母,按字母的次序转换成一个数字。例如:“A” 就转成 “1”,“B” 就转成 “2”,其余的如此类推。
然后将身份证号码中的每一个数字(包括由字母转换成的数字),由左至右,分别乘以 8、7、6、5、4、3、2 等数值,并将结果加起来。(如果身份证号码有 2 个英文字母,则第一个字母应该乘以 9,其他数字则同上。
)
例如:我在上面提过的身份证号码,如果不理括号裏面的数字,应该是 “H856249”。先将 “H” 转换成 8,然后由左至右乘以上述的倍数并求和,得
8 ´ 8 + 8 ´ 7 + 5 ´ 6 + 6 ´ 5 + 2 ´ 4 + 4 ´ 3 + 9 ´ 2 = 218
跟著就按以下的步骤计算出括号中的数字:先将上述的总和除以 11,如果整除,那麼括号内的数字就等於 0;如果有余数,那麼就将 11 减该余数,所得的差就是括号内的数字了。
万一那个差等於 10,就将括号内的数字定为 “A”。
例如:在上面的例子中,我们将 218 除以 11,得余数 9,所以括号中的数字就等於 11 - 9 = 2,整个身份证号码就变成 “H856249(2)” 了。
又如果身份证号码是 “H856049”,那麼总和将会是 210,余数是 1,差是 10,所以括号中的数字就应该是 “A” 了。
多此一举?
原来身份证中的括号数字,就是这样计算出来的!不过,大家有没有想过,为甚麼我们要在原有的身份证号码后面,加多 1 个数字呢?将身份证号码裏的数字兜兜转转地计算一番,到底有甚麼意义呢?
我曾经读过一些文章,解释使用括号数字的原因,是为了防止非法入境者伪造身份证!文章作者表示:因为伪造身份证的歹徒并不知道身份证号码的秘密,当警察在街上截查身份证时,可以通过以上的计算,分辨出身份证的真伪!
不消说,相信大家都会觉得以上的解释荒谬之极!第一、既然我可以知道身份证号码的计算方法,伪造身份证的人又怎可能不知?第二、相信大多数人在计算上述身份证号码的总和与及余数时,都会用计算机来辅助计算,我很怀疑在街上巡逻的执法人员,他们是否每一位都有如此强的心算能力,能够即时进行上述的运算?故此,身份证号码中的括号数字是用来仿伪的解释,似乎并不合理。
那麼,这个数字又有甚麼用处呢?
秘密中的秘密
大家知道,不同的人会有一个不同的身份证号码,所以身份证号码是一个用来识别??民的最简单方法。我们在日常生活之中,有无数的地方,都需要到这个号码。
正因为它简单,亦正因为它重要,我们不应该在纪录或抄写的过程之中,将身份证号码搞错,否则可能会带来非常严重的后果。
但在以前,当我们印发身份证的时候,所有号码都是紧贴在一起的,例如:“H856249” 这号码之前的 “H856248” 和之后的 “H856250” 都属於另一个人。
万一我们误将 “H856249” 错写为 “H856248”,那麼就会有麻烦了!但是,这只是 1 个数字之差,我们亦不容易察觉到这个错误。
为了解决以上的问题,我们引入了一个括号数字,术语上,我们称它为「核对数位」(check digit)。
引入这个核对数位最简单的目的,就是将原本紧逼在一起的号码分开,因为我们只会从 0 至 9 或 A 中选择其中一个数字作为这个核对数位,所以每个身份证号码之间,都会有 11 个数字的「距离」。
第二、由於电脑的发明,当我们将资料输入电脑时,我们同时可以指示电脑检查那身份证的号码是否正确,从而防止输入资料时的人为错误。
事实上,检查身份证号码是否正确的方法,比计算核对数位的方法直接得多,方法如下:
首先,我们依旧将身份证号码中第一部分的英文字母转换成数字。然后将身份证号码中的每一个数字(包括核对数位),由左至右,分别乘以每个位的「位值倍数」,即 8、7、6、5、4、3、2 和 1(即将核对数位乘以 1),并将结果加起来,以后称这个值为「核对值」。
最后,将这个核对值除以 11。留意核对数位是将 11 减去前面 7 个位乘以其位值倍数之和除以 11 后的余数,故此,连同核对数位计算出来的核对值,必定能够被 11 整除。因此,如果我们发觉核对值不能被 11 整除,那麼输入的身份证号码就一定有错了。
(注意:电脑的运算速度非常之高,将身份证号码输入电脑后,一按键,它就可以完成有关的验算,相信连使用电脑的人,亦不会察觉到电脑其实已做了很多次的计算!)
例如:“H856249(2)” 是一个正确的号码,按上述方法计算出的核对值等於
8 ´ 8 + 8 ´ 7 + 5 ´ 6 + 6 ´ 5 + 2 ´ 4 + 4 ´ 3 + 9 ´ 2 + 2 ´ 1 = 220
明显这个数能够被11所整除。
假如在输入资料时,将其中 1 个位的数字或字母搞错,例如:变成 “K856249(2)”、“H856049(2)” 或 “H856249(A)”,那麼计算出来的核对值就会分别变成 244、212 和 228。
由於这些数值不能被 11 整除,因此我们便知道这些号码有错了。
事实上,如果一个身份证号码的正确核对值为 A,而在输入资料时,(由右边数起的)第 k 个位原本是 a,但现在错入成 b(a ¹ b),那麼该核对值将会变成
A - a ´ k + b ´ k = A + (b - a) ´ k
留意在这裏,除非错误发生在第一个位的英文字母上,否则 (b - a) 的绝对值和k都只会是 1 至 10 之间的数字,不会大於 11,故此 (b - a) ´ k 这个部分,不可能被 11 整除。
但因为 A 本身可以被 11 整除,所以整个核对值 A + (b - a) ´ k,便不能被 11 所整除了。由此可以知道输入的资料有错。
当然,应用核对值的方法有一个死穴,就是头一个字母如果错入了一个和原本字母相隔 11 个位的字母,例如:将 “H856249(2)” 错入成 “S856249(2)”(其核对值为 308,可以被 11 整除),那麼电脑亦无法知道到输入的资料有错了。
不过,相信发生如此错误的机会极之小,所以这个方法亦相当可靠。
还有,如果输入资料时出现 2 处或以上的错误,例如:将 “H856249(2)” 错入成 “H856049(A)”,我们亦无法将错误检查出来。
(当然,如果太容易出现 2 处的输入错误,那麼我认为最佳的解决办法,就是辞退那位输入员,改聘另一位更可靠的人选了!)
另一个秘密
留意在上面的讨论中,那个位值倍数其实没有多大的作用。
事实上,如果我们不乘上任何倍数而直接将所有数位加起来,再定出一个核对数位,我们依然可以检查出输入资料时(1 处)的错误。那麼,我们为甚麼需要加入这个位值倍数呢?
原来这亦是用来防止一般人一个容易犯上的错误,这就是误将其中的两个数字的位置对调。
例如:将 “H856249(2)” 错误地变成 “H856294(2)”。
我们再假设正确身份证号码的核对值为 A,第 k 位的数字为 a,第 k + n 位的数字为 b(a ¹ b;n ³ 1),如果我们错误地将 a、b 两个数字对调了,那麼该核对值便会变成
A - a ´ k - b ´ (k + n) + a ´ (k + n) + b ´ k = A + (a - b) ´ n
同理,a、b 和 n 都只会是 0 至 9 之间的数字,故此 (a - b) ´ n 这个部分,以至是整个核对值,都不能被 11 所整除,由此可以知道输入的资料有错了。
留意如果没有这个位值倍数,我们就无法侦测出这种错误了。
总而言之,身份证号码中的核对数位,是一个简单但非常聪明的设计,它可以让我们很容易地侦测出输入资料时的两种常犯的错误,从而确保资料的可靠性。
在整个过程中,亦请大家细心欣赏 11 这个数字的功用。由於 11 是一个质数(而且刚好大於 10),任何两个小於它的数字相乘,都不能被它所整除,所以才能够在上述运算中,找到输入时的错误。如果换了一个合成数,情况就不同了。
例如:12,我们知道 4 和 6 都小於 12,但 4 ´ 6 的结果,却能被 12 所整除,因此 12 不可以用来做核对过程中的除数。
。收起