バーコードの読み間違い防ぐ「符号理論」

写真拡大

スーパーやコンビニエンスストアなどで買い物をする際に、レジで読み取る商品についた「バーコード」。「ピッ、ピッ」とスムーズに作業が流れていると思いきや、ときどき「ピーッ」と鳴って読み取れないことがある。これはバーコードに備えられた、読み間違いを検出する機能によるものだ。

バーコードには、「標準タイプ(数字13桁)」と「短縮タイプ(同8桁)」があり、標準タイプが多く使われている。そして、実はそこに記された数字には深い意味が隠されている。

標準タイプの場合、一番左の2桁が「国コード」である。そこから次の順に「メーカーコード(5桁)」「商品アイテムコード(5桁)」で、最後の1桁は「チェックデジット」という。

このチェックデジットが、バーコードの入力ミスを検出するために使われる数字だ。ここには数学の「符号理論」が使われている。といっても仕組みは簡単で、用いられるのは、四則計算のうちの足し算、引き算、かけ算だけだ。

原理は標準タイプも短縮タイプも同じ。まず、バーコードを右(一番右端のチェックデジットの数字を除く)から、偶数番目の数字と、奇数番目の数字に分けて、「奇数番目の数字の和×3+偶数番目の数字の和」を計算する。次に、「その数の下1桁の数字を、10から引く」。そこで求められる数字が、チェックデジットである。

このように、チェックデジットをあらかじめ計算しておき、バーコードで読み取った数字が、それと同じか否かを確認する。もし、バーコードの一部が汚れたりして数字が認識できない場合、計算の結果がチェックデジットの数字と一致しないため、間違いと判断される。

ただし、バーコードの一部が汚れていても、偶然にチェックデジットと同じ数になる可能性もある。その場合、誤りは検出できないことになる。

ちなみに、なぜ偶数番目と奇数番目に分けて計算するのかというと、隣り合った桁は、一緒に汚れがついたりして、同時に読み間違えることが多いためだ。

では、本誌「プレジデント」2016年8月1日号に付いているバーコードを使って、チェックデジットが本当にそういう仕組みになっているのかを、実際に確かめてみよう(図参照)。

「奇数番目の数字の和=6+0+5+7+0+9=27」、「偶数番目の数字の和=8+1+6+2+1+4=22」。したがって、「27×3+22=103」となり、「10−3=7」で、確かにチェックデジットの「7」と一致する。

このバーコードに使われている符号理論は、インターネットや携帯電話をはじめ、あらゆる通信技術に使われている。目には見えないが、いわば縁の下の力持ちとして、我々の日常生活を支えているのだ。

なお、世界に無数にある商品を13桁のバーコードですべて管理できるのかという疑問があるかもしれない。それはたとえば、日本の国コードは当初「49」だけだったが、新たに「45」を取得したり、バーコードに使用期限を設けるなどして対応している。

(東北学院大学 工学部教授 神永 正博 構成=田之上 信)