万物皆有编号 书架

第 03 章 / 共 12 章

第三章 · 唯一与可读:一对天生的冤家

上一章结尾我们留下一个矛盾:编号的第一使命是唯一,可纯唯一的东西往往又臭又长,没人愿意看。这一章我们干脆做个对照实验:请出两位站在天平两端的极端选手。

一位从不重复的机器人

第一位选手叫 UUID(Universally Unique Identifier,通用唯一标识符),说白了,就是一串随机生成的、长到几乎不可能撞号的字符串。你在数据库、日志、手机 App 里随处能见到它,长这样:

f47ac10b-58cc-4372-a567-0e02b2c3d479

它一共 128 个二进制位,其中最常用的 4 号版本有 122 位是纯随机的(剩下 6 位固定用来标记「我是哪个版本」)。122 位随机意味着有多少种可能?2 的 122 次方,约等于 5.3 × 10 的 36 次方——把地球上每一粒沙子都数出来,再乘上一百亿亿倍,还没它大。

你可能会问:随机生成,不还是有撞号的概率吗?有,但小到离谱。这里有个著名的反直觉现象叫生日悖论:一个班只要 23 个人,就有五成概率有人同一天生日——因为两两配对的可能性增长得比你想的快得多。按同样的算法套到 UUID 上,算出 50% 撞号概率需要生成大约 2.7 × 10 的 18 次方个。换算成人话:

假设全球所有机器加起来每秒生成一百万个 UUID(这已经是相当高的负载),连着生成一百年,总量约 3 × 10 的 15 次方个。算式很简单:撞号概率约等于总量的平方除以两倍的总可能性数,即 (3 × 10^15)² ÷ (2 × 5.3 × 10^36) ≈ 9 × 10^-7,约百万分之一——跟一个人一年里被雷劈中的概率差不多。工程上,这就叫「不会发生」。但要注意,这个结论成立的前提是「总量控制得住」:真到了每秒生成十亿个的规模,一百年下来就会逼近 50% 那条线,所以 UUID 系统在高并发场景还得加重复检测兜底。

UUID 最妙的地方在于:它不需要任何中央发号机构。你电脑、我手机、某台服务器,各自随手一抓,就是全球唯一。没人登记,没人协调,没人批准。唯一性靠的是数学,不是管理。

代价呢?显而易见:没有任何人能看一眼就记住它。它对人完全关闭,纯为机器服务。你跟客服说「我的订单是 f47ac10b-58cc……」,对方会在心里骂你。

一位生怕你看不清的选手

第二位选手在马路对面:中国车牌。

92式车牌是我国 1992 年定下来的车牌样式,结构是「汉字 + 字母 + 五位字符」,比如「沪A·D58K2」。拆开看:第一个汉字是省份简称(沪=上海),第二位字母是地市代码(A 一般留给省会或首府),后面五位才是这辆车自己的编号。

这个设计里每一条规则都在为「人」让路。举一个细节:车牌字符里永远不会有字母 I 和 O——因为 I 长得像 1,O 长得像 0,交警隔着五十米一眼扫过去,绝不能在「这是 1 还是 I」上犹豫。为了让人眼不误判,号段容量宁可砍掉两个字母。

再举一个:2016 年新能源车牌从 5 位升到 6 位,第一位固定用字母 D(纯电动)或 F(非纯电)。为什么要加这一位?因为老号段快发完了,而加一位之后容量扩大约 30 倍;为什么用 D 和 F 开头?因为这是拼音首字母,人一看就懂「这是电车」。

你看,车牌和 UUID 正好倒着来:

分叉口:这个号码是给谁看的

这两个案例放在一起,编号设计的第一道岔路口就露出来了:这个编号的主要读者,是机器还是人?

注意我说的是「主要读者」。几乎没有编号是纯给机器或纯给人的,区别只在权重。怎么判断?有几条很实用的评判标准:

用一句话总结这对冤家:唯一性可以向数学购买,可读性只能向设计购买;钱花在哪边,取决于谁在读。

不过你可能已经注意到一个破绽:车牌说它可读,可它并不「绝对唯一」——「沪A·D58K2」只是在上海发牌范围内唯一,全国加起来靠的是「省份汉字」这一段前缀。换句话说,车牌没有追求 UUID 那种单点唯一,而是用「分层」的办法凑出了全局唯一:先看省,再看市,再看号码。

这个「先看大圈再看小圈」的思路,其实是编号系统能规模化的真正秘密武器。为什么一个号码装不下的时候,切几段就能装下了?电话区号和邮政编码会给我们答案——下一章见。

万物皆有编号
费曼式写法 · 由多个 AI 代理撰写与互相审校