近日,美国坊间盛传数百万已故人士持续领取美国社会安全补助金支票的谣言,引发轩然大波。然而,真实情况其实是老化的技术、政府系统,以及年轻 IT 专业人员(特别是政府效率部门(DOGE)的专业人士)对资讯的误读,三者之间複杂交互作用所造成的误解。

这起事件源自于伊隆·马斯克(Elon Musk)声称,有大量超过百岁的美国人,不当领取社会安全福利金。马斯克宣称,在初步审查社会安全资料时,发现了「异常现象」。马斯克甚至断言,有高达 150 岁的人瑞,都被列为福利金受益者。后续,他又扩大这些说法,声称有超过 2000 万美国百岁人瑞,正在领取社会安全补助金。

为了佐证其论点,马斯克更在 X 平台上分享了一张,他声称是社会安全局资料库电子试算表的图片。

 

延伸阅读:百年企业不可或缺的骨董级COBOL程式语言,正面临无人能维修的尴尬局面

 

然而,真正的罪魁祸首,其实是一种程式语言。数十年来,这种程式语言一直是美国社会安全局 (Social Security Administration, SSA) 资讯系统的支柱。

COBOL 程式语言开发于 1950 年代,长期以来,为社会安全局的关键功能提供技术支援,包括处理退休和伤障给付申请等重要业务。时至今日,社安局仍保有高达 6000 万行的 COBOL 程式码。

COBOL 的一项特性,是缺乏处理日期格式的标準化方法。这种先天限制,导致程式设计师在设计政府资料库时,採用了一些极具创意的日期表示方法,其中就包含了使用「佔位日期」(placeholder date) 来表示不明或未知的资讯。

延伸阅读:美国政府求援「COBOL工程师」江湖告急,大批阿公级程式设计师重回岗位救援

根据圣汤玛斯大学工程学院资料科学与软件工程教授 Manjeet Rege 的说法,1875 年 5 月 20 日,正是一个经常被使用的「佔位日期」。根据 ISO 8601 时间与日期标準,这个日期标誌着时间的起点。之所以选择这个日期,是因为这天是国际度量衡局 (International Bureau of Weights and Measures) 成立的週年纪念日。

日期表示方式上的这种偏差,导致部分社安金申请人的出生日期,被系统指定为 1875 年 5 月 20 日,但他们的实际出生日期实际上是未知的。因此,在资料库系统中,这些受益人的年龄,便会错误地显示为超过 149 岁。 此外,众多程式设计师与资料输入人员,数十年如一日累积下来的作业,也让情况变得更加複杂,最终导致系统出现各种不一致与错误。

儘管系统存在这些错误,社安局实际上已採取多项措施,以防止诈欺申请。例如,在个人过世后,殡仪馆必须提交死亡证明 (SSA-721 表)。

延伸阅读:可为COBOL提供注释,IBM 更新 AI 程式助手让现代工程式能看懂「上古程式语言」

此外,社安局多年来,也一直主动监控高龄公民的福利金领取状况。 2023 年的一项研究便显示,虽然有 1890 万个社会安全号码持有人,被列为出生于 1920 年或更早,且没有死亡日期记录的人,但实际上只有 44000 人仍在领取福利金。 此外,自 2015 年起,社安局已开始使用自动化系统,阻止向任何超过 115 岁的人支付福利金。

事实上,社会安全管理局并非唯一使用数十年前程式语言的美国政府机构。包括教育部、卫生与公共服务部,以及美国国税局 (IRS) 等众多政府部门的关键系统,至今仍高度仰赖 COBOL 和其他老旧的遗留软件系统。

举例来说,美国国税局目前仍使用约 160 个 COBOL 应用程式,其中更包含了可追溯至 1960 年代初期的「个人主档案」(Individual Master File, IMF) 系统。

不仅如此,美国 45 个州和哥伦比亚特区,至今仍在仰赖 COBOL 系统。 COVID-19 疫情期间,这些系统的侷限性更显露无遗,当时许多基于 COBOL 的失业救济金系统,皆难以负荷突如其来的申请量暴增。

儘管 COBOL 程式语言已问世多年,但它在处理大量商业资料方面,依旧展现出强大且高效的性能。COBOL 在资料操作、批次处理,以及维持资料準确性与可靠性方面表现出色,这也是 COBOL 在特定产业 (如银行业和保险业) 仍然广泛流行的原因。

目前,COBOL 系统所面临的挑战,并非在于程式语言的功能性不足,而是缺乏足够的资金,来更新与维护政府部门的老旧程式码。 虽然部分机构,例如英国就业与退休金部 (Department for Work and Pensions) 和《纽约时报》(New York Times) 等,已成功从大型主机 COBOL 系统转移出来,但政府系统的现代化升级工程,依旧是很庞大的任务。据估计,目前仍在服役中的 COBOL 程式码,总行数介于 2200 亿到 8000 亿行之间。