“千年虫”引发的故事

上世纪九十年代末的IT人都应该知道的一件大事是捉“千年虫”!千年虫或称Y2K问题是源于20世纪60年代由于当时计算机存储器昂贵,为节省空间,程序中普遍采用两位十进制数来表示年份从而导致在跨世纪日期处理时可能引起的错误理解,例如当时“99”能明确代表1999年,但当数字跳变成“00”时,有可能被系统误认为1900年而不是2000年的日期计算错误问题。这样的歧义严重时有可能引发系统功能紊乱甚至崩溃。

“千年虫”影响是巨大的。从计算机系统包括PC机的BIOS、Firmware到操作系统数据库软件、商用软件和应用系统等,再到与计算机和自动控制有关的机具如:电话程控交换机、银行自动取款机、安保系统、工厂自动化系统等,乃至使用了嵌入式芯片技术的大量电子电器、机械设备和控制系统等等,都有可能受到“千年虫”的影响,为此当年全世界有一大批IT人都在为解决此BUG忙碌。

造成千年虫问题的根本原因是当年存储器刚源起,不管是RAM还是ROM都是精贵器件,为了节省那么2个字节的存储空间开发者都觉得是很有必要。就此埋下了祸根直到成为全世界的隐患。然而时至今日并非所有问题都得以完美解决,有些问题是无法解决,有些问题是不值得去解决。

最近就遇到这样一个实例。而且我认为还应该是属于开发工程师脑回路有问题造成的BUG。大约30年前公司有台傻瓜理光胶片相机(RICOH XF-30SuperDate)由于进片机构损坏被掷在库房没人要,清理库房时我就收拾起来备用。这个相机有一个特点是带背板日期功能,它能在拍照的时候将当前日期同步印在每张胶片上,这样将来能很容易的分辨出每张照片拍摄日期。当年这样功能的日本产傻瓜相机种类较多。

显然当年要在傻瓜相机上实现自动的日期效果,工程师们还是费了不少功夫。这也应该算是傻瓜相机制造商们内卷结出的成果。日期背板的设计是在背板压紧胶片的板上开一个长方形小孔,孔后设计有六位LED的8字数码屏,这里为了节省制造成本也或是空间,也就只用两位数来代表年份(这正好切中千年虫BUG的要害!)。当按下快门的时候就会触发这6位LED按照当时的日期(也可设置为时间)点亮一次,这次点亮影像与拍摄内容重叠曝光在胶片上形成日期标记。本人不能确定的是这两种曝光是同时发生还是有先后为之,还望知者明示。

时间日期的管理机构全嵌在相机背板里,包括使用的锂电池CR2032在内。背板与主机间通过两个触点相连,用于传递快门按下的触发信号。

当年拿到这个相机的时候背板日期驱动电池电压还算充足,液晶屏幕正常显示,这么多年来它就一直躺在抽屉里,也不知是哪年哪月它因电池失电而不再显示。直到近日翻箱倒柜时看到它背板日期已不显就想着换上CR2032电池。更换电池只须拆卸一颗螺丝,更新电池后液晶日期屏正常显示。

看到初始的两位87年份就想着把年设为26也能代表如今的2026年。可没成想这个愿望是无法实现的!!!

加电后日期显示是87 1 1,若调整年份增加到19后,继续再按set钮年份数值就直接跳回到87而不是20。我天!看来当年那个设计日期管理功能的工程师从来就没有想过32年后这套日期系统还能正常运转?!因为不光是设置进不了19以后的年份,就是把日期设为19 12 31后运行到第二天系统也是自动进入87 1 1。

显然这个19跳到87的操作是完全反智的设计行为,不光增加处理流程还带来超过Y2K的遗害。当初那怕就是不进行任何处理任由其自动高位溢出循环,也比如此的设计结果更好!这样的设计问题在软件开发中虽然常见,但如此画蛇添足的处理我也只能吐槽到此啦!

生活中的Y2K问题其实在上世纪比比皆是,如果您曾经拥有过第一代身份证那就更会深有感触,这个号码里面正因只有两位年份,后面才有必要升级到二代身份证来解决问题。另外过去还有很多常用的预印刷介绍信、迁移证等等都会将日期的前两位年固定为“一九□□年”,表明应在19xx年用。只不过由于实物的使用范围有限,真是过到2000年的时间点不再使用或者手工更改一下也能解决问题。

就如这份当年大学毕业时的户口迁移证,其下面的签发日期预印19  年  月  日。严格说到2000年后这种证就不能再使用,但现实也有将19改为20后继续沿用的情况。俺有一份2000年1月的工作调动函就正是这样修改使用的!

BG1QPO     2026年7月8日


更多文章:

谢怡刚

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注