| コード名 | 黒バー | 白バー | 種類 | 長さ | 組合せ | 備考 | 対応表 |
|---|---|---|---|---|---|---|---|
| ITF Code | 5 | 5 | 1, 2 | 14 | 100 | 黒白共に5のうち太2 | 表1 |
| Code39 | 5 | 4 | 1, 2 | 12 | 44 | 9バーのうち太3 | 表2 |
| NW-7 | 4 | 3 | 1, 2 | 9 or 10 | 28 | 7バーのうち太2 or 3 | 表3 |
| Code128 | 3 | 3 | 1, 2, 3, 4 | 11 | 108 | 黒の長さの和は偶数 | 表4 |
| JAN Code | 2 | 2 | 1, 2, 3, 4 | 7 | 40 | 白先も可 | 表5,6 |
表の意味は本文を参照してください.
問題1.
図. ■,■,■,■■,■■,□,□,□,□□,□□
注1.■■ は長さ2の太いバーを表しています.どう見てもつながっていませんが,
つながっていると見てください.
解答.
例えば,
バー5個のうち2個が太いという意味でこのコードを
ITF (Interleaved Two of Five) Code とも言います.JIS X 0502 で規定されています.
問題2.
解答.
注2.84通りの残り40通りが「太い黒バーの個数は奇数個」の場合の数になります.
でもこれは使いませんが.
Code39 では数字,英字と少しの記号,合わせて 44 個の記号をこれらのバーに対応させます.
太い黒バー2個の40通りのうち36 個に数字と英字(10+26=36)を対応させます.
残り4個に - . Space * を対応させます.
太い黒バー0個の4通りに $ / + % を対応させます.
アスタリスク * は特殊でスタートバーとストップバーとして利用します.
ですから表をつくる場合,表の1番最後にもってきます.
従って使用できる文字の数は43個になります.43 は素数です.
この43個に 0 から 42 までの数値を対応させ,エラーチェックに利用します.
44個の対応関係は「表2」のようになっています.
問題3.
解答.
注3.56通りの残り28通りが「太い黒バーの個数は偶数個」の場合の数になります.
NW-7 ではバー全体の長さは固定されていません.長さは9か10になります.
NW-7 では次の20個の記号をこれらのバーに対応させます.
0 から 9 までの数字と - $ : / . + の記号合計16個を (x,y)=(1,1) と (x,y)=(3,0) の16通りに
対応させます.これらに 0 から 15 までの番号を打ち,エラーチェックに利用します.
A B C D の記号4個を (x,y)=(1,2) の 12 通りのうちの4通りに対応させます.残り8通りは使いません.
20個の対応関係は「表3」のようになっています.
注4.Code39 や NW-7 では黒白黒白黒白黒のように黒から始まり黒で終わります.
つづけて次のバーを書くと黒黒となります.
それで次のバーとの間にはキャラクタ間ギャップというすき間を入れます.
問題4.
解答.
例えば,
問題5.
解答.
結局,10個セットが4枚あることになります.この4枚の表に名前をつけておきます.
白始まりの奇数パリティ(黒の長さが奇数)の表を LO (Left Odd) と呼ぶことにします.
Left の意味は後で説明します.同様に白始まりの偶数パリティを LE (Left Even),
黒始まりの奇数パリティを RO (Right Odd),
黒始まりの偶数パリティを RE (Right Even) と呼んでおきます.
まず次のような問題を解いてみます.
黒バーと白バーがあります.黒バー,白バーにはそれぞれ長さ1の細いバーと
長さ2の太いバーの2種類があります.
今,図のように10個のバーがあります.黒白ともにバー5個のうち2個が太いバーです.
これら全部を使って最初は黒,次は白と交互に並べていきます.
さて,このような並べ方は全部で何通りあるでしょう.
交互に並べていくので黒バーだけの並べ方を数えます.
5個から2個とってくる組み合わせの数なので10通りです.
具体的に書いてもたいしたことはありません.使うこともあるかも知れないので書いてみました.
Cf.表1.白バーも同様に10通りあります.
これを組み合わせるので 10*10=100 通りです.
答え 100通り.
■□■□■■□□■□□■■□
の場合,細いバーを 1で,太いバーを 2 で表すと
1111221221
となります.黒白が交互にくるというのは暗黙の了解です.
今の場合,2種類しか使わないので,0,1 でもよいわけです.
あるいは n(narrow),w(wide) でもかまいません.
0 と1の場合,2進記号表示と言いますが2進数のことではありません.
0000110110
nnnnwwnwwn
となります.これらのバーで100通りの情報が表せます.
これを 00 から99 までの2ケタの数字に対応させます.00 と 0 は異なるものと考えます.
この対応のさせ方は自由で,対応表をみんなに配っておけば良いだけの話です.
A君の表,B君の表といくつかあったとき,
バーコードの先頭にここからは A君の表を使います,とか宣言すればよいのです.
JIS (X 0502) では次のように対応させています.
黒バーの並べ方は10通りでした.
これに 0 から 9 までの数字を対応させます.Cf.表1.
白バーも同じ対応のさせ方をします.
そして黒バーが 3 で白バーが 8 なら 38 とするのです.例えば
■□■□■■□□■□□■■□
の場合,黒バーだけをみると太さは 11212 です.
表1から対応する数字を求めると 4 です.白バーは 11221 です.この数は 9 です.
従って 49 を表しています.
バーが9個あってそのうち太いものが3個あるという意味でこれを Code39 といいます.
何も条件をつけなければ9ケ所のうち,太いバーを3ケ所に入れる組み合わせの数ですから,
9*8*7/(3*2*1) = 84 通りあります.
でも実際の Code39 はこのうちの半分くらいしか使いません.
「太い黒バーの個数は偶数個」か「太い黒バーの個数は奇数個」に分ければ半分くらいになります.
どちらの条件を考えても同じようなものですが,Code39 では前者の条件をつけます.
次のような問題を解いてみます.
黒バー,白バーにはそれぞれ,細いバーと太いバーの2種類があります.
今,黒バーを5個,白バーを4個,合計9個使い,黒バーから始めて黒白を交互に並べていきます.
ただし,太いバーの個数は黒白合わせてちょうど3個で,
しかも太い黒バーの個数は偶数個とします.
さて,このような並べ方は全部で何通りあるでしょう.
太い黒バーの個数は偶数ですから,0個か2個です.
2個の場合(太い白バーは1個)
黒バーの並べ方は5個から2個とってくる組み合わせの数だから 10 通りです.
白バーの並べ方は4通りです.従って,10*4 = 40.
0個の場合(太い白バーは3個)
黒バーの並べ方は1通りです.
白バーの並べ方は4通りです.従って,1*4 = 4 通り.
答え 44通り.
細いバー(Narrow)と太いバー(Wide) の個数を合わせて7個使うという意味で NW-7 といいます.
何も条件をつけなければ N と W (1,2 あるいは 0,1) を7個並べる場合の数ですから
2^{7}=128 通りあります.NNNNNNN は長さ7で,WWWWWWW は長さ 14 になります.
全体の長さが揃わないので「長さは9以上10以下」という条件をつけます.
すると太いバーは2個か3個になります.
2個の場合は7個から2個とってくる組み合わせの数ですから,7*6/2=21 通り,
3個の場合は 7*6*5/(3*2*1)=35 通り,合わせて 56 通りになります.
でも実際の NW-7 はこのうちの半分くらいしか使いません.またまた,
「太い黒バーの個数は偶数個」か「太い黒バーの個数は奇数個」に分けます.
どちらの条件を考えても同じようなものですが,NW-7 では後者の条件をつけます.
次のような問題を解いてみます.
黒バー,白バーにはそれぞれ長さ1の細いバーと長さ2の太いバーの2種類があります.
今,黒バーを4個,白バーを3個,合計7個使い,黒バーから始めて黒白を交互に並べていきます.
ただし,全体のバーの長さは9以上10以下とし,太い黒バーの個数は奇数であるとします.
さて,このような並べ方は全部で何通りあるでしょう.
太い黒バーの個数を x,太い白バーの個数を y とします.
全体のバーの長さが9以上10以下ですから太いバーの個数は2か3です.
つまり,x+y=2 or 3 です.太い黒バーの個数は奇数ですから x=1 or 3 です.従って,
(x,y)=(1,1) の場合,4*3=12 通り.
(x,y)=(3,0) の場合,4*1=4 通り.
(x,y)=(1,2) の場合,4*3=12 通り.
合計 28 通り.答え 28 通り.
ASCII 7 bit code の文字は 128個ありました.これをバーコードで表すという意味で
Code128 といいます.
ここまでのバーコードは細いと太いの2種類でしたが,ここからはもっと多くの種類を用います.
黒バー,白バーにはそれぞれ,太さが 1,2,3,4 の4種類があります.
今,黒バー3個,白バー3個の計6個を使い,黒バーから始めて黒白を交互に並べていきます.
ただし,全体のバーの長さ(太さ)は常に 11 であるとし,
黒バーだけの長さの和は偶数とします.さて,このような並べ方は全部で何通りあるでしょう.
黒バーの長さの和は 4,6,8 しかありません.この並べ方を数えてみます.
和が 4 のとき,2,1,1 を使う3通り.
和が 6 のとき,4,1,1 か 3,2,1 か 2,2,2 を使う10 通り.
和が 8 のとき,4,3,1 か 4,2,2 か 3,3,2 を使う12 通り.
それぞれの場合の白バーの並べ方を数えてみます.
和が 7 のとき,4,2,1 か 3,3,1 か 3,2,2 を使う12 通り.
和が 5 のとき,3,1,1 か 2,2,1 を使う6通り.
和が 3 のとき,1,1,1 のみ.1通り.
従って,3*12+10*6+12*1=108 答え 108通り.
■■□■■■□■□□□
の場合,長さで表すと
213113
となります.2進表示や n,w の表示はできません.
ただ,長さ11のそれぞれが黒か白なので黒を1,白を0として,
11011101000 と書くことがあります.
記号の乱用のような気がするのでここでは使わないことにします.
これらのバーで108通りの情報が表せます.
このうちの 103 個に数字や英字の記号を対応させます.103 は素数です.
Code128 は ASCII 7 bit code の文字128個をバーコード化するためのものです.
でも 103個では 128に足りません.それで表を切り替えて使います.
表にはセットA,セットB,セットC の3枚用意します.
この表の切り替えは 108-103=5 の残った5個のうち,3個を使います.
つまり,これをバーコードの先頭につけ,ここからはセットA です,などと宣言するのです.
すると結局,バーコードが 103*3=309 個もできてしまったことになります.
ですから,128個を使ってもだいぶ余ります.
それで 00から99 までの 100個の記号やファンクションキーなどを追加します.
さらに余ったバーコードには記号を重複して使います.
この対応は「表4」のようになっています.
次のような問題を解いてみます.
黒バーと白バーがあります.バーの長さは1,2,3,4 の4種類があります.
黒バーを2個,白バーを2個使って白黒を交互に並べます.
最初は黒でも白でも構いません.ただし,バーの長さの和は常に7であるとします.
さて,このような並べ方は全部で何通りあるでしょう.
黒バーの長さの和は 2,3,4,5 です.
和が 7 ですから対応する白バーの長さの和は 5,4,3,2 です.
黒バーの並べ方を数えてみます.
和が 2 のとき,1通り.
和が 3 のとき,1,2 を使う 2 通り.
和が 4 のとき,1,3 か 2,2 を使う3 通り.
和が 5 のとき,1,4 か 2,3 を使う 4 通り.
対応する白バーの並べ方も同じです.
最初に白から始めて白黒白黒と並べる場合を考えます.
黒バーの長さの和が奇数のとき,すなわち,3,5 のとき,
2*3+4*1=10 通り (これを白始まりの奇数パリティと呼んでおきます.)
黒バーの長さの和が偶数のとき,すなわち,2,4 のとき,
1*4+3*2=10 通り (白始まりの偶数パリティ.)
次に黒から始めて黒白黒白と並べる場合を考えます.これも同様です.
黒バーの長さの和が奇数のとき,
2*3+4*1=10 通り (黒始まりの奇数パリティ.)
黒バーの長さの和が偶数のとき,
1*4+3*2=10 通り (黒始まりの偶数パリティ.)
答え 40通り.
ウーロン茶のバーコードは上で説明した JAN Code です.
使用できる記号は 0 から 9 までの10個の数字です.これを13ケタ並べます.
最初の数字は特殊なので後で考えることにして,残りの12個を左6個,右6個に分けます.
左の方は常に白始まりのバーを使い,右の方は常に黒始まりのバーを使います.
それで上のように Left と Right という言葉を使いました.
0 から 9 までの数字をバーコードに対応させるわけですが,
問題5でみたようにバーコードは 40通りありました.
残りを捨てるのはもったいないので 0 から 9 までの数字を重複して対応させます.
この対応は「表5」のようになっています.
ただし,黒始まりの奇数パリティは使わないので表がありません.
ですから,同じ 3 という数字でもバーコードで表すと
LO3,LE3,RO3,RE3 の4通りの表現方法があることになります.
ウーロン茶の場合
4902102024136
をバーコードに直すと次のようになります.
|| LO9 LE0 LO2 LO1 LE0 LE2 || RE0 RE2 RE4 RE1 RE3 RE6 ||
表5を見ながら対応するバーコードを書けばよいわけです.
右の6個の数字は黒始まりの偶数パリティ(黒の長さが偶数)を使うという規則ですから問題ありません.
左側は O(Odd) の表を使ったり,E(Even) の表を使ったりしています.L を除いて考えると
OEOOEE という文字が見えてきます.これが 4を意味します.
O(Odd) と E(Even) の6個の列と数字の対応は
「表6」にあります.
このようにウーロン茶のバーコードを見て,4に対応するバーを探そうとしてもみつけることができません.
対応するバーがないからです.
左の6ケタすべてを読み終わったあとで始めて4という数字が浮かび上がってくるのです.
ですからバーコードの4という数字だけ前に飛び出して書かれています.
本来,O(Odd) と E(Even) の6個の列は64通りありますが,
表6のようにこのうちの10個しか使っていません.
どこにもない数字を隠しておけるしくみは次のようになっています.
0 から 9 までの数字をバーコードで表すには LO,LE の計20通り使えますから,
6個のバーコードをつなげると
20*20*20*20*20*20=64*10^(6) 通り
の情報が表せます.普通の数字で6ケタは 10^(6)通りです.
バーコードの方がより詳しい情報を含んでいることになります.
つまり表2枚を切り替えて使えばあと余分に64個の数字を表すことができるわけです.
4枚全部を使って12ケタを表せば 40^(12) というすごい数になります.
その代わり表6が 4^(12)= 16777216 個というすごく大きな表になってしまいます.
使い物にならないでしょう.
注5.OEOOEE というパターンを自分で確認したければ,例えば 4333333333337 などを
バーコードに直してみるとよいでしょう.パターンがはっきり見えるはずです.
ウーロン茶のバーコード
4333333333337
おにぎりのバーコード