UPC

 UPC(Universal Product Code)バーコードは、北米(アメリカ、カナダ)で使用されている共通商品コードです。 種類としては、以下の通り3つのバージョンがあるようですが、ここでは、基本的な「Version A」とそれを短縮した「Version E」の2つを説明します。

 Version A : 正規のバージョン
 Version D : 12+n文字、または、可変長メッセージのバージョン
 Version E : ゼロサプレスバージョン(ゼロの部分を除いて短くした)

1.バーとスペースの基礎知識

 一番幅の狭いバーとスペースが基本要素で、これを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日追記)

2.UPC−Aの構成

   

 バーとスペースの基本構成は以下の通りです。

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 Margin9モジュール以上のスペースが必要です。
Left Guard Barsスタートコードを表し、「101」と表現します。
Number System Character下記フォーマット説明を参照。
Left Data Field下記フォーマット説明を参照。
Center Barsセンターコードを表し、「01010」と表現します。
Right Data Field下記フォーマット説明を参照。
Check Digit下記フォーマット説明を参照。
Right Guard Barsストップコードを表し、「101」と表現します。
Right Light Margin9モジュール以上のスペースが必要です。

 Version Aは、12桁の数字でできており、フォーマットは以下の通りです。

フォーマット:SXXXXX
(左半分)
YYYYYC
(右半分)
=Number System Character
=Vendor Number
=Product Number
=Check Digit

 Number System Character

    正規のUPCコード
    リザーブ
    重さを量って売る商品のためのコード
     商品コードと計量した値が入っている。フォーマットはいろいろあり、金額入りもある。
    薬と健康関連商品のためのコード
    食べ物以外のインストア・マーキング用コード
     コード体系の制限はないが、チェックデジットは必要。
    クーポン用コード
    リザーブ
    リザーブ
    リザーブ
    リザーブ

 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となります。

 左側半分の文字は奇数パリティ形式で、右半分の文字は偶数パリティ方式になっています。 文字コード表は以下の通り。

文字コード表

文字
(数字)
左側の文字右側の文字
奇数パリティ偶数パリティ









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日追記)
文字コード表をバーとスペースで表すと下記の通りとなります。

数字






















スタート
コード
センター
コード
ストップ
コード

 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)のサイズならば規格内ということになります。

3.UPC−Eの構成

   

 バーとスペースの基本構成は以下の通りです。

Left
Light
Margin
Left
Guard
Bars
Number
System
Character
Data
Field
Check
Digit
Right
Guard
Bars
Right
Light
Margin

Left Light Margin8モジュール以上のスペースが必要です。
Left Guard Barsスタートコードを表し、「101」と表現します。
Number System Character下記フォーマット説明を参照。
Data Field下記フォーマット説明を参照。
Check Digit下記フォーマット説明を参照。
Right Guard Barsストップコードを表し、「010101」と表現します。
Right Light Margin8モジュール以上のスペースが必要です。

 Version Eは、8桁の数字でできており、フォーマットは以下の通りです。

フォーマット:SZZZZZZC
=Number System Character
=6 Information Characters
=Check Digit

 Number System CharacterとCheck Digitは、バーコードのシンボルとしては存在していません。 実際にバーコードとして存在しているのは6文字分(上記のZ)だけなのです。 その6文字分のコードは、2つのコード形式があり、その組合せでNumber System CharacterとCheck Digitが作り出されます。

文字コード表

数字奇数パリティ偶数パリティ









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桁目
偶数偶数偶数奇数奇数奇数
偶数偶数奇数偶数奇数奇数
偶数偶数奇数奇数偶数奇数
偶数偶数奇数奇数奇数偶数
偶数奇数偶数偶数奇数奇数
偶数奇数奇数偶数偶数奇数
偶数奇数奇数奇数偶数偶数
偶数奇数偶数奇数偶数奇数
偶数奇数偶数奇数奇数偶数
偶数奇数奇数偶数奇数偶数
奇数奇数奇数偶数偶数偶数
奇数奇数偶数奇数偶数偶数
奇数奇数偶数偶数奇数偶数
奇数奇数偶数偶数偶数奇数
奇数偶数奇数奇数偶数偶数
奇数偶数偶数奇数奇数偶数
奇数偶数偶数偶数奇数奇数
奇数偶数奇数偶数奇数偶数
奇数偶数奇数偶数偶数奇数
奇数偶数偶数奇数偶数奇数

 Number System Character

    正規のUPCコード(上記6文字分の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日追記)
文字コード表をバーとスペースで表すと下記の通りとなります。

数字













スタート
コード
ストップ
コード

 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)のサイズならば規格内ということになります。