和暦年が1桁で来ることを想定していないバグ


TL;DR

改元対応は、新元号だけじゃなくて、和暦が1桁で来ることへの対応も必要・・・かもしれない


要約


  • 改元時に顕現するバグがあった

  • 和暦年が1桁で来たら発現するバグだった


本文


バグの下地


「全銀フォーマット」の日付項目の仕様


  • 年月日をYYMMDDの6桁の「数値」と定義している。「6桁の数値」である。

  • 年は和暦年である。

  • 元号を識別する情報はない。


バグの内容


  • 年月日を、6桁の「文字列」として扱い、年は1~2桁、月は3~4桁、日は5~6桁、として取得している。例:「010502]は、年=01、月=05、日=02、となる。

  • 実はその前に、「数値型」に対する処理として先頭のゼロがtrimされていた。

  • 和暦年が1桁だと、6桁であるはずの文字列が5桁で入ってきてしまい、おかしなことになる。例:「010502」は、先頭のゼロがtrimされて「10502」となり、年=10、月=50、日=2、となる。


テストしたら検出されるはずだけどね

適切なテストをしてれば摘出されているはずです。でもゴミコーダーがやっつけ実装したなら・・・?前任者がゴミコーダーだったなら・・・?

私は・・・前任者がゴミコーダーだったようです・・・


補足的なもの


全銀フォーマットはXML版が登場していて、そっちは和暦が廃止されている

諸悪の根源である、数値6桁での和暦年月日は、旧フォーマットに成り下がっている。

これから作るシステムは、XML版を採用すべき。

https://www.zenginkyo.or.jp/abstract/efforts/smooth/xml/