UPC(Universal Product Code)バーコードは、北米(アメリカ、カナダ)で使用されている共通商品コードです。 種類としては、以下の通り3つのバージョンがあるようですが、ここでは、基本的な「Version A」とそれを短縮した「Version E」の2つを説明します。
Version A : 正規のバージョン
Version D : 12+n文字、または、可変長メッセージのバージョン
Version E : ゼロサプレスバージョン(ゼロの部分を除いて短くした)
一番幅の狭いバーとスペースが基本要素で、これを1モジュールと呼びます。バーとスペースの種類は、1~4モジュールの4種類あります。
幅の違いは、基本要素の整数倍になっています。
1モジュールのスペースは、バイナリーコードの0(zero)を表し、1モジュールのバーは、バイナリーコードの1(one)を表します。
1文字は、2つのバーと2つのスペースで構成されており、バーとスペースのトータル幅は、7モジュールです。
4種類のスペース | 4種類のバー |
![]() | ![]() |
要するに、1文字は7ビットで表現されており、0と1をスペースとバーに置き換えればよいのです。
表現できる文字は、数字(0~9)のみです。
例として、バイナリーコードで「1110010」と定義されている1文字のバーとスペースの組合せは以下のようになります。
1モジュールの基本寸法は13/1000インチ(0.33mm)で、0.8倍(10.4/1000インチ)まで縮小でき、そして、2.0倍(26/1000インチ)まで拡大できます。
SVG形式で作成されるバーコードは、基本寸法(0.33mm)になっています。(2015年8月22日追記)
バーとスペースの基本構成は以下の通りです。
Left Light Margin | + | Left Guard Bars | + | Number System Character | + | Left Data Field | + | Center Bars | + | Right Data Field | + | Check Digit | + | Right Guard Bars | + | Right Light Margin |
---|
Left Light Margin | : | 9モジュール以上のスペースが必要です。 |
Left Guard Bars | : | スタートコードを表し、「101」と表現します。 |
Number System Character | : | 下記フォーマット説明を参照。 |
Left Data Field | : | 下記フォーマット説明を参照。 |
Center Bars | : | センターコードを表し、「01010」と表現します。 |
Right Data Field | : | 下記フォーマット説明を参照。 |
Check Digit | : | 下記フォーマット説明を参照。 |
Right Guard Bars | : | ストップコードを表し、「101」と表現します。 |
Right Light Margin | : | 9モジュール以上のスペースが必要です。 |
Version Aは、12桁の数字でできており、フォーマットは以下の通りです。
フォーマット: | SXXXXX (左半分) | YYYYYC (右半分) |
---|---|---|
S=Number System Character X=Vendor Number Y=Product Number C=Check Digit |
Number System Character
0 正規のUPCコード
1 リザーブ
2 重さを量って売る商品のためのコード
商品コードと計量した値が入っている。フォーマットはいろいろあり、金額入りもある。
3 薬と健康関連商品のためのコード
4 食べ物以外のインストア・マーキング用コード
コード体系の制限はないが、チェックデジットは必要。
5 クーポン用コード
6 リザーブ
7 リザーブ
8 リザーブ
9 リザーブ
Check Digit
チェックデジットは、モジュラス10方式で下記のように計算して作り出されます。
例)012345678905 (最後の5がチェックデジット)
1.右端から左に向かって、偶数桁の値をすべてたします。
0+8+6+4+2+0=20
2.この値に3をかけます。
20×3=60
3.右端から左に向かって、奇数桁の値を、チェックデジットを除き、すべてたします。
9+7+5+3+1=25
4.この値と2.で計算した値をたします。
25+60=85
5.この結果の一の位の10の補数がチェックデジットとなります。
10-5=5(85の一の位は5、または、85を10で割った余りは5)
注記:結果が10の場合は、チェックデジットは0となります。
左側半分の文字は奇数パリティ形式で、右半分の文字は偶数パリティ方式になっています。 文字コード表は以下の通り。
文字 (数字) | 左側の文字 | 右側の文字 |
---|---|---|
奇数パリティ | 偶数パリティ | |
0 1 2 3 4 5 6 7 8 9 |
0001101 0011001 0010011 0111101 0100011 0110001 0101111 0111011 0110111 0001011 |
1110010 1100110 1101100 1000010 1011100 1001110 1010000 1000100 1001000 1110100 |
上記のパリティの意味ですが、
奇数パリティとは、奇数(3or5)モジュールのバーを使っている。
偶数パリティとは、偶数(2or4)モジュールのバーを使っている。
ということを表しているだけです。
そして、左側の文字の最初はスペースで終わりがバーになっており、右側の文字の最初はバーで終わりがスペースになっています。
補足として、バーコードの下に印刷されている数字は、OCR-Bフォントを使用するのが正式のようです。
このホームページで作成されるものは、作者の手作りフォントなので正式ではありません。作成ソフトを単純にするために、
手作りバー画像の下に文字を埋め込んであります。
SVG形式で作成されるバーコードは、正式なOCR-Bフォントを使用しています。(2015年8月22日追記)
文字コード表をバーとスペースで表すと下記の通りとなります。
数字 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|---|---|
左 側 の 文 字 | 奇 数 パ リ テ ィ | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
右 側 の 文 字 | 偶 数 パ リ テ ィ | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
特 殊 文 字 | スタート コード | センター コード | ストップ コード |
---|---|---|---|
![]() | ![]() | ![]() |
Number System Characterのバーの長さはLeft Guard Barsと同じ長さとなり、数字の印刷位置はLeft Guard Barsの手前になります。
また、Check Digitのバーの長さもRight Guard Barsと同じ長さとなり、数字の印刷位置はRight Guard Barsの後になります。
印刷位置には規定がありますが(Guard Barsより少し離す)、このホームページで作成されるものはその規定に従っていません。
SVG形式で作成されるバーコードは、規定通りになっています。(2015年8月22日追記)
左右のマージンを除いた左端から右端までのサイズは、標準で1.235インチ(約31mm)となります。0.8倍~2.0倍の縮小・拡大が許されていますので、
0.988インチ~2.470インチ(約25mm~62.7mm)のサイズならば規格内ということになります。
バーとスペースの基本構成は以下の通りです。
Left Light Margin | + | Left Guard Bars | + | Number System Character | + | Data Field | + | Check Digit | + | Right Guard Bars | + | Right Light Margin |
---|
Left Light Margin | : | 8モジュール以上のスペースが必要です。 |
Left Guard Bars | : | スタートコードを表し、「101」と表現します。 |
Number System Character | : | 下記フォーマット説明を参照。 |
Data Field | : | 下記フォーマット説明を参照。 |
Check Digit | : | 下記フォーマット説明を参照。 |
Right Guard Bars | : | ストップコードを表し、「010101」と表現します。 |
Right Light Margin | : | 8モジュール以上のスペースが必要です。 |
Version Eは、8桁の数字でできており、フォーマットは以下の通りです。
フォーマット: | SZZZZZZC |
---|---|
S=Number System Character Z=6 Information Characters C=Check Digit |
Number System CharacterとCheck Digitは、バーコードのシンボルとしては存在していません。 実際にバーコードとして存在しているのは6文字分(上記のZ)だけなのです。 その6文字分のコードは、2つのコード形式があり、その組合せでNumber System CharacterとCheck Digitが作り出されます。
数字 | 奇数パリティ | 偶数パリティ |
---|---|---|
0 1 2 3 4 5 6 7 8 9 |
0001101 0011001 0010011 0111101 0100011 0110001 0101111 0111011 0110111 0001011 |
0100111 0110011 0011011 0100001 0011101 0111001 0000101 0010001 0001001 0010111 |
上記のパリティの意味ですが、
奇数パリティとは、奇数(3or5)モジュールのバーを使っている。
偶数パリティとは、偶数(2or4)モジュールのバーを使っている。
ということを表しているだけです。奇数と偶数の組合せで下記のように付加文字が作り出されます。
奇数パリティと偶数パリティの文字を3文字ずつ使用しています。
付加文字 | 6文字分の奇数・偶数の組合せ | ||||||
---|---|---|---|---|---|---|---|
Number System Character | Check Digit | 1桁目 | 2桁目 | 3桁目 | 4桁目 | 5桁目 | 6桁目 |
0 | 0 | 偶数 | 偶数 | 偶数 | 奇数 | 奇数 | 奇数 |
0 | 1 | 偶数 | 偶数 | 奇数 | 偶数 | 奇数 | 奇数 |
0 | 2 | 偶数 | 偶数 | 奇数 | 奇数 | 偶数 | 奇数 |
0 | 3 | 偶数 | 偶数 | 奇数 | 奇数 | 奇数 | 偶数 |
0 | 4 | 偶数 | 奇数 | 偶数 | 偶数 | 奇数 | 奇数 |
0 | 5 | 偶数 | 奇数 | 奇数 | 偶数 | 偶数 | 奇数 |
0 | 6 | 偶数 | 奇数 | 奇数 | 奇数 | 偶数 | 偶数 |
0 | 7 | 偶数 | 奇数 | 偶数 | 奇数 | 偶数 | 奇数 |
0 | 8 | 偶数 | 奇数 | 偶数 | 奇数 | 奇数 | 偶数 |
0 | 9 | 偶数 | 奇数 | 奇数 | 偶数 | 奇数 | 偶数 |
1 | 0 | 奇数 | 奇数 | 奇数 | 偶数 | 偶数 | 偶数 |
1 | 1 | 奇数 | 奇数 | 偶数 | 奇数 | 偶数 | 偶数 |
1 | 2 | 奇数 | 奇数 | 偶数 | 偶数 | 奇数 | 偶数 |
1 | 3 | 奇数 | 奇数 | 偶数 | 偶数 | 偶数 | 奇数 |
1 | 4 | 奇数 | 偶数 | 奇数 | 奇数 | 偶数 | 偶数 |
1 | 5 | 奇数 | 偶数 | 偶数 | 奇数 | 奇数 | 偶数 |
1 | 6 | 奇数 | 偶数 | 偶数 | 偶数 | 奇数 | 奇数 |
1 | 7 | 奇数 | 偶数 | 奇数 | 偶数 | 奇数 | 偶数 |
1 | 8 | 奇数 | 偶数 | 奇数 | 偶数 | 偶数 | 奇数 |
1 | 9 | 奇数 | 偶数 | 偶数 | 奇数 | 偶数 | 奇数 |
Number System Character
0 正規のUPCコード(上記6文字分の1桁目が偶数パリティ)
1 未割当(上記6文字分の1桁目が奇数パリティ)
6桁アイテムコードとしてユーザ独自に使ってよい。
Check Digit
チェックデジットは、Version EのコードをVersion Aのコードに展開し直してから、Version Aの方式に従って計算します。
展開方法を下記に示します。
Version Eの6文字分の文字(6 Information Characters)は、Version Aの10文字分の文字(Vendor Number+Product Number)からある部分を省略して作られています。
1. | ベンダナンバーの終わり3文字が000、100、200ならば、1000アイテム分のコードを使用することができます。 6文字分の構成は、 ベンダナンバーの最初2文字(00-99) アイテムコード(000-999) ベンダナンバーの3桁目(0-2) となります。 |
|
2. | ベンダナンバーの終わり2文字が00ならば、100アイテム分のコードを使用することができます。 6文字分の構成は、 ベンダナンバーの最初3文字(000-999) アイテムコード(00-99) 数字の3 となります。 |
|
3. | ベンダナンバーの最後の1文字が0ならば、10アイテム分のコードを使用することができます。 6文字分の構成は、 ベンダナンバー(0000-9999) アイテムコード(0-9) 数字の4 となります。 |
|
4. | 上記以外のベンダナンバーは、5アイテム分のコードを利用することができます。 6文字分の構成は、 ベンダナンバー(00000-99999) アイテムコード(5-9) となります。 |
上記内容をまとめると、Version EからVersion Aへの展開方法は以下の通りとなります。
Version E 6 Information Characters | 挿入数字 | 挿入位置 | Version A Vendor Number+Product Number |
---|---|---|---|
XXYYY0 XXYYY1 XXYYY2 XXXYY3 XXXXY4 XXXXX5 XXXXX6 XXXXX7 XXXXX8 XXXXX9 |
00000 10000 20000 00000 00000 00005 00006 00007 00008 00009 |
3桁目 3桁目 3桁目 4桁目 5桁目 6桁目 6桁目 6桁目 6桁目 6桁目 |
XX00000YYY XX10000YYY XX20000YYY XXX00000YY XXXX00000Y XXXXX00005 XXXXX00006 XXXXX00007 XXXXX00008 XXXXX00009 |
チェックデジットは、Version Aに展開した10文字にNumber System Characterを先頭に付けてから計算します。
チェックデジットは、モジュラス10方式で下記のように計算して作り出されます。
例)01234565 (最後の5がチェックデジット)
1.Version Aに展開する。6 Information Charactersの最後の1文字が6なので6桁目に00006を挿入する。
012345000065 (Version Aの12桁のコード)
2.右端から左に向かって、偶数桁の値をすべてたします。
6+0+0+4+2+0=12
3.この値に3をかけます。
12×3=36
4.右端から左に向かって、奇数桁の値を、チェックデジットを除き、すべてたします。
0+0+5+3+1=9
5.この値と3.で計算した値をたします。
9+36=45
6.この結果の一の位の10の補数がチェックデジットとなります。
10-5=5(45の一の位は5、または、45を10で割った余りは5)
注記:結果が10の場合は、チェックデジットは0となります。
補足として、バーコードの下に印刷されている数字は、OCR-Bフォントを使用するのが正式のようです。
このホームページで作成されるものは、作者の手作りフォントなので正式ではありません。作成ソフトを単純にするために、
手作りバー画像の下に文字を埋め込んであります。
SVG形式で作成されるバーコードは、正式なOCR-Bフォントを使用しています。(2015年8月22日追記)
文字コード表をバーとスペースで表すと下記の通りとなります。
数字 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
奇 数 パ リ テ ィ | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
偶 数 パ リ テ ィ | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
特 殊 文 字 | スタート コード | ストップ コード |
---|---|---|
![]() | ![]() |
Number System Characterの印刷位置はLeft Guard Barsの手前になります。また、Check Digitの印刷位置はRight Guard Barsの後になります。
印刷位置には規定がありますが(Guard Barsより少し離す)、このホームページで作成されるものはその規定に従っていません。
SVG形式で作成されるバーコードは、規定通りになっています。(2015年8月22日追記)
左右のマージンを除いた左端から右端までのサイズは、標準で0.663インチ(約16.8mm)となります。0.8倍~2.0倍の縮小・拡大が許されていますので、
0.530インチ~1.326インチ(約13.4mm~33.7mm)のサイズならば規格内ということになります。