私の経験の中であった、設計時の見落としをテーマとして何点か書いてみます。
業務用アプリケーションでは、料金などを比率によって振り分ける按分処理を行うことがあります。
簡単な例で言えば、100円を5つに均等配分するとすれば、各20円となります。
では、100円を3つに均等配分してみるとどうでしょう?
この場合、各33円となって、1円が余ってしまいますね。
では、この1円はどうするのでしょうか?
この例とは違いますが、以前あった振り分け先として
・按分した際に金額(按分比率)が一番多いところ、または一番少ないところ
・キーとなるコードの昇順または降順の先頭
・先に登録された順
これは、ユーザーであるお客さんの決められたルールによって処理します。
逆にこれが決まってないようなら、ユーザーに決めてもらう必要があります。
こうしてユーザーのルールによって、どこかに1円を含めた結果として34円、33円、33円 といった配分となるわけです。
この端数処理の振り分けで思い出したのが、サラミ法を使った犯罪です。
■60年代末に発覚したニューヨーク在住の銀行員の犯行:
顧客の預金利子を計算するプログラムで端数処理を四捨五入ではなくすべて切り捨て計算とし、剰余の利息を自分名義の口座に自動振込するプログラムも付け加えて巨額の不正入金を得た。
サラミ法といえばこの事件が有名ですね。実に巧妙な手口です。塵も積もれば、金額も巨額になるわけですね。
さすがに銀行でこの手口はもう出来ないでしょうけど、最近は何かとポイント制
だったりしますので、知らない間に仕組まれている可能性も・・・(^^;