20220306 バーコード(JAN13)の読み方

2022/03/10

target1 梅崎中学校

暗号ではないのですが、バーコード(JAN13/EAN13)の読み方について日本語で書いてあるページというのがあまり無いようでしたので、この機会にここに書いてみます。

最初にProject:;COLDに出てきた『銀河鉄道の夜』の管理ラベルの解説、その後にバーコードの読み方を解説します。


3月6日にtarget1のギャラリーにこのような画像がアップされました。ここに貼ってあるラベル(図書室の管理ラベル)から梅崎中学校という(架空の)学校の名称が判明し、梅崎中学校のホームページを発見することとなりました。ARGではこういった形で新たな サイト等への導線を作ることは割と一般的な方法です。

それとは別に、「このバーコードをアプリで読み込むと下の数字とは違う値が出てくる」という報告がtwitterでいくつか見られました。
これは、バーコードの最後の数字がチェックデジットになっていなければならないのに、値が誤っているため、リーダーアプリが読み取りエラーと判断して何らかの補正をかけたせいだと思います。
おそらく製作者がJAN13の規格を十分に理解しないで作成してしまったための混乱なので、この点について深読みする必要はないでしょう。

このバーコードの「9478101241231」という数字がどういう意味を持つかは現時点では不明です。左半分がこの本のISBN「9784101092058」ともよく似ているのも気にはなります。
ただ、個人的にはこれが単品で解けるような暗号にはなっていないと考えています。


バーコード(JAN13/EAN13)の読み方

JAN13あるいはEAN13の規格では、データは01のビット列で表され、0部分を白、1部分を黒で表現しています。ですので目で読む場合、1ビットの幅に見当をつけ「この線の太さは2ビット分、この空白は3ビット分・・」というのを地道に読み込んでいく必要があります。

今回のバーコードは下記のビット列になります。

10101000110010001000100100110010100111001100101010110110010111001100110110110010000101100110101

下記のように区切ります。最初と最後に3ビット、真ん中に5ビットのフォーマット部分。あとは7ビット区切りです。

101 (スタートマーカー 101固定)
0100011
0010001
0001001
0011001
0100111
0011001
01010 (センターマーカー 01010固定)
1101100
1011100
1100110
1101100
1000010
1100110
101 (エンドマーカー 101固定)

データ部分はこちらの表に従って読みます。各数字にL,G,Rの3種類のコードが振られています。

https://en.wikipedia.org/wiki/International_Article_Number

101 (スタートマーカー 101固定)
0100011 L-code 4 
0010001 G-code 7
0001001 G-code 8
0011001 L-code 1
0100111 G-code 0
0011001 L-code 1 
01010 (センターマーカー 01010固定)
1101100 R-code 2
1011100 R-code 4
1100110 R-code 1
1101100 R-code 2
1000010 R-code 3
1100110 R-code 1
101 (エンドマーカー 101固定)

数字の読み方ですが、上一桁目のみは特殊で、センターから左側のL-code/G-codeのパターンで表されます。この場合はLGGLGLですので一桁目は9と読みます。

https://en.wikipedia.org/wiki/International_Article_Number

2桁目以降はデータ部を左から順番に読み、全体では 9478101241231 と読み取ることができます。

なお、JAN13の規格として最後の一桁はチェックデジットをセットすることとなっています。チェックデジットの計算方法は

S = 1桁目 *1 + 2桁目 * 3 + 3桁目 * 1 + 4桁目 * 3 + ... (1,3を順に掛けて足す)

check digit = -S mod 10 

となります。

今回のケースでは

S = 9*1+4*3+7*1+8*3+1*1+0*3+1*1+2*3+4*1+1*3+2*1+3*3
  = 78

-S mod 10 = -78 mod 10 = 2

が正しいチェックデジットとなります。


(おまけ)

P:;Cで使われたバーコードのチェックデジットが間違っているらしいということだけ見ても少し不安な感じはあるので、実際の新潮文庫『銀河鉄道の夜』のISBNコード 9784101092058 についてチェックデジットを計算してみます。

S = 9*1+7*3+8*1+4*3+1*1+0*3+1*1+0*3+9*1+2*3+0*1+5*3
  = 82

-S mod 10 = -82 mod 10 = 8

ということで、チェックデジットが最後の桁と一致していることが確認できました。

 





QooQ