« シャモニー | Main | ユリーカのチーズ入りパンケーキ »

バーコード3

前回は、書籍の裏表紙をバーコードリーダーで読み込んでみたところまでのお話。
ISBNを表示しているらしきバーコードに格納されている数字が微妙に違う、というところで時間切れだった。

学生出欠システムという目標からははずれるが、ちょっと遠回りをして、ISBNとバーコードの基礎について整理したい。

ISBNとは、International Standard Book Number の頭文字で、国際標準図書番号である。

前回取り上げた成文堂の「会社法重要判例解説」だとISBNは4-7923-2499-8と表記されている。

この番号、1桁目の「4」は言語コード、次の4桁「7923」が会社コード、次の4桁「2499」がその会社での書籍番号、最後の1桁「8」がチェックディジットだ。それぞれの桁数は決まっていないが、全部で必ず10桁になるように決められている。

順番に行こう。

言語コードは、日本の場合「4」、内容が日本語というよりは、日本語圏の出版社の場合は4、英語圏なら0、フランス語圏は2、ドイツ語圏は3、などなど。マイナー言語の場合は桁が増えて、四桁の場合もある。

日本語圏は言語番号が1桁で、残り9桁のうち最後の1桁は後述するチェックディジットに使われるので、会社コードと書籍番号は、あわせて8桁ということになる。上の例では出版社の「成文堂」は4桁の「7923」が当てられている。出版点数が多い会社は、書籍番号もたくさん必要だから、会社コードの桁は少ないことが必要だ、一方出版点数が少ない会社は、会社番号の桁を増やせる。というわけで会社コードが小さいところは大会社または歴史のある会社、大きいところは中小出版社という傾向になる。

ちなみに栄えある会社コード「00」は、岩波書店である。
有斐閣は641、信山社は7972、なんてぐあいで、さらに桁が増えて6桁なんてなると、もう知らない会社ばっかりで

http://chiro-h.hp.infoseek.co.jp/isbnlist3.html

あたりを見ていただきたい。
会社コードが6桁なら、書籍番号は2桁いけるから、ということは99冊出版できるということか。

7桁の会社コードも存在するんだが、そうすると9冊しか出版できない。が、それでもいいんだろうな。

http://chiro-h.hp.infoseek.co.jp/isbnlist4.html

を眺めてるとそんな気もしてくる。個人名で会社コード取ってるところもある。

そして最後の1桁、チェックディジット、これはチェックサムと呼ぶ場合もある。

これはここまでの9桁が正確に入力されているかどうかを判別する魔法の数字である。

どんな風に魔法かというとたいしたことはなくて、単純に言えば、そこまでの桁の数字を任意の数、例えば11で割る。そうすると余りは0から10のどれかになる。途中の数字を誤って読み取ったりしていると、この余りの数字と齟齬がでるので、誤入力があることが判明するということだ、ただし偶然余りが同じになるような誤入力をしてしまった場合はエラーが検出できないが、まあ、無いよりマシということで。
で、余りが10の場合は桁が増えてしまうのでXを当てる。

手元の本を探して、ISBNの末尾がXになっているものを探してみてほしい。もし見つけたら幸運が訪れるらしいから。
11で割らないで9とかで割れば、Xなんて文字を使用しなくてもいいのだが、そうするとエラー検出の可能性が減ってしまう。なら、どうせ余計な記号を使うなら17とかでわって最後の末尾は0~9とA~Fの16進数風にしたほうがいいんじゃないかと思うが、統一規格なんでいまさらブーイングをしてもしょうがない。

では、さっそく上9桁を11で割ってみよう

479232499割ることの11は・・・・

計算機でやっても小数点が表示されるだけだ orz

しょうがないので十数年ぶりに紙で手計算してみる。
筆算で割り算なんてひさしぶりだな、答えは4356659余り9と出た。

おやまあ、この本のISBNの末尾は8だから、なんか違う。

確認のためにエクセルで計算する。

セルA1に479232499と入力して、隣のセルに
=MOD(A1,11)
と書き込む。MOD モジュール関数というやつだな。公開鍵暗号のところででてきたアレだ。
結果はやっぱり「9」。
私の筆算の正確さが証明された次第。

だが、そんなこと証明されても問題は解決しない。

おそらく、ISBNのチェックディジットは、単純に割っているだけではない。つまりはこういうことらしい。

どうやら「各桁に「ウェイト」をかけて、計算し、その和を11で割った余りと11の整数倍との差」がチェックディジットのようだ。

なんでそんな手間をかけるのか、僕は知らない。おそらく、そうしたほうが数学的にエラーが少ないんだろう。そのうち理由を数学が得意な人に聞いてみたい。

ともあれ、上の方法で計算をしなおす。1桁目には10を掛ける。2桁目には9を掛ける、・・・・・と。

ISBN 4 7 9 2 3 2 4 9 9   
ウエイト 10 9 8 7 6 5 4 3 2   
ISBN*ウエイト 40 63 72 14 18 10 16 27 18 

ウエイトをかけた数値を全部足す

40+63+72+14+18+10+16+27+18=278

11の整数倍で近いものは
11*25=275と次は 11*26=286、

278と286の差は8

だからチェックディジットは8ということになる。正解。

あるいは、278を11で割ると余りは3で、11-3=8 としてもいい。

[11-MOD(278,11)] =8 ということか。

この計算方法を「モジュラス11ウェイト10-2」と呼ぶ。ウエイトを10から2まで並べるということだ。

これでISBNのチェックディジットは分かった。

しかし、バーコードの方は末尾に「5」とあったから、また別の計算方法を採用しているに違いない。

次回は再びシマシマをめぐる冒険に出る。

|

« シャモニー | Main | ユリーカのチーズ入りパンケーキ »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



« シャモニー | Main | ユリーカのチーズ入りパンケーキ »