没有所谓的 1875 纪元,美国 150 多岁老人领社保福利不是 COBOL 语言的锅
近期,一位美国政府官员曾宣称:“我们这里有些人看起来都已经150岁了”,并指出这些人正在领取社会保障福利。由此,有人开始流传这样一种说法:社会保障局(SSA)在存储日期时使用了一个1875年的纪元,把那些未知出生年份的记录存为0,从而默认显示为1875年。
这种观点的起源可以追溯到某个帖子,帖子中有人调侃道:
“看起来埃隆那群天才程序员根本就不懂COBOL的工作原理。社会保障系统正是运行在COBOL上,而COBOL并没有专门的日期或时间类型。于是日期就以数字形式存储,按照ISO 8601标准计算,纪元定在了150年前(1875年)——也就是米制标准的开始。结果如果不知道某个日期,就会存储成0,而在COBOL中这就会默认解析为1875年,也就是150年前。”
然而,笔者对此并不认同,主要基于以下几点理由:
数据库中存在1875年前的出生年份
2007年,社会保障局曾发布过一份数据集,该数据集包含了在2007年1月之前发放的社会保障号码持有者的收入记录(约占全部数据的1%)。在这份数据集中,他们明确说明:
- 移除了出生年份早于1870年的5,935条记录
- 移除了出生年份等于2007的1,096条记录
- 以及少数缺失出生年份的记录
这表明,SSA的数据库中确实保存了1875年前(甚至1869年及更早)的出生年份数据,并非将未知年份一律默认为1875。
数据中没有1875年出生人数激增的异常
如果系统将所有未知出生年份的记录默认转换为1875年,那么在统计数据中,1875年的出生人数应该会异常增多。但实际上,从公开数据来看,并不存在这样一个“高峰”。(注:该数据集只是1%的样本,若存在默认值问题,趋势应当更加明显。)
社会保障局并未使用ISO 8601标准存储日期
负责跟踪社会保障福利支付的主记录(Master Beneficiary Record, MBR)建立于1962年,这远早于ISO 8601标准于1988年的发布。即便是其前身ISO 2016标准也在1976年发布,并且并没有任何依据指向1875年。实际上,有研究论文基于SSA数据指出,SSA对生日等信息的存储采用的是固定宽度格式,而不是ISO 8601标准的日期字符串格式。
The data abstracted from the MBR consisted of a 26-character record for each deceased individual. The four data items on each record were… the month and year of death
ISO 8601标准本身并不涉及纪元概念
ISO 8601仅仅是一种用于表示日期和时间的字符串格式,其本质并不是基于数字计算时间流逝,因此根本无需设定一个“纪元”。虽然ISO 8601:2004版曾固定引用1875年5月20日——即《米制公约》在巴黎签署的那一天——作为参考日期,但这一引用在ISO 8601-1:2019版中已被移除。换句话说,这个日期仅用于定义格里高利历,并非作为一个时间计数的起点。
没有任何证据显示1875年被用作时间计算的起点
经过查找,笔者没有发现任何系统或标准会将1875年作为时间纪元。尤其在COBOL语言中,也没有这样的约定或实践。所有迹象都表明,所谓的“1875纪元”只是个误解。
总的来说,从SSA的数据实践、存储方式以及国际标准的角度来看,都没有任何证据支持“1875纪元”这一说法。该观点看似有趣,但实际上缺乏坚实的依据。

