万物皆有编号 书架

第 01 章 / 共 12 章

第一章 · 快递单号为什么那么长

先别把它当一串乱码。找一张手边的快递面单,盯着那串数字看十秒钟——比如京东物流的单号,十五位,以 JD 开头。十五位纯数字意味着一千万亿种组合,而中国全国一天的快递量是多少?根据国家邮政局的公报,2023 年全国快递业务量 1320.7 亿件,摊到每天大约 3.6 亿件。

也就是说,快递公司给自己准备了一个能装一千万亿的盒子,每天只往里扔 3.6 亿个包裹。容量比需求大了几百万倍。是这些公司数学不好吗?恰恰相反——多出来的每一位,都是被现实教训过之后加上去的。这一章我们就把这根十五位的绳子拆开,看看每一股里藏着什么。

编号不是字符串,是压缩包

拆开一根典型的快递单号,你会发现它大致是几段拼起来的:公司标识、日期、网点代码——揽收你这个包裹的那个营业点在全网的几千个网点里排第几——再加上一段流水号,就是当天这个网点经手的第几个件。

所谓「编码」,说穿了就一件事:把本来要用一句话才能说清的信息,折叠进一串固定长度的字符里。就像写信封,「北京市海淀区中关村大街 27 号」是一句话,邮编 100080 是它的压缩版。快递单号干的也是这个,只不过它压缩的不只是地点,还有时间和经手人。

为什么要这么设计?想想分拣中心那一幕:传送带上的包裹一秒过一个,扫码枪「嘀」一声,系统要在几十毫秒内回答三个问题——这单是谁收的、哪天收的、接下来该往哪条流水线走。如果单号只是数据库里一个毫无含义的递增序号,那每回答一次就得查一次中央数据库;而把网点和日期直接编进号码里,分拣机在本地就能把第一段拆出来,当场做路由判断。号码本身成了随身携带的档案袋。

这就是这套编号教我们的第一件事:好的编号不是随机字符串,而是一套压缩过的信息设计——每一位都有岗位,每一位都在替系统省一次查询、省一次追问。

位数是被谁逼出来的

那为什么要十五位?十位,一百亿,也够装一年的量了啊。

问题出在「流水号从哪天开始归零」上。假如单号只有九位,一个繁忙网点一天收十万件,八位就烧完了;更要命的是号码会循环复用——三个月前那个已经签收的包裹的单号,今天又发给了新包裹。平时没事,一旦出事就是大事:你查物流,跳出两条记录;客服理赔,两个包裹共用一个号,谁是谁都说不清。

写软件的人都懂这个道理:空间要按「最坏的一天」来留,不能按「平常的一天」。双十一单日的处理量能冲到七亿件上下,是日常的一倍半。编号空间如果卡着日常量设计,那每年最忙的那天,恰好就是系统崩掉的那天。

所以多出来的位数,每一根都是一条伤疤:有的为了扛住双十一的洪峰,有的为了让单号隔得足够久才重复、旧件的记录早已归档,还有的纯粹是给还没发明的业务留座——万一以后要区分冷链件、国际件、同城件呢?号码长度一旦定死、印进几亿台扫码枪的固件里,想再加一位就是伤筋动骨。编号空间的大小,是在设计那天就预付的保险费。

这本书要回答的问题

一根快递单号,拆到最后其实是个哲学问题:世界为什么需要给一切编号?

答案藏在一个很日常的场景里。你对客服说「我的包裹」,客服看到的是三亿个在途包裹;你说「就是那个蓝色的箱子」,对方依然无从下手。直到你报出那十五位数字,三亿分之一的搜索瞬间变成了一次精确命中。编号的本质,是把「那一个」从「那一堆」里无条件地挑出来——不靠形容,不靠运气,不靠对方记性好。

包裹需要它,你的手机需要它(第九章会拆给你看),你银行卡里的钱能跨国旅行靠的也是它(第十章),连地球表面每一个点都有一对坐标当门牌(第十一章)。这本书就干一件事:把生活中这些不起眼的编号一个个拆开,看它们是怎么被设计出来的,又为什么是今天这副模样。

不过在出发之前,得先泼一盆冷水。你大概已经注意到,快递公司从来不用「张三寄给李四的蓝色箱子」来管你的件。名字为什么在大规模系统里必然失灵?纯粹唯一的编号又有什么副作用?这是下一章的事。

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