1
citydog 2022-07-21 12:44:17 +08:00 1
不管怎么样,也用了这么多年了,也没出啥问题,日后还将继续这样
说它好不好没啥意义吧?你还能把它改了? |
2
cssk 2022-07-21 12:45:07 +08:00 8
不糟糕,香港的身份证号 tmd 还带括号呢
|
4
wonderfulcxm 2022-07-21 12:48:40 +08:00 via iPhone
当然不好,对输入设备有要求了,纯数字只要数字键盘
|
5
Wallace01 OP 口误一处:对应 0-9 不是 1-9
|
6
v23x 2022-07-21 12:50:18 +08:00
的确不好.要是我肯定很抗拒这种设计.感觉不够统一
|
7
nutting 2022-07-21 12:50:34 +08:00 via iPhone
校验有啥用
|
8
JQSM 2022-07-21 12:50:49 +08:00
@wonderfulcxm 数字键盘不止有 0-9 ,这倒不是什么问题。
|
9
Xusually 2022-07-21 12:51:38 +08:00
还行吧 反正证件种类也很多,可以填写身份证的地方很多时候也可以切换证件类型填写 护照、港澳通行证、台湾通行证之类的,都有字母
|
10
Akagi201 2022-07-21 12:54:03 +08:00
同问为啥需要校验, 手机号不是也不需要校验
|
11
villivateur 2022-07-21 12:56:27 +08:00
校验位是为了快速判断身份证号是否是伪造。话说当时不知道是哪个专家论证了一下,说 11 位比 10 位更安全
|
12
subpo 2022-07-21 12:58:05 +08:00 6
主要是判断有没有输入错误的 checksum ,规则都是公开的,判断不了伪造
|
13
tabris17 2022-07-21 13:01:18 +08:00 8
之前用过某个国家级的 APP ,输入身份证是 APP 内置的数字键盘,没有 X !
没有 X ! 没有 X ! |
14
kop1989smurf 2022-07-21 13:01:23 +08:00 3
|
15
Akagi201 2022-07-21 13:04:17 +08:00
@kop1989smurf #14 通信领域有校验位, 为了防止传输时候数据出错的. 这里自己根据算法算一下校验位没啥难度. 没啥一样. 我们平时设计 id 的时候也用不到校验位
|
16
kop1989smurf 2022-07-21 13:06:26 +08:00
@Akagi201 #15 同意你的看法,有机器辅助的前提下当然无法防止伪造,我所谓的编造,类似是“录错”或者“张口就来”的场景。
|
17
sobigfish 2022-07-21 13:06:37 +08:00
是,模除 10 不行吗?非得 11
|
18
teasick 2022-07-21 13:08:23 +08:00 31
身份证号最糟糕的设计是包含了太多个人信息在里面,偏偏又很多地方要用到身份证号,相当于公开裸奔导出泄露,泄漏一个身份证号,意味着同时泄露了出生日期和出生地。
|
20
jifengg 2022-07-21 13:16:59 +08:00 5
我还有一个觉得不好的地方,x 是有大小写的,有的系统不忽略大小写,会导致不匹配。
|
21
hzcer 2022-07-21 13:23:40 +08:00 via iPhone 6
因为 11 是质数,10 不是
|
22
masterclock 2022-07-21 13:25:39 +08:00
不好,无法理解为什么这么设计
1. 增加了一个原本不使用的符号,无法输入、甚至无法显示 2. X 是什么?很多人不认识、不会读。 3. 模 11 效果比模 10 好很多吗?如果是,还不如升 19 位 |
23
Wallace01 OP 个人觉得,不改变校验算法前提下,我宁愿用两位表示校验位,00-10 ,这样比 X 带来的影响小一些
|
24
cpstar 2022-07-21 13:45:08 +08:00 3
换个角度,你要思考为什么这么去校验,一个校验算法,到底要校验什么。目前的算法,前 17 位每一位都用不同的权,但是权不是连续上升或者下降,而是非常离散的,为什么会这样?至于 11 还是 10 ,那就是质数的问题了,那问题来了,能否模 7 ,把校验位降到 0-6 ?
why ? why ? why ?刨根问底,你就能理解这个算法,并且直接回答这个 X 到底是巧妙还是冗余了。 |
25
JNotEnoughW 2022-07-21 13:46:14 +08:00
@teasick 是的赞同 相比于表现形式 我也更加反感如此赤裸的内容拼接
|
26
cpstar 2022-07-21 13:46:52 +08:00
补充 24#,反正现在 18 位如果校验不过去,是能够直接定位哪一位错误的,而存在两位错误我就不知道了。
|
27
zqqf16 2022-07-21 13:48:08 +08:00
我的最后一位就是 X ,平时用起来还好,就是有时候会遇到奇葩系统,X 竟然区分大小写……
|
29
hertzry 2022-07-21 13:49:23 +08:00 2
X 不就是 10 吗?用一位表示了 11 个数,挺好的想法。
|
30
luob 2022-07-21 13:50:44 +08:00
校验位带个 X 这个设计恐怕也是 90 年代把世界各国的各种规章制度稀里糊涂乱抄一气的产物之一,不知道有没有谁能考证一下
不过它既然成功地活了下来,换了三轮身份证都没被重新设计,说明总体上还是没啥问题的 |
31
agegcn 2022-07-21 13:57:20 +08:00
可能两位校验更好。可以取模更大的质数
|
32
stephenyin 2022-07-21 14:07:26 +08:00 3
就算是表示 10 ,也应该用 A 啊,用 X 什么鬼设计?不懂 16 进制的人真的是没法交流。
|
34
Maxxxxyu 2022-07-21 14:17:18 +08:00 5
@stephenyin #32 罗马数字 10 就是 X ,估计是因为这个啊
|
35
PureTentacle 2022-07-21 14:19:21 +08:00
@stephenyin 罗马数字啊
|
36
dcsuibian 2022-07-21 14:30:07 +08:00 4
不是。
1 、身份证校验位可以离线先过滤掉一些输入错误,毕竟身份证那么长。 2 、上面有人说了,11 是质数,10 不是,那“10 进制是不是一个糟糕的设计?” 3 、X 对应的是罗马数字 10 ,跟 16 进制没啥关系。对文盲,X 可比 A 好多了,你见过几个人念 iphone ten 而不是 iphone 叉呢。 4 、争端主要在于 X 和双校验位。确实,双校验位就只用数字了。但 X 也有好处,因为真的会有 nc 程序员在数据库里用整形存手机号。 |
37
snw 2022-07-21 14:44:37 +08:00 via Android 12
讨论了这么多楼层,都没有人提到这个标准算法的来源吗?
身份证校验位是个标准算法,来自于 ISO/IEC 7064 里的 MOD 11-2 ,国标是 GB 11643 。 另外,这个 ISO 里也有 MOD 11-10 的算法可以让校验位落在 0-9 ,但属于 Hybrid System ,算起来比较麻烦,更重要的是没有快速算法。 |
38
libook 2022-07-21 14:44:56 +08:00 6
参考国家标准《公民身份号码》编号为 GB 11643-1999 ,有这么一个信息:“值等于 10 时,用罗马数字符 X 表示。”
标准都是公开的,防伪造不大现实,个人认为可能防止录入错误的效果更好。 直觉上阿拉伯数字之余多了个罗马数字确实可能在使用上会有些不便,但说是糟糕设计倒还不至于。 这让我想到新入职的开发人员可能会对系统现有设计有诸多看法,但其实很多都是因为一些历史上的变化与取舍才最终发展成这样的,不能完全抛开历史包袱于不顾。 所以最好是能找到一些当年设计身份号码的过程记载,看看为什么最终选择了这个方案,看看当年选择这个方案是否合理,以及发展到现在是否必然。 |
39
20015jjw 2022-07-21 14:47:34 +08:00 via iPhone
都是数字
visa 最后一位也是校验 不细说 |
40
HiCoder 2022-07-21 14:52:33 +08:00
银行账号、三大卡卡组织的卡号,都是有校验位的,防止输错
|
41
longgediyi999 2022-07-21 14:57:31 +08:00
不怎么样 有时候大写报错 有时候小写报错 有时候大小写都不报错
|
42
snw 2022-07-21 15:00:33 +08:00 via Android
@snw
顺带一提,除了 GB 11643 外,还有 GB 11714 是这个 ISO 的扩展,还有 GB 32100 也是这个 ISO 的变种(计算顺序反过来) |
43
zxcslove 2022-07-21 15:02:15 +08:00 1
有没有可能,应用这套体系的时候,计算机系统还没有普及?
|
44
zxCoder 2022-07-21 15:02:40 +08:00
身份证号码刚从 15 位换成 18 位那几年,我就因为最后一位是 X 遇到很多麻烦,不知道的人还以为我在瞎写,整个 X
|
45
flexbug 2022-07-21 15:07:09 +08:00 via iPhone
我身份证最后没有 x ,我闺女有,估计她以后会麻烦点
|
46
adoal 2022-07-21 15:10:00 +08:00 via iPhone
典型的“原理还行,体验不好”
|
47
wonderfulcxm 2022-07-21 15:22:12 +08:00 via iPhone 1
@luob 没有改不是说明没有问题,而是因为太多的人、太多的旧系统还用着原来的规则,并且很多老系统更新也不现实,这一改的成本太大了,还不如将错就错,向前兼容,四个字:积重难返。
|
48
davidyin 2022-07-21 15:25:53 +08:00 via Android
早期身分證號,年份只有兩位,也麼有校驗位。
據說還有重號的。 |
49
davidyin 2022-07-21 15:27:21 +08:00 via Android
還有的系統輸入這個 X 还必须大写。
|
51
popok 2022-07-21 15:46:42 +08:00
|
52
pkoukk 2022-07-21 15:51:38 +08:00 1
@zxcslove 公布这套系统的时候已经是 1999 年了,在居民家庭普及度可能比较低,但是部门普及度已经很高了。那会儿我爸就是个乡镇公务员,办公室里已经有一台电脑了
|
53
Felix2Yu 2022-07-21 15:55:20 +08:00
在那个纸质年代,校验位有意义。但是在这个身份证查验基本都是联网的时代是否还应该存在?
普通在线系统多数前端也只是正则判断一下位数和每一位的范围。真要实名实人验证的严肃场合,也不会只要求身份证数字校验通过,还要人脸或指纹验证。 如果要兼容的话其实可以直接删最后一位,改成 17 位。 |
54
xqk111 2022-07-21 16:02:26 +08:00
从设计的角度来说,感觉不太好
|
58
2n80HF9IV8d05L9v 2022-07-21 16:20:13 +08:00 via iPhone
希望身份证号输入时候允许输入 16 进制
|
59
lambdaq 2022-07-21 16:26:50 +08:00
ISO 7064
除以 10 效果不好的原因是,不是质数,除了没用。11 是最接近的质数。 |
60
tmxklzp 2022-07-21 16:36:31 +08:00
看完上面的回复后有个疑问,这个身份证校验位真的需要模 11 吗?就算前面的数字计算结果不够平均但是否模 10 也足够起到校验的作用了呢?
|
61
zxcslove 2022-07-21 16:37:45 +08:00
@pkoukk 是啊,但整体的普及度太小,基层单位多数当做打字机用,另外翻翻纸牌。当时社会上巨量的表单证卡还是手工填写的,位数不固定就不太合适。
|
62
tmxklzp 2022-07-21 16:37:48 +08:00
回复完后找到了个知乎问题: https://www.zhihu.com/question/20205184
|
63
killeder 2022-07-21 16:38:17 +08:00
浪费时间的话题
|
64
lisongeee 2022-07-21 16:38:31 +08:00
下一代身份证可以在背面增加二维码表示身份证号,我去做核酸老是扫半天
|
65
littiefish 2022-07-21 16:39:52 +08:00 via iPhone
@nutting 根据公式算出来的,你瞎编的话大概率假的
|
66
kakeiri 2022-07-21 16:40:03 +08:00
没有大统一,出生就定义了。本人是 13 开头,去潮州旅游,让登记身份证,工作人员喊了好几次不要写电话,是要写身份证号[摊手]
|
67
loading 2022-07-21 16:42:30 +08:00
如果你在身份证那个时代规划这个号码,你会用什么方式。网络没覆盖。
|
69
nieboqiang 2022-07-21 17:23:02 +08:00
@Akagi201 防呆设计,如果你不小心输入错了一位,能直接判断出来。
|
70
masker 2022-07-21 17:32:33 +08:00 via Android 1
@stephenyin 为什么你觉得你会 16 进制就很屌一样
|
71
gogorush 2022-07-21 17:48:43 +08:00
身份证号码对个人来说肯定是个特别垃圾的东西 为啥这么说 因为这东西是给旧时代的统计人员来弄的 包含太多个人信息 关键问题是 这玩意出错概率太多了 我就认识身份证号码因为同号出问题的 最好用 web3 加个人 token 验证这种 方式来代替掉
|
72
stephenyin 2022-07-21 17:53:57 +08:00
@masker #70 个人认为懂 16 进制的比不懂 16 进制的大概率会屌一点。😂
|
73
redeemer1001 2022-07-21 17:55:05 +08:00
@dcsuibian #36 最后一点戳中笑点
|
74
masker 2022-07-21 18:00:57 +08:00 via Android
@stephenyin 马云应该不懂 16 进制
|
76
lovelylain 2022-07-21 18:15:44 +08:00 via Android
绝对是,银行卡号最后一位也是校验位,有的卡号 16 位,有的 19 位,都没见卡号里有 X 的,制定身份证号的专家肯定是脑子有 X 才搞出这脑残玩意
|
77
snorlax 2022-07-21 19:20:37 +08:00 11
身份证号按二进制的方式展开后除以 11 的余数为 1(包括最后一位,X=10),也就是 Σak*2^k Ξ 1 (mod 11),k=17,16,...,1,0 ,这样只改变一位身份证号就一定通不过校验,因为要使(ai-aj)*2^k Ξ 0 (mod 11),只能使 11|ai-aj ,而 ai 和 aj 都只能取 0-9(或 X,也就是 10),所以不可能。
但是如果改成 mod 10 的话,只要 ai-aj=5 ,(ai-aj)*2^k Ξ 0 (mod 10)就可能成立,也就是改变一位身份证号也可以通过校验。所以选择了 mod 11 。 |
78
darknoll 2022-07-21 21:27:06 +08:00
非常糟糕,垃圾的设计
|
79
EminemW 2022-07-21 22:21:29 +08:00 1
其实校验算法很多地方都用到,比如银行卡是用这个 https://en.wikipedia.org/wiki/Luhn_algorithm
|
80
EminemW 2022-07-21 22:21:55 +08:00
|
82
vone 2022-07-21 23:11:42 +08:00 2
@sobigfish
身份证号的末位校验码算法最后一步模 11 是基于什么考虑? - 刘巍然-学酥的回答 - 知乎 https://www.zhihu.com/question/20205184/answer/223049155 |
83
gdm 2022-07-21 23:52:14 +08:00
这个 X 看着贼拉别扭,既然都模 11 了,怎么不模 31 ?
另外,我觉得相比起最后一位是字母,我更能接受第一位是字母,比如护照就是这样,不别扭 |
85
kaneg 2022-07-22 00:11:47 +08:00 via iPhone
只有最后一位是 x 的人才能体会其中的不便之处,其他人是根本意识不到的。理论上有超 1 亿人会遇到这个问题,但又只占总人口的 1/11 ,所以也只能是少数服从多数。从技术角度来说可以统一再增加一位,消除字母。
|
86
xiangyuecn 2022-07-22 00:38:34 +08:00
如果能用 11 ,那就完全能用 36 ,A-Z 全用上,校验效果岂不更屌。
只能用恶臭来形容(又想起了 GCJ-02 )。 简直臭不可闻😂 |
87
blankmiss 2022-07-22 00:57:00 +08:00
@xiangyuecn big 胆
|
88
xiangyuecn 2022-07-22 01:00:27 +08:00
|
89
Opportunity 2022-07-22 01:01:57 +08:00
@xiangyuecn 在作为纳税人识别号的时候,它确实是 BASE34
|
90
Darkatse 2022-07-22 01:04:15 +08:00 via Android
@xiangyuecn 31 可以,但是 36 肯定不行。36 不但是
|
91
Darkatse 2022-07-22 01:05:20 +08:00 via Android
@xiangyuecn 36 不但是合数,更是过剩数。校验位选择不是越多越好的。
|
92
dream7758522 2022-07-22 02:26:42 +08:00 via Android
提供一个思路,当最后一位是 x 时,用 0 表示。
|
93
polo3584 2022-07-22 09:42:02 +08:00
@dream7758522 那如果最后一位是 0 呢。。。
|
95
Devilker 2022-07-22 09:53:03 +08:00
反正 10 亿 已经泄露 X 不 X 没啥意义
|
96
ryh 2022-07-22 11:01:07 +08:00
校验位过于强大也反倒可以 从打码少的的号码,反推出完整号码😂 视频和文章里都见过只遮挡几位的
|
97
gengchun 2022-07-22 12:17:22 +08:00
这个不是简单的好坏的设计。
隐私的,和难以输入这些的其实还是没有理解这个东西的用户不是个人甚至不是大部分需要对个人身份进行确认的组织。 很多场合其实是滥用了身份证号。这个和美国社保号被各种滥用是一样的。当时怎么考虑的,具体原因不是很清楚。但现在看,这个东西设计的太容易输入也不是什么好事。所以很可能是故意的设计,就是要限制使用范围。 @zxCoder 你直接瞎写就好了嘛。现在就是真的需要查的地方,哪个不是直接刷的,哪有让人手写的。让人手写的都是自己瞎搞出来的。 |
98
putaosi 2022-07-22 12:47:03 +08:00 via iPhone
|
99
cysong 2022-07-22 13:38:14 +08:00
@stephenyin 罗马数字的 10
|
100
cysong 2022-07-22 13:40:34 +08:00
如果只是校验输错的情况,用 11 和用 10 ,错的都是错的,对的都是对的,没有区别
这里跟质数没什么关系 |