2014年10月07日の日記です


バーコード特許成立の日(1952)  2014-10-07 06:28:38  コンピュータ 歯車 今日は何の日

今日はバーコードの特許登録が成立した日(1952)。


…って、去年も書きました

でも、去年の最後に「バーコードの仕組みとかいつか書きたい」って書いたままでしたね。


せっかくなので、去年に続いてバーコードの話を書きましょう。


#去年の話はバーコードの歴史でした。興味ある方は合わせてお読みください。




バーコード、非常に巧妙に作られているんですよ。


まず、桁数について。昨年の話に書きましたが、1970年に11桁で作られた、米国の小売店用のコードが発端です。

しかし、利用が広がり、カナダも同じコードを使うことにして、1973年に1ケタ増やした12桁となります。


さらに1977年、ヨーロッパを中心に世界中で使えるコードとして作り直され、さらに1桁を追加して13桁となっています。

現在日本で使用されているのも、13桁のものです。


13桁の内訳は、先頭2桁が国別コードです。日本では非常に良く使用されるため国内で使用できるコードが足りなくなり、49と45の2つが発行されています。


続いて、国内でメーカーごとに割り当てられるコードが5桁。

メーカーの中で、商品を識別するためのコードが5桁。ここまでで12桁です。


#国別コードが3桁の国もあります。

 また、国コードの後ろは、国ごとの取り決めによります。

 国内では、メーカー5桁+商品5桁が一般的ですが、商品の少ない中小企業などにはメーカー7桁+商品3桁が割り当てられます。


そして、12桁を適切に計算して導き出される1桁。読み取り時、計算が合わない場合は「読み取りミス」となります。

これで13桁。




…と、ここまでは結構知っている人が多い内容。

でもこれは、「数字で商品を表す」という仕組みであって、バーコードの仕組みではない。


バーコードがしくみとして巧妙なのはここからです。

バーコードは、モールス信号のような「信号のありなし」で数値を表しています。


ちなみに、モールス信号では、信号が4つあります。

短い音、長い音の2つは良く知られていますが、「短い無音」と「長い無音」も同じように重要なのです。


バーコードでは、黒い部分と白い部分の太さが変わります。

この「太さ」には、1~4の4段階があり、白と黒を2つづつ組み合わせると数字1桁が作られます。


また、数字一桁は、必ず「太さ7」になるようになっています。

つまり、もし太さ4の黒い線が現れたら、あとは全て太さ1で空白、線、空白。合計太さ7です。


ちなみに、線と空白は2つづつなので、隣同士の線や空白がくっついて、太さがわからなくなることはありません。


このように「太さ」を手掛かりにして読み取る方式であるにも関わらず、バーコードのサイズは伸縮自在です。

サイズを変更しても読み取れなくてはならないことになっています。(拡大縮小範囲の基準はありますが)


これは、最初と最後、それに中間位置に、常に共通のサイズの信号が描かれているため。

これを手掛かりにすることで、他の部分の線のサイズを認識するのです。




もう1つ、バーコードの重要な秘密があります。

バーコードは、左からと右から、どちらからでも読めるように、規格が左右対称に作られているのです。


左右の両端にある「共通信号」は、細い線を、細い空白で挟んだもの。太さ3になります。

左側の数字は、1桁の左端が空白から始まり、右端が線で終わります。このため、左端の共通信号とくっついてしまうことはありません。

右側は逆に、1桁の右端が空白から始まります。


そのままでは、中央で「黒い線」同士がくっついてしまう…のですが、そうならないように中央の信号があるのです。

ここは、両端と同じ「細い線2本」を、さらに空白で囲んだ、太さ5の信号となっています。

そして、空白で囲んであるので、黒い線とはくっつかないのです。



でも、左右対称だと、逆に読んだ時に違う意味になってしまいそう。


しかし、実際にはそんなことはありません。180度回して読み込んでも、必ず正しい数字を認識できるのです。

