101
loveour 158 天前
咱们之前很多地方电话号码还是 7 位数,更早甚至更短,为什么一开始不设计成 8 位数?因为增加位数是真的要成本的。最早的长途电话是怎么拨通的?是人工转接。为什么后来叫程控电话?因为很晚才出现可以自动拨打长途的电话。电话本身由于管理需要,号码也不是无规律的,而是比如最前面是长途区号,中间有电话局的号段,最后才是个人号码。这个数字资源是很宝贵的,打错电话概率不高打错了成本也不高。现在的号码在升级的时候为了简单也尽量是原来的号码直接加一个固定数字。
为了解决这个问题去浪费号段资源,去修改以前已经形成的大量号码,搞一个复杂没法记忆的规则加号码,这才是有问题的吧。 |
![]() |
102
cenbiq 158 天前
@KingHL 看了你的和上面一些评论,我发现这个程序员论坛居然还有挺多人不知道 checksum 是什么,电话号码没有规律并不影响 checksum ,checksum 的作用是检查输入是否具有意义。比如说第一个为 1 第二个为 2 第三个为 3 ,那么最简单的 checksum 就是依次相加,得到第四位是 6 ,也就是说当你输入 1-2-3 的时候,第四位如果不是 6 就一定是个错误的电话号码,当然相加得出来可能>9 ,所以真实情况会用别的 checksum 算法,比如 CRC ,或者异或。
|
103
evilwk 158 天前
为了一个小概率事件,没有任何意义,现在的手机有一项功能叫联系人
|
![]() |
104
Sentimental 158 天前
问题的前提应该是输错的概率是多少
|
![]() |
105
F281M6Dh8DXpD1g2 158 天前
楼主晚出生五十年
|
107
littlewing 158 天前
@PeakFish 就像身份证好最后一位一样
|
108
thevita 158 天前
其实 更大可能是 reuse 了
|
![]() |
110
nedqqcc 158 天前
说真的,还有人能接到正经电话吗?
1. 快递+外卖+平台客服,这类看到的基本都是虚拟号,不存在打错的可能 2. 家人,不说 60 后的父母辈,爷爷奶奶辈用微信打电话的都不少,毕竟“免费” 3. 正规机构,政府,银行,保险等,这批人打错概率很低,频率也不高 99.9%电话无非就是广告推销 |
![]() |
111
424778940 158 天前
不是等一下 为什么有一种弱智吧老哥的感觉
多加一位难道不用人记住吗? 能记住不还是有可能记错吗? 虽然能拦住一部分记错的人打出去 但解决不了根本问题 |
112
zmcity 158 天前 ![]() 电话号码是路由表,格式是(区号)-(移网/固网识别号)-(运营商编码)-(总机号)-(分机号),一位校验位恐怕不够呦
|
![]() |
114
swordspoet 158 天前
这是一个很好的问题。
|
![]() |
115
msg7086 158 天前
所以,为什么域名和 IP 地址不加校验?
v2ex.com0B20DC1D 多好呀,不怕输错域名了(狗头 |
116
julyclyde 158 天前
一位校验码扛不住的
我见过银行卡号输错还能汇款成功的 技术手段解决不了人傻的问题 |
![]() |
117
cherryas 158 天前
多加一位数记忆成本好几倍。
参考验证码,4 位数不需要记,6 位数 1 秒 ,8 位数要 5 秒, 11 位和 12 位看似差一位,实际沟通成本增加 5 秒不过分吧。 |
![]() |
118
cenbiq 158 天前
@shine1996 当然可以解决,我上面已经举例子了,如果是 3 位数字+1 位依次相加校验码,那么输入 1-2-3 之后必须输入 6 。以这个举例子,你把 123 想象为对方手机号前 len-1 位,最后一位为校验位,那么 1236 是唯一的 123 开头的手机号码的可能形式,输入 1235 或者 1246 一定判定为错误手机号。
|
![]() |
119
cenbiq 158 天前
@nedqqcc 这倒是,因为手机电话发明出来之后马上进入移动互联时代,这导致手机号播错已经不是啥大问题了。现在联系方式多种多样,还有通讯录不需要人工输入手机号,唯一的作用就是在面对面添加对方手机号的时候能当场输入当场验证,不过这点也被直接播对面号码解决了。校验码的想法是对的,就像有人说的身份证就是这样,只不过时代变了这个需求没那么硬了。
|
![]() |
120
lambdaq 158 天前
汽车为啥不加个火箭发动机,这样可以起步更快
|
![]() |
122
sun019 158 天前
需求确定,这个就是技术上实现没问题,但现实中扯蛋的伪需求。
什么叫拨错,拨错的意思是没存在电话薄里面或者凭记忆输入的号码。 就是这个号码没有一个电话本对应于你要拨给谁的,只是凭记忆。 这个记忆,怎么映射拨错号码是否对呢? |
![]() |
124
greensea 158 天前
其实我有一个不成熟的建议,与其加一个检验位,不如允许用户在现有号码基础上,任意添加一个 4 位尾数,这样可以有效打击号码倒卖。
比如说我的号码是,13800138000 ,当我开启了这个功能点后,直接拨打这个号码是无法接通的,必须输入一个我设定的 4 位尾数(例如 1357 ),才能接通。我可以把 1380013800-1357 这个号码告诉熟人,这样他们可以通过电话联系到我。 现在重点来了,我不仅可以指定 1357 这个尾数,我还可以指定任意尾数,于是: 在淘宝留的快递电话:13800138000-1111 去看房子时留的联系方式:13800138000-2345 去 XXX 的时候留的联系方式:13800138000-9876 当别人拨打这个号码的时候,局方的通话记录中会记录(并允许用户查询)这个尾号。好的,这下谁卖了我的号码可就一清二楚了。 |
125
shine1996 158 天前
@cenbiq 是的, 我意思只解决了接到电话的人的问题, 不会被骚扰, 就像是访问输入网址网站一样,
诶输错了,进入一个不认识的网站, 为什么会输入错误呢, 怎么解决输入错误的问题, 就是浏览器书签和电话本一样这是最佳的方案, 而不是增加用户输入成本不让你访问 |
126
wysnxzm 158 天前
bro 是特工,也把别人当特工
|
![]() |
127
niubiman 158 天前
和"您所拨打的用户是空号"效果是一样的, 但是代价太大, 典型的"可以, 但没必要"
|
128
ioxhklk 158 天前
这是个好问题,这个需求能解决很多人的问题,你的解决办法也很好,你可以针对这个痛点进行延伸并创业
|
129
Kiriya 158 天前
若无必要,勿增实体
|
131
aloxaf 158 天前
@PrinceofInj 我也非常震惊,点进来之前估计以为是讨论什么历史遗留问题之类的,结果很多人竟然连 checksum 是什么都不理解,还在嘲讽可行性……
|
![]() |
132
xkeyC 158 天前
然后某某系统:增加自动计算 checksum 功能,只需记忆前缀号码,一键回到解放前(
|
![]() |
133
zengxs 158 天前
不如先考虑下,你这个出发点「降低错误拨号」,对运营商是有利还是不利
|
![]() |
134
noErr 158 天前
经常接到有人输错号码打错的电话 - 有多经常
|
![]() |
136
jim9606 158 天前 via Android
这东西属于一开始没有的后面就没法加了。国内固话搞过升位也只敢加前缀。
|
![]() |
137
metaclass 158 天前
有校验位想要凑靓号就很难办了,不可避免会生成比如 4 和 13 之类的,会浪费一些好的号码,除非在校验位里再加入一个算法信息,有多个算法可供选择生成校验位这样能够避免一些不靓的
|
138
jaydenhu8077 157 天前
@cenbiq 我还是没懂加一位 checksum 来解决输错号码而打错电话的情况?现在有两个人 A\B ,A 的电话 123456 ,B 的电话 123457 ,我想要打给 B 的,但是我输入成 A 的电话号码了,这种情况你怎么解决或者提醒我打错了?因为用户输入的电话号码肯定是唯一的,如果这个号码存在肯定是能呼出成功的啊,号码不存在现在已经有这个功能了“您拨叫的号码为空号”。
|
139
jxl 157 天前
@jaydenhu8077 想的一样,程序是无法识别人类的主观意思的对错。
|
140
lumia1020 157 天前
既然实名制,还不如拨号后,直接查询数据库显示姓名的某个字,来确定是否继续拨打。
但运营商做这个没有驱动力,运营商宁愿做流氓视频彩铃。 |
141
guiys 157 天前 via Android
极小众没必要。99.9%的电话是从名片打出来的
|
![]() |
142
williampan 157 天前
你就是以本我的角度出发,破坏盈利模式呀
|
![]() |
143
yh7gdiaYW 155 天前
@cenbiq 你这个"大多时候"就是你自己按自己的经历假定的,换个人比如我就没感觉到单纯按错键的占比有这么高。你这个方案是通过给所有人增加复杂度的方式,解决了一部分打错电话的情况,这听起来很像游戏策划的风格...
|
![]() |
144
cenbiq 155 天前
@jaydenhu8077 你的例子就很适合,checksum 就是可以防止你说的这种情况,比如说按照某种 checksum 算法 12345-后面只能跟 6 ,那么你输入 7 一定提示你号码不存在/验证失败,你拨给 123457 拨不出去因为不符合 checksum 规则,它不是一个可能的号码。如果错中间 N 位同样过不了 checksum ,除非你的错误正好原号码位和 checksum 位都对应了,那这就很巧了(类似于 md5 碰撞
|
145
jaydenhu8077 154 天前
@cenbiq 你还是没懂我意思啊,我打的号码 123457 ,但是我输入的号码 123456 是确实存在的,这个怎么能验证失败?就是 checksum 算法怎么确定我要打的号码是 123457 而不是 123456 ,这两个号码都是真实存在的,这个 checksum 怎么知道我要打的号码是 123457 ,最简单的问题我号码没输入完整之前 checksum 怎么知道我要打给谁?
|
![]() |
146
cenbiq 154 天前
@jaydenhu8077 你还是没懂 checksum ,checksum 保证了不会 1-2 位数字变动能给你拨出去的可能,原号码 123457 如果是一个存在的号码,那么 123456 就一定不是一个可能的号码
|
147
jaydenhu8077 154 天前
@cenbiq 那按你这样说的还是没有解决输错号码打错号码的情况啊,按你说的‘原号码 123457 如果是一个存在的号码,那么 123456 就一定不是一个可能的号码’,这也只能确定我输入的这个号码是不存在。现在有个情况是你有一个号码,我也有一个号码,第三个人想打你的电话号码,但是输成我的号码了,这情况怎么避免?而且你在什么时机下校验呢?手机号码 11 位,不可能我只输入 7 或 8 位就能判断我输入的是错的吧?你还是没解释清楚,在我没输入全部的号码之前你怎么判断我输入的是错误的
|
![]() |
148
cenbiq 154 天前
@jaydenhu8077 你搞混了 validation 和 identification 两个概念,checksum 只能做 validation 即有效性验证,让你输入完手机号就能告诉你是否是一个可能的手机号,无法帮你去 identification 。就以你的例子,你都把两个人号码完全记混了,这说明你需要的是通讯录。checksum 校验当然发生在输入完完整号码时
|
149
lw4free 154 天前
如果 checksum 在终端 那在用的功能机和固话就会忽略这个 checksum 功能 所以只能在运营商端实现 增加 checksum 一定要增加位数吧 在用的号码肯定还继续用吧 checksum 也就只能是通过增发全新号码段实现 每年新增的号码对比在用的号码 再算上按错号码的几率 运营商花几十亿甚至几百亿(如果系统和数据库不兼容增加号码位数可能费用甚至上千亿)为了解决这个微小概率事件 而且这功能是不盈利的 除非是工信部大老板疯了吧 最后 对于按错号码的人来说 他唯一的区别是听到对方说他打错了和 checksum 系统提示号码错了 他还是要核对号码后打第二次的 并没什么区别啊
|
![]() |
150
biubiuF 154 天前
能打通就说明电话号码有效啊,不明白加了校验位有啥用
|
151
jaydenhu8077 154 天前
@cenbiq 那这个 checksum 有什么用?我刚举的例子是你知道两个人的电话号码,也可以把记混理解为打错电话了呀,‘让你输入完手机号就能告诉你是否是一个可能的手机号’,当我输入完成的这个号码真实存在就肯定能打出去,如果不存在现在运营商已经有这个功能了“您拨叫的用户是空号”,你还是没讲清楚加个 checksum 的有什么具体作用,该打错的还是会打错电话
|
152
pWHx3x96 154 天前
通信是一个比互联网还要更考虑向前兼容的事情,只能说最早分配号码的时候没想那么多。
电话网络是一个树状结构,有一级一级的交换局(各地邮电大楼为代表)和对应区号,后面上手机的时候也就把规则继续沿用了。 |
![]() |
153
pureGirl 153 天前
打错就打错呗,影响到谁了,加了 checksum 电话号码还少了一位,而且一个 checksum 放最后也不好看啊
|
![]() |
154
kangwei 140 天前
很简单,运营商比起费钱做校验规则,更希望人们多打错电话。
|