身份证引发的讨论跟同事聊天的时候得知他的身份证号跟别人重号了,而他的身份证恰巧又丢了,所以带来了很多
身份证引发的讨论
跟同事聊天的时候得知他的身份证号跟别人重号了,而他的身份证恰巧又丢了,所以带来了很多麻烦,正在考虑如何补办的问题,同时引发我们的一次讨论。
说身份证应该每个人的都不一样,应该是主键才对,为什么会重呢?至少也应该设置一个唯一键的约束吧,比好比自己的mail做主键不就是很好的解决吗。我考虑之后想大概是这样的,中国人都知道原来的身份证是15位的,后来才升级到了18位,原来的时候设计明显有缺陷,可能那时候觉得同一个地方同一天的人超过100岁的人不会超过999人吧(忽略性别),而且主键肯定不是用的身份证号,后来18位之后由原来的出生日期只有后两位增加到了4位,末尾加了个机验码,虽然我也不知道最后这个码的用处。现在应该是可以避免重复了,但是由于数据库中已经有很多身份证重复所以身份证这个字段是不可以加唯一约束的,可以推断出15位时的老身份证也没有唯一约束,也许数据库设计的时候有这个键,但是重复身份证的人太多了,没有办法在短时间处理,只好出此下策了。
总之在电视上也见过身份证重号有多么麻烦,希望大家没碰见这种事。
i--------表示身份证号码每一位的序号,从右至左,最左侧为18,最右侧为1。
a[i]-----表示身份证号码第 i 位上的号码
W[i]-----表示第 i 位上的权值 W[i] = 2^(i-1) mod 11
计算公式 (1) 令结果为 R
根据下表找出 R 对应的校验码即为要求身份证号码的校验码C。
R 0 1 2 3 4 5 6 7 8 9 10
C 1 0 X 9 8 7 6 5 4 3 2
由此看出 X 就是 10,罗马数字中的 10 就是X,所以在新标准的身份证号码中可能含有非数字的字母X。
主要原因还是开始办身份证时候(80年代末期),乡下甚至县级市都还不是计算机管理的,是人工编制所以才有重号,我还见过身份证是手写不是机打的。
那个时候登记是一塌糊涂,我老爸生日搞错,我老妈的姓也错了(可惜现在改都没办法了,好在读音一样也不在意了)
重号的几率很小的,因为前面的省县都一样,年月再一样,最后编号再一样才行。
不过奇怪的是现在都18位了,也都联网了,为何不主动检查出重号的人给他们换了呢
另:我的最后一位就是X,nnd忘记哪个银行了,身份证不能有字母的,害得我是用15位办的卡
主要原因还是开始办身份证时候(80年代末期),乡下甚至县级市都还不是计算机管理的,是人工编制所以才有重号,我还见过身份证是手写不是机打的。
那个时候登记是一塌糊涂,我老爸生日搞错,我老妈的姓也错了(可惜现在改都没办法了,好在读音一样也不在意了)
重号的几率很小的,因为前面的省县都一样,年月再一样,最后编号再一样才行。
不过奇怪的是现在都18位了,也都联网了,为何不主动检查出重号的人给他们换了呢
另:我的最后一位就是X,nnd忘记哪个银行了,身份证不能有字母的,害得我是用15位办的卡

我在第一次写验证18位身份证时大骂设计人员的没脑。。。
要用字母都用字母去。。。