どうなっているのでしょう?



実は、バーコードの中央から右側の半分は、必ず「1桁ごとに見ると、黒い部分の幅の合計が、偶数になる」ように作られています。

その決まりを守ったうえで、10種類の数字に線と空白の組み合わせを決めてあるのです。



そして、左側半分は、基本的には「右半分の色を逆転したもの」で数値を示します。

左側の 0 の記号を白黒反転すると、右側の 0になります。他の数字も同様。


この時、1桁の幅は7ですから、白黒を反転すると、黒い部分の幅の合計は必ず奇数になります。


左半分では黒い部分の幅の合計が偶数。右半分では奇数。

これによって、左側と右側を見分けているのです。

非常に巧妙です。




ところで、「中央に記号がある」と書きました。

バーコードは、13桁の数字を示しています。中央で分けられないのでは…?



実は、上に書いた仕組みは、現在のバーコードの元となる、アメリカとカナダで使用した 12桁時代の物なのです。

現在の13桁用は、もう一工夫してあります。


右側と左側では、同じ数字を表す記号の白黒が反転している、と書きました。

現代では、左側にのみ、「白黒反転」するのではなく「左右反転」したものが混ざることになっています。


白黒反転すると黒い部分の幅の合計が奇数になりましたが、左右反転では偶数です。

このため、記号としては全く別のものになり、間違えることはありません。


先に書いたように、右側用は必ず右端が白で、左側用は左端が白です。

反転するのでこの決まりにもあいます。もちろん、右側用と違う記号になり、間違えることはありません。


たとえば、 0 という同じ数字であっても、左半分では2種類の記号、右半分ではそれとは違うもう一種類の記号があるのです。



あれ、でも単に左右を反転しただけじゃぁ、「180度逆に読んだ時」はどうなってしまうの?


これも大丈夫。左側に時々「右半分の左右反転が入る」とはいっても、6桁の半分の3つだけ、と決められています。

(または、「全く入らない」こともあります)


このため、上下逆にバーコードを読み込ませても、これも正しく方向を識別できます。


非常に巧妙に出来ています。



そして、「半分の3つ」偶数の記号が入った時、これがどこに入るかの組み合わせが、全部で9種類あるようになっています。

これにより、1~9の数字を示すことができるのです。

(ちなみに、「全く入らない」ときは0になります)


これが先頭の数字。

バーコード自体は基本的に 12桁時代のままのサイズなのですが、内部の記号の持ち方を工夫することで、1桁多く記録しているのです。




改めてまとめると、


1) 右側は、1つの数字が1つの記号(白と黒2つづつの組み合わせ)に対応している。

2) 左側は、1つの数字が2つの記号に対応している。

3) 左側の数字が、桁ごとにどちらの方法で書かれたか、の組みあわせで、さらに数字を1つ作り出す。


3 で作られた数字は、13桁の先頭に位置するものとされています。

そして、ここを 0 と見做すと、12桁の頃のアメリカ・カナダのバーコードと互換性を保ったままになります。


先頭が 0 の場合、この後に書く「チェック」の計算にも影響を与えません。

(チェックは基本的に足し算で行われるため)


#国際的な 13桁バーコードは、アメリカでの12桁バーコードの成功を見て拡張されたものです。

 すでに普及しているアメリカの体系とは互換性を保ったまま、アメリカのバーコード「以外」の数値領域を確保する必要がありました。

 このために、非常に巧妙に拡張が行われているのです。




さて、数字を読み取る部分までは以上ですが、読み取った数字を最後に「チェック」しなくてはなりません。

最後の数字を除く12桁を決められた方法で計算し、その結果が最後の桁と一致しなくてはなりません。


チェックの方法としては、奇数桁と偶数桁を別々に足し合わせます。

そして、偶数桁だけを3倍し奇数桁と足します。


その1の位だけを取り出し、10から引きます。


 10 - (((奇数桁合計)+(偶数桁合計)*3) mod 10)


