NW7(Codabar)のモジュラス16(Modulus16)チェックディジットの計算方法に注意

2020年4月6日



NW-7(Codabar)のバーコード生成をする場合に、オプションとしてモジュラス16によるチェックディジットをつける場合があるのだが、この計算でひどい目にあったので記録しておく。

以下にこの計算方法を示している二つのサイトがあるのだが、これらはいずれも間違いである(前者には既に間違いを指摘してあるので修正されるかもしれない–>削除していただいた)。

この計算方法だと、チェックディジットが’A’になる場合があるのだが、’A’でバーコードを作成してしまうと読み込めない。’A’の代わりに’0’にしなければならないのである。

正しい計算方法(と思われる)を示しているのは以下である。

また、IBMの技術文書でも、この正しい計算方法を示している。

最初に示した「間違った計算方法」では、

 16 - (sum % 16)

という計算をし、その結果が1から16になり、16の場合は’A’が選択されるのだが、IBMの正しい計算方法は以下である。

 (16 - (sum % 16)) % 16

この結果は0から15になり、’A’ではなく’0’になる。その他の文字についてはどちらの計算方法でも同じになる。

※別の「正しい」サイトでは「余りが0の時は0にする」と表現されているが、もちろんこの方法でも結果はIBMと同じになる。

やはり、最初の間違ったサイトを参照して、混乱したという方もおられたようだ。以下のような記事を見つけた。