
ユニバーサルプロダクトコード(UPCまたはUPCコード)は、店舗における商品の追跡に世界中で使用されているバーコードシンボルです。
採用されたシンボル体系は、幅が正確に1、2、3、または4単位のバー(またはスペース)で構成されています。エンコードされる各10進数は、合計幅が7単位となるように選択された2本のバーと2つのスペースで構成され、「偶数」と「奇数」の両方のパリティ形式があり、どちらの方向からもスキャンできます。デコードを容易にするために、特別な「ガードパターン」(幅3または5単位で、数字をエンコードしない)が混在しています。
UPC(厳密にはUPC-A)は、各取引品に一意に割り当てられる12桁の数字で構成されています。国際GS1組織は、UPCと関連する国際商品番号(EAN)バーコードの両方に使用される数字を割り当てます。 [ 1 ] UPCデータ構造は、グローバル取引商品番号(GTIN)の構成要素であり、国際標準に基づくグローバルGS1仕様に従います。衣料品や家具などの一部の小売業者は、GS1システムを使用せず、代わりに他のバーコードシンボル体系または商品番号システムを使用しています。一部の小売業者はEAN/UPCバーコードシンボル体系を使用していますが、自社店舗でのみ販売される製品にはGTINを使用していません。
研究によると、UPCの採用と普及はイノベーションを促進し、国際的な小売サプライチェーンの成長に貢献した。[ 2 ]
1973年、食料品業界の業界団体グループが統一製品コード協議会(UPCC)を設立し、マッキンゼー・アンド・カンパニーのコンサルタントであるラリー・ラッセルとトム・ウィルソンの協力を得て、統一製品コードの基礎となる数値形式を定義した。[ 3 ]チャレゴン、IBM、リットン・ゼルウィガー、ピットニー・ボウズ・アルペックス、プレッシー・アンカー、RCA、スキャナー社、シンガー、ダイモ・インダストリーズ/データ・ジェネラルなどのテクノロジー企業が、記号表現の代替案を協議会に提出した。記号選択委員会は最終的に、ノースカロライナ州リサーチ・トライアングル・パークのジョージ・J・ローレルが設計したIBMの提案を採用したが、人間が読める領域のフォントに若干の変更を加えた。
小売店のレジで初めてスキャンされたUPCマーク付き商品は、1974年6月26日午前8時1分にオハイオ州トロイのマーシュスーパーマーケットで購入されたリグレーのジューシーフルーツチューインガム10パック(50本)でした。 [ 4 ] [ 5 ] NCRのレジでは67セントと記録されました。[ 6 ]ショッピングカートには他にもバーコード付きの商品がありましたが、レジで最初に取り上げられたのはガムでした。ガムのパッケージの複製は、ワシントンDCのスミソニアン博物館のアメリカ歴史博物館 に展示されました。[ 7 ] [ 8 ]
マレー・エデンは、ユニバーサル・プロダクト・コード(UPC)バーコードを作成したチームのコンサルタントでした。[ 9 ] [ 10 ]マサチューセッツ工科大学の科学者委員会の委員長として、彼は 「これから起こるであろう技術の急速な進歩に耐えうるシンボルを選ぶ」のに貢献しました。[ 11 ]彼はフォントを選び、バーコードリーダーが正しく動作しない場合に備えて、下部に数字を追加するというアイデアを思いつきました。[ 12 ] [ 13 ]
1969年後半頃、ノースカロライナ州リサーチ・トライアングル・パーク(RTP)にあるIBMは、スーパーマーケットのスキャナーとラベルの製造方法を研究するようジョージ・ローレルに指示した。1970年後半、ハード・バウマイスターは、IBMの2つのバーコード、デルタAとデルタBで実現可能な1インチあたりの文字数を計算する式を提供した。1971年2月、バウマイスターはローレルのチームに加わった。
Delta Bは、バーの幅とスペースの幅をコードビットと比較する方式を採用していました。この方式はインクのにじみに非常に敏感で、インクの量や圧力が適切でないと、バーの両端が外側に広がったり内側に縮んだりすることがありました。
1971年半ば、ウィリアム「ビル」クラウスはデルタCと呼ばれる新しいバーコードを発明した。[ 14 ] これはデルタBの4倍の文字数を1インチあたりに実現した。
Delta Cは、インクの均一な広がりによる影響を受けない、先頭から先頭、または末尾から末尾のみを使用することで、より高いパフォーマンスを実現しました。このコードは、文字の大部分、できればすべての文字を網羅する固定参照距離を持つ、定義済みの文字セットを持つ場合に最高のパフォーマンスを発揮しました。
1971年8月、クラウスはスキャナー開発の取り組みに加わった。しかし、数か月経っても進展はなかった。彼らは、RCAのブルズアイ・ラベルは単純な直線レーザースキャナーでスキャンできることは知っていたが、読み取れるラベルは大きすぎた。
リットン・インダストリーズは、面積を縮小するためにブルズアイのシンボルを半分にカットしたものを提案したが、それでも大きすぎ、RCAのシンボルと同様にインクのにじみ印刷の問題が生じた。冗長性とチェック機能は完全に削除された。彼らはまた、世界中から寄せられた多くの提案についても認識していたが、どれも実現不可能だった。