これが、最後の1桁の数字と一致すれば読み取り成功、失敗すればエラーです。




もう一度書くと、次のようにしてバーコードを読み取ります。


1) 端から順に、白と黒を判別。両端と中央には決まった太さの線があるので、その太さを基準として認識。


2) 白と黒の2つづつを組にして分離。これが1桁。中央で分けて、6桁づつ存在。

 1桁は太さ7になるので、1 で認識した基準とも照らし合わせ、線の太さを認識。


3) 片側の1桁ごとに、黒い部分の合計の幅を認識。すべて偶数なら右側。半分、または全部奇数なら左側。


4) 左右が逆なら、逆の状態で読み取られている。読み取った白黒の情報を逆にする。


5) 左側の数値を認識。この際、黒い部分の合計幅の奇偶の組み合わせで、表記されていない頭の1桁を導き出す。


6) 右側の数値も認識。これで合計 13桁が揃う。


7) 先頭の12桁を計算し、最後の1桁と一致するかチェック。



7 まで全部成功すれば読み取り完了です。

途中で想定外の事態が起きた場合、読み取りがうまくいっていないので、そのまま 1 に戻って読み取りを続行します。


お店の人が「なかなか読み取れない」と商品を一生懸命スキャナに向けているときは、途中のどこかでエラーが出続けているわけです。



実際の記号と数字の対応などは省いて、ざっくり説明しました。

もっと詳細を知りたい人に別のサイトを紹介しようと思ったのですが、いいサイトが見当たらない。


ここが比較的詳しいかな。

バーコードの仕組みと作成方法




さて、急に話は変わってデザインバーコード


デザインバーコード社が考案し、特許を取ったうえで活動しています。

最初は「こんなこと考えた」という内容の本を出したのですが、妻が面白がって購入し、この本家にあります。


#発売時はタイトルの通り「革命的」な新しさがあったのだけど、今読んでもそれほど感動は無いかも。

 基本的にはバーコードで遊んでみたデザイン集。読み物ではなく、10分で読み終わります。

 まぁ、古本は安いので気軽に読んでみるのも楽しいかも。



上に書いたように、バーコードは巧妙な仕組みですが、結局は「白黒の線」さえ読めればそれでいい。


でも、商品のパッケージデザインする人にとっては、頭の痛い問題だった時期があります。

バーコード以前にデザインしたパッケージの一角を急に「白抜き」にしてバーコード印刷されたりして、全体デザインが台無しになってしまうことも多かった。


#当時、缶詰のパッケージなどをしていたデザイナーの方が、デザイン直しなら格安でやるからひと声かけてほしい…と嘆いていました。


そこに提唱されたのがデザインバーコード。

バーコードは結局のところ1次元の線の上で白黒の縞模様が付いていればいいのです。


じゃぁ、必要な部分はしっかり確保したうえで、その周辺に絵を描いて遊んじゃおう、という内容。


今では実際の商品でも結構使われています。じゃがりこのパッケージとか有名。



基本的にはパッケージ全体に「笑い」の要素を求めるものなので、お菓子とかジュースの使用例が多いみたい。

我が家の扇風機は、バーコードが波になってサーフィンしてました。


#しかし、この扇風機海外製の安物なので、特許無視で勝手にデザイン真似してるのかもしれません。




同じテーマの日記(最近の一覧)

コンピュータ

歯車

今日は何の日

関連ページ

バーコードが初めて使われた日(1974)【日記 15/06/26】

バーコード特許成立の日(1952)【日記 13/10/07】

別年同日の日記

04年 レゴデュプロ

05年 法律の問題:隣家との境界

09年 血筋

10年 自動処理

11年 PHP でデーモンを作る。

13年 バーコード特許成立の日(1952)

16年 風邪ひき

19年 歯医者

20年 ◯◯の秋


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

1000

-- follow --




- Reverse Link -