编程与软件工程github.com编辑精选
程序员对电话号码的常见误解
Falsehoods Programmers Believe About Phone Numbers (2016)
2016 — 2019,它一次次回到首页
黑点是上首页(≥ 50 分)的那次投稿,空心点是没冲上去的投稿,点越大分数越高。
导读
这是 Google libphonenumber 项目仓库中一份著名的清单,列举程序员对电话号码的一堆错误假设:号码格式全球统一、号码永久属于某人、只有手机能收短信、手机自己知道自己的号码、各国编号规则相同等等。它的用意很直接:电话号码看起来简单,实际充满了跨国、历史遗留和运营商层面的边界情况,别自己随手写校验逻辑。
为什么经久不衰:它用一份短清单把“看起来简单其实满是坑”的领域一次性讲透,十几年后仍是提醒开发者别自己造电话号码解析轮子的经典参照。
HN 评论精选
把手机号当永久身份凭证,会让用户陷入无法使用也无法删除的僵尸账号。
我有一个绑定手机号的 Facebook 账号,闲置了几年。后来我用邮箱重置密码,但系统因为账号长期不用,自动把这次操作标记为“可疑”,要求我用手机号验证——而那个号码早就不属于我了。从客服问答区我发现自己不是个例:几乎找不到真人来处理这类验证问题。我只想删号,却删不掉。现在这个账号成了僵尸:不能用、不能删,里面还留着一堆个人信息。这全拜 Facebook 程序员对电话号码的错误假设,以及它那形同不存在的客服所赐。听说 Google 也有类似问题:机器运转正常时一切安好,直到你需要一个真人……跟我念:去他的 Facebook。
segfaultbuserr查看英文原文
I have/had a Facebook account with a phone number. The account was left unused for a few years. Recently, I used my E-mail to reset its password, unfortunately, since the account was abandoned for a long time, the system flagged my activity as "suspicious" automatically, and asks me for confirmation using my phone number. But I no longer own that number. And from the customer Q&A forum, I realized I was not the only one - it is almost impossible to find an actual human from Facebook to solve this kind of verification problem. All I wanted is to delete it, but I can't. Now, my account becomes a zombie, can't be used, can't be deleted, and has lots of personal information. All thanks to the falsehoods Facebook programmers believed about phone numbers, and its non-existent "customer [0]" service. I've heard Google has similar issues [1], if the machine works, then everything is fine, until you need a human... Repeat after me: fxxk Facebook. [0] because I'm the product, not the customer? [1] https://news.ycombinator.com/item?id=18886804, and read this comment, https://news.ycombinator.com/item?id=18887548
补充三条谬误:手机未必知道自身号码、SIM 与号码多对多、索要手机号的合理性取决于应用场景。
再补充几条:“手机会知道自己的号码”——不打电话不发短信,手机根本无法知道自己号码;有些 SIM 卡存了“本机号码”,但并不可靠,有时还是错的。“SIM 卡永久绑定一个号码”——SIM 卡与号码可以多对多,且会随时间变化。“社交应用 X 要求手机号注册,所以我们也该要求”——用户对消息类应用要手机号(便于找联系人)和对计算器、游戏或想匿名使用的应用要手机号,反应截然不同。
geuszb查看英文原文
More: * "A mobile phone knows its phone number." The phone cannot know its own phone number without making a call or sending a text message. Some SIM cards carry an "own phone number" record but it is not authoritative and sometimes inaccurate. * "A SIM card is permanently assigned to a phone number." SIM cards to phone number relationship can be many:many and change over time. * "<Social app X> requires phone number to sign up, so we should too." Users actually react very differently when a messaging app asks for their phone number (useful to find contacts) vs a calculator app or a game or an app where they want to be anonymous.
用“是否手机号”判断真伪会误伤大量正当用户,VoIP 号码被系统性歧视。
我真恨这条居然是真的:“只有手机能接收短信”——其实有些运营商支持固话收发短信,Skype 之类在线服务也能收发。可对方会说“非手机号一律是欺诈,我们不接受”。于是我这个 VoIP 号码就被当成垃圾号拦下(顺便说,Verizon 的 My Numbers 功能显示的也是 VoIP 而非手机号)。更气人的是,对方会“把认识的科技圈朋友的 Google Voice / Google Fi 加白名单”。结果我还得关心自己的“手机”运营商底层用什么网络,或者干脆改用 Google。最后一条:我的信用合作社刚更新条款,说 Zelle 不允许绑定 Google Voice、VoIP 或类似号码。可我已经绑了这种号码,怎么办?“你的 Zelle 权限暂停,请提供手机号。”可那就是我的手机号。“那没办法。”
techsupporter查看英文原文
Flying Spaghetti Monster I hate that this is real: > Only mobile phones can receive text messages > Some service providers support sending and receiving text messages to fixed-line numbers. There are also online services like Skype that can send and receive text messages. "Oh but not-mobile-number phone numbers are always fraudulent so we don't accept them!" Great, I love getting caught in spam traps because I have a mobile phone...but it is a VoIP-backed system so the numbers show up as VoIP. (BTW, Verizon's "My Numbers" feature also show up as VoIP numbers, not mobile.) Even more annoying: "Oh, but a bunch of people we know who are also technology professionals happen to use Google Voice / Google Fi so we'll just whitelist them." Grrr. So now I have to care what my "mobile" provider uses for its underlying network or just use Google. And the last one: My credit union just sent out a terms of service update saying I "cannot use Google Voice, VoIP, or similar numbers with Zelle." OK, but I already have a number like that registered, what now? "Your Zelle access is suspended until you give us your mobile number." But that is my mobile number. "Too bad."
从国际编号差异到信令细节,作者补出了一份更长、更贴近真实电信系统的谬误清单。
根据个人经验,我会列出一份相当不同的清单,比如:以为别国的电话编号规则和自己国家一样;以为别国都像欧盟国家或 NANP;以为末 10 位就是用户号码;以为地理号码真的对应地理位置;以为 123456789 适合做测试号码;以为 STD 等同于 NPA-NXX;以为 NANP 长途前缀 1- 就是国家码;以为现在只有国内和国际两种格式;以为用户不用 E.164;以为紧急号码只有一两个、容易过滤。关于电话机本身还有一堆:以为听到回铃音对方就已经在振铃;以为回铃音来自对方;以为所有网络都用带内呼叫进程音;以为在 G.729 语音编码上发传真没问题;以为 DTMF 带内且普遍支持,或带外且与媒体同步;以为被叫拒接只有一种方式且从不涉及接通;以为 TPC 不需要知道固话的真实物理位置、靠“GPS 芯片”追踪手机;以为只有主叫在线时才能追踪通话;以为来电显示不可伪造且跨网跨国都有效;以为被叫总能挂断通话……
JdeBP查看英文原文
I would, from personal experience, construct a quite different list. Some of mine would be: * Every other country's telephone numbering is like one's own. * Every other country's telephone numbering is like that of EU countries, or like the NANP. * The last 10 digits are the subscriber number. * Geographic numbers are actually geographic. * 123456789 is a perfectly fine number to use for test calls. * STD is exactly like NPA-NXX. * The leading 1- in NANP long distance form is the country code. * There are only national and international forms nowadays. * Users do not use E.164 themselves. * Emergency numbers are easy to filter out, as it's only one number. There are also falsehoods that people believe about telephones, which I would start with: * When you hear the ringing tone, the other end is already ringing. * Your ringing tone comes from the other end. * Every network sends in-band call progress tones. * It's perfectly fine to use fax over a G.729 'phone. * DTMF is in-band and universally supported. * DTMF is out of band and synchronous to media. * There is only one way that callees reject calls, and it never involves being connected. * TPC does not need to know the correct physical location of your non-mobile 'phone. * TPC tracks mobile 'phones through "a GPS chip". * Calls can only be traced whilst the caller is on the line. * Caller-ID is unspoofable and works across networks and across countries. * The callee can always clear calls. * Only the caller can clear a call.
历次讨论
同类还值得读
开源应用架构
The Architecture of Open Source Applications
《开源软件架构》(AOSA)是一本在线免费书,邀请知名开源项目的作者亲自剖析其内部设计,涵盖 SQLAlchemy、LLVM、Audacity、Apache、Bash 等系统。
编程与软件工程上首页 9 次 · 2011–2024aosabook.org编辑精选编程语言简史:简短、不完整且多半错误
A Brief, Incomplete, and Mostly Wrong History of Programming Languages
一篇以戏谑、故意不准确的方式回顾编程语言史的博客文章,用夸张轶事和讽刺定义串起 Lisp、C、C++、Java、JavaScript、PHP 等语言。
编程与软件工程上首页 8 次 · 2009–2021james-iry.blogspot.comSQLite 是如何测试的
How SQLite is tested
SQLite 官方文档页,系统介绍 SQLite 的测试体系:多种测试方法(TCL 测试、模糊测试、回归测试、静态分析等)和海量测试用例,展示了这个小型开源项目如何靠极致测试获得…
编程与软件工程上首页 8 次 · 2009–2025sqlite.org编辑精选高级编程语言(2009)
Advanced programming languages (2009)
Matt Might 的经典文章,按用途推荐“高级编程语言”:如果追求就业就选主流语言,如果追求表达力、学术研究或创业,则推荐 Haskell、OCaml、Scala 等函数式语…
编程与软件工程上首页 8 次 · 2009–2022matt.might.net我的 Forth 与栈机器经历
Yosefk - My history with Forth & stack machines
作者以亲身经历回顾了使用 Forth 语言和栈式机器的历程:既赞叹其简洁优雅、代码量小、可自举的优点,也坦率指出栈操作在实际编程中的痛苦,以及 Forth 社区文化中的问题。
编程与软件工程上首页 8 次 · 2010–2024yosefk.com编辑精选