1972年の春、バウマイスターは画期的な発見を発表した。彼は、一度に読み取る必要のあるすべてのバーの長さよりもわずかに長いバーを持つラベルを提案した。このラベルは、直線レーザースキャナーよりもわずかに複雑なだけのシンプルな「X」型スキャナーでスキャンできる。翌日、バウマイスターは、ラベルを2つに分割すれば、バーの長さをほぼ半分に短縮できると示唆した。
これらの2つの提案は、中心部分の面積を3分の1、そして6分の1に縮小した。右の画像は、バウマイスターが提案したラベルを示している。彼は特定のバーコードを指定しなかったが、それは周知の事実だった。バーコードと10桁の数字を除けば、今日のUPCラベルは彼の提案に基づいている。その後まもなく、バウマイスターはRTPの別の部署に異動した。
ローレルはラベルの詳細を詰め、提案書を作成した。NJウッドランド社がプロジェクトの企画担当者として任命され、ローレルの提案書作成を支援した。
ローレルが最初にバーコードを試みた際、デルタBを使用しました。その結果できたラベルのサイズは約6インチ×3インチで、大きすぎました。クラウスはローレルに自身のデルタCバーコードを使うよう提案し、サンプルとなる英数字セットと、他のサイズのアルファベットを生成するためのルールが記載された特許のコピーを提供しました。これにより、ラベルのサイズは約1.5インチ× 0.9インチ(38mm× 23mm )に縮小されました。
その後、ローレルは、スキャナがラベルを検出する方法についてクロースに協力を求めた。二人は協力してガードバーとラベル検出方法の定義を定めた。ガードバーは、ハーフラベル識別とスキャナ閾値回路のトレーニングバーも提供した。ローレルは完全なラベル定義を得て、提案書の作成に取りかかった。[ 15 ]
以前、クラウスは指輪やブレスレットのように身につけるシンプルな杖のアイデアを持っていた。彼はその杖を開発し、自社ブランドのデモンストレーションを行うことにした。
1972年12月1日、IBMはローラの提案をミネソタ州ロチェスターのスーパーマーケット委員会に提出した。ロチェスターはIBMがスキャナーを開発する場所だった。プレゼンテーションの中で、クラウスはリングワンドを使ってUPCのようなラベルを読み取る実演を行った。通常のラベルの読み取りに加え、提案書の中央にある2ページにわたる大きなラベルも読み取った。次に、テーブルの上に置かれたラベル付き商品の写真が掲載されたページを開いた。ラベルは小さく、印刷された写真の解像度のせいで不鮮明だったが、ワンドはそれらの多くを読み取ることができた。この実演は、純粋なデルタCコードの堅牢性を示した。提案は承認された。
その1か月後の1973年1月1日、クラウスはIBMの先端技術グループに復帰し、ローレルは引き続きレーベルの全責任を負うことになった。
携帯型印刷機器メーカーのダイモ・インダストリーズは、商品がメーカーによってバーコード化されていない場合でも、携帯型印刷機器で店頭でバーコードを生成できるように、コードが文字に依存しないことを強く主張した。ダイモの提案はIBMに受け入れられ、IBMの最新の提案に組み込まれた。
ラベルの2つの部分には、それぞれ異なる数字文字セットを使用することが決定された。ローレルがデルタC特許から派生させた文字セットは、2本のバーと2つのスペースが印刷される7つの印刷可能な増分または単位を使用していた。これにより20通りの文字の組み合わせが得られたが、デルタCの規則に従って読み取った場合、同じコードになる組み合わせが2組あった。
18文字では不十分だったため、ローレルは文字セットに1文字追加することを試みた。これにより、26個のデルタC文字が得られ、2組の10進数文字を表現できるようになったが、ラベルの幅が14%増加し、高さも増加した。これは面積が30%増加することを意味し、ラベルのサイズは1.7インチ× 1.03インチ(43mm× 26mm )となる。ローレルは、これは受け入れられないと感じた。
ローレルは20文字からなる元の文字セットに戻ったが、そのうち4文字は同じデルタC値を持つ2組の文字だった。彼はそれらすべてを使うことにした。2組の文字を区別するために、それぞれの組の横棒の幅を1つずつ測ることにした。各組の横棒の幅は1単位または2単位となる。
ローレルはこのセットにバウマイスターの式を適用しなかった。彼は、バーの幅を1つだけ測定すれば大した問題にはならないと考えたのだ。しかし実際には、面積を2倍以上に増やすには、幅と高さを50%以上増やす必要があった。ローレルは後に、各セットのこれら4文字がスキャナーの読み取りエラーの大部分の原因だったと認めた。
数学者のデイビッド・サヴィールは、その記号が印刷可能であり、信頼性の要件を満たすことを証明する任務を与えられ、おそらくバウマイスターの方程式については知らなかった。彼とローレルは、エラー検出と訂正のために10の位にさらに2桁を追加した。
そこで彼らは、各面のバーで埋められたユニット数に奇偶パリティを追加することにした。奇偶パリティとは、ビットストリーム内の奇数個のビットエラーを検出するために使用される技術である。彼らは片側に奇数、もう片側に偶数を使用するようにした。これにより、どちらのチケットの半分が読み取られているかを示す追加情報が得られる。つまり、正確な読み取りを行うには、すべてのバーの幅を正確に読み取る必要があるということだ。また、すべてのスペースも把握できるということでもある。
すべてのビット幅を正確に読み取ることを要求したことで、デルタCの基準測定値を除いて、デルタCの利点はほぼ無効になった。デルタCコードの名残として残っているのは、奇妙な文字セットとラベルのサイズだけである。サイズは依然として純粋なデルタC用に計算された値であった。必要なバー幅の測定値を考慮してラベルサイズを適切に再計算した場合、ラベルは許容範囲をはるかに超える大きさになっていただろう。
機械工学や電子回路設計では、既知の許容誤差を用いた最悪ケース設計が一般的に求められます。バーコードを扱う多くのエンジニアは、こうした設計に関する経験が乏しく、やや直感的な方法を用いていました。これがデルタBコードの性能低下の原因であり、RCAのブルズアイスキャナの失敗の原因となった可能性が高いと考えられます。
以下の表は、1970年代初頭に入手可能だった実用的なラベルとそのサイズを示しています。
これは、同じ情報と確実な可読性を備えた的の中心を想定した話です。
UPC-Aバーコードは、12桁の数字の上に、黒いバーと白いスペースが並んだスキャン可能な帯状の部分で構成されています。UPC-Aバーコードには、アルファベット、記号、その他の文字は一切表示できません。12桁の数字と黒いバーと白いスペースの帯状の部分の間には1対1の対応関係があり、つまり、12桁の数字を視覚的に表現する方法は1通りしかなく、黒いバーと白いスペースの帯状の部分を数値的に表現する方法も1通りしかありません。
すべての UPC-A バーコードのスキャン可能領域は S L LLLLLMRRRRR R Eのパターンに従います。ここで、S (開始)、M (中央)、E (終了) のガードパターンはすべての UPC-A バーコードで同じように表現され、L (左) と R (右) のセクションは、各 UPC-A を一意にする 12 桁の数字をまとめて表します。最初の桁L は、後続の桁で使用される特定の番号システムを示します。最後の桁Rはエラー検出チェックデジットであり、スキャンまたは手動入力でエラーを検出できます。ガードパターンは、6 桁の数字の 2 つのグループを分離し、タイミングを確立します。
UPC-A 042100005264 は、UPC-A 番号システム 0 と UPC-A チェックデジット 4 で定義される「EOEEOO」パリティパターンを持つ UPC-E 425261 と同等です。
UPC-A バーコードは、さまざまな印刷およびスキャン処理に対応するために、さまざまな密度で印刷できます。重要な寸法パラメータは、x 寸法 (単一モジュール要素の幅) と呼ばれます。各バー (スペース) の幅は、x 寸法と各バー (スペース) のモジュール幅 (1、2、3、または 4 単位) を掛け合わせることによって決定されます。ガードパターンはそれぞれ 2 つのバーで構成され、UPC-A バーコードの 12 桁はそれぞれ 2 つのバーと 2 つのスペースで構成されているため、すべての UPC-A バーコードは正確に (3 × 2) + (12 × 2) = 30 本のバーで構成され、そのうち 6 本がガードパターン、24 本が数字を表します。
UPC-Aの標準サイズにおけるx寸法は0.33 mm(0.013インチ)です。UPC-Aの標準シンボル高さは25.9 mm(1.02インチ)です。S(開始)、M(中間)、E(終了)のガードパターンを構成するバーは、x寸法の5倍だけ下方に延長され、結果として標準シンボル高さは27.55 mm(1.08インチ)になります。これは、UPC-Aバーコードの最初と最後の数字のバーにも適用されます。UPC-Aは80%から200%まで任意の範囲で縮小または拡大できます。
UPC-A バーコードのスキャン可能な領域の両側には、少なくとも x 寸法の 9 倍の幅を持つ静止領域が存在しなければなりません。[ 16 ] [ 17 ] UPC-A バーコードにエンコードされた GTIN-12 番号の場合、UPC バーコード スキャナーが正しく動作するために必要な静止領域を示すために、人間が読み取れる解釈の最初と最後の桁は常にシンボルの外側に配置されます。
UPC-Aバーコードは、UPC-Aの12桁の番号をエンコードするバーとスペースの帯で視覚的に表現されます。各桁は、2本のバーと2つのスペースからなる固有のパターンで表されます。バーとスペースの幅は可変で、1、2、3、または4モジュール幅です。1桁の合計幅は常に7モジュールです。したがって、UPC-Aの12桁の番号には、合計7×12=84モジュールが必要です。
完全なUPC-Aは幅95モジュールです。84モジュールは数字(LとRセクション)用で、残りの11モジュールはS(開始)、M(中間)、E(終了)のガードパターン用です。S(開始)とE(終了)のガードパターンは幅3モジュールで、バー-スペース-バーのパターンを使用します。各バーとスペースは幅1モジュールです。M(中間)のガードパターンは幅5モジュールで、スペース-バー-スペース-バー-スペースのパターンを使用します。各バーとスペースも幅1モジュールです。さらに、UPC-Aシンボルには、S(開始)ガードパターンの前とE(終了)ガードパターンの後に、静止領域(幅9モジュールの追加スペース)が必要です。
UPC-Aの左側の数字(M(中央)ガードパターンの左側の数字)は奇数パリティであり、これは黒いバーの合計幅が奇数個のモジュールであることを意味します。一方、右側の数字は偶数パリティです。したがって、UPCスキャナは、シンボルを左から右にスキャンしているか、右から左にスキャンしているか(シンボルが上下逆になっている場合)を判断できます。S(開始)またはE(終了)ガードパターン(どちらの方向に読み取っても同じで、バー-スペース-バー)を確認した後、スキャナは、左から右にスキャンする場合は最初に奇数パリティの数字を、右から左にスキャンする場合は偶数パリティの数字を最初に認識します。パリティ/方向の情報により、上下逆のシンボルでもスキャナは混乱しません。逆さまの記号に遭遇した場合、スキャナはそれを単に無視するか(多くのスキャナは左から右と右から左のスキャンを交互に行うため、次のパスで記号を読み取ります)、数字を認識して正しい順序に並べます。数字のエンコーディングにはもう1つの特性があります。右側の数字は左側の数字の光学的な反転です。つまり、黒いバーは白いスペースに、白いバーは黒いスペースになります。たとえば、左側の「4」はスペース×1 - バー×1 - スペース×3 - バー×2ですが、右側の「4」はバー×1 - スペース×1 - バー×3 - スペース×2です。
UPC-AおよびUPC-Eバーコードの数は、それらを作成するために使用される規格によって制限されています。
以下に、対応する 12 桁の UPC-A 番号体系L LLLLLRRRRR Rとともに、考えられるすべての番号体系の説明を示します。ここで、L は番号体系の桁、Rはチェックデジットを表します。
UPCには、一般的なデータ入力エラーを検出するためのチェックデジットが含まれています。たとえば、UPC-Aコードでは、チェックデジットとしてチェックデジットの式を満たすために:
入力されたコードが式を満たさない場合、それは有効なUPC-Aではありません。
UPC-Aチェックデジットは、以下のように計算できます。
例えば、UPC-Aバーコード「03600029145 x 12」において、x 12は未知のチェックデジットであり、x 12は次のように計算できます。
したがって、チェックデジット× 12は2です。
チェックデジットの計算式は、妥当なエラー検出特性を持つように選択されています(Luhnアルゴリズムを参照)。
最も一般的な用法におけるUPCは、技術的にはUPC-Aを指します。
UPCには他にも様々なバリエーションが存在する。
12 桁のバーコードが収まらないような小型パッケージに UPC バーコードを使用できるようにするために、ゼロ抑制バージョンの UPC が開発され、UPC-E と呼ばれています。UPC-E では、番号システムの桁、製造業者コードの末尾のすべてのゼロ、および製品コードの先頭のすべてのゼロが抑制 (省略) されます。[ 22 ]このシンボル体系は、6 桁のコードのみを使用し、M (中間) ガード パターンを使用せず、E (終了) ガード パターンがスペース バー スペース バー スペース バーとして形成されるという点でUPC-A と異なり、つまり UPC-E バーコードは SDDDDDDE のパターンに従います。6 桁の UPC-E が 12 桁の UPC-A とどのように関連するかは、UPC-E の数値パターンと UPC-E のパリティ パターンによって決定されます。これはUPC-A番号システムの0または1にのみ対応し、その値はUPC-Aチェックデジットとともに、エンコードのUPC-Eパリティパターンを決定します。製造元コード桁をM、製品コード桁をPで表すと、次のようになります。
例えば、UPC-E 654321 は、エンコードされた数字の UPC-E パリティ パターンに応じて、UPC-A 065100004327 または 165100004324 に対応する場合があります。詳細は次のとおりです。
UPC-E 654321 と「EOEOEO」パリティパターン (UPC-A 065100004327) は、次のようにエンコードされます。
バーコードは次のようになります。

EAN -13はUPC-Aの上位互換として開発され、すべてのUPC-A番号の先頭に1桁追加されています。これにより、理論上可能な一意の値の数が10倍の1兆に拡大しました。EAN-13バーコードは、製品を販売する企業の本拠地国も示します(これは、製品が製造された国と同じ場合もそうでない場合もあります)。これは、GS1国コードに従って、コードの先頭の3桁によって決定されます。すべてのUPC-Aコードは、UPC-Aコードの先頭に0を追加することで、同等のEAN-13コードに簡単に変換できます。これにより、チェックデジットは変更されません。現在、すべてのPOSシステムは、両方を同様に理解できます。
EAN-8は、EANバーコードの8桁のバリエーションです。
1951年にメリーランド大学を卒業後、ジョージ・ローレルはIBMにジュニアエンジニアとして入社し、シニアエンジニアに昇進した。1969年、彼はエンジニアリングの技術部門に戻り、後に統一食料品製品コード協議会の製品識別用のコードとシンボルを設計するという途方もない任務を任された。彼の解決策であるユニバーサル製品コードは、小売業界を根本的に変えた。それ以来、彼は13桁目を追加してコードを改良した。