コード128

コード128(B & C)で「RI 476 394 652 CH」をエンコードしたスイスの郵便バーコード

Code 128は、 ISO/IEC 15417:2007で定義されている高密度線形バーコードシンボルです。 [1]英数字または数字のみのバーコードに使用されます。ASCIIの128文字すべてをエンコードでき、拡張シンボル(FNC4)を使用することで、ISO/IEC 8859-1で定義されているLatin-1文字もエンコードできます。[要出典] Code 39などの他の方式と比較して、特にテキストの大部分が数字である場合、一般的によりコンパクトなバーコードになります。Code 128は、1981年にComputer Identics Corporationによって開発されました。[2]

GTIN、賞味期限、バッチ番号をエンコードしたGS1-128バーコード

GS1-128 (旧称 UCC/EAN-128) はコード 128 のサブセットであり、サプライ チェーンのコンテナおよびパレット レベルの製品識別コードとして、輸送および梱包業界で世界中で広く使用されています。

仕様

「コード459
バーコード(コード128B)の概略図。1
クワイエットゾーン、2:コードB開始、3:データ、4:チェックサム、5:ストップ

Code 128 バーコードには 7 つのセクションがあります。

  1. 静かなゾーン
  2. 開始記号
  3. エンコードされたデータ
  4. チェックマーク(必須)
  5. 停止記号
  6. 最終バー(停止記号の一部とみなされることが多い)
  7. 静かなゾーン

チェック シンボルは、すべてのシンボルの加重合計(モジュロ103) から計算されます。

サブタイプ

Code 128には108個のシンボルが含まれます。データシンボルが103個、スタートシンボルが3個、ストップシンボルが2個です。各シンボルは、3本の黒バーと幅の異なる3本の白スペースで構成されています。すべての幅は基本「モジュール」の倍数です。各バーとスペースの幅は1~4モジュールで、シンボルの幅は固定です。つまり、3本の黒バーと3本の白バーの幅の合計は11モジュールです。

ストップパターンは、2つのシンボルが重なり合った4本のバーで構成されています。ストップパターンは双方向スキャンを可能にします。ストップパターンを左から右へ(通常の場合)読み取ると、ストップシンボル(その後に2モジュールバーが続く)が認識されます。ストップパターンを右から左へ読み取ると、逆ストップシンボル(その後に2モジュールバーが続く)が認識されます。逆ストップシンボルを認識したスキャナーは、2モジュールバーをスキップし、バーコードの残りの部分を逆順に読み取る必要があることを認識します。

Code 128 は、その名前にもかかわらず、128 個の異なるシンボルを持たないため、128 個のコードポイントを直接表現することはできません。128 個の ASCII 値すべてを表現するには、3 つのコードセット (A、B、C) を切り替えます。コードセット A と B を組み合わせると、128 個の ASCII 文字すべてをカバーします。コードセット C は、数字列を効率的にエンコードするために使用されます。最初のサブセットは、適切な開始シンボルを使用して選択されます。各コードセット内では、103 個のデータコードポイントの一部が、他の 2 つのコードセットのいずれかにシフトするために予約されています。シフトは、コードセット A と B ではコードポイント 98 と 99、コードセット A と C ではコードポイント 100、コードセット B と C ではコードポイント 101 を使用して行われます。

  • 128A(コードセットA) – ASCII文字00~95(0~9、A~Z、制御コード)、特殊文字、FNC1~4
  • 128B(コードセットB) – ASCII文字32~127(0~9、A~Z、a~z)、特殊文字、FNC1~4
  • 128C(コードセットC)– 00~99(1つのコードポイントで2桁の数字をエンコード)およびFNC1

Code 128の左右のクワイエットゾーンの最小幅は10xです(xはモジュールの最小幅)。バーコードの左右両側にクワイエットゾーンを設けることは必須です。

スタート/ストップとバーの幅

バーコードの各シンボルは、3本のバーと3本のスペースで構成されています。各バーまたはスペースの幅は1、2​​、3、または4単位です。バーの幅の合計は偶数(4、6、または8単位)、スペースの幅の合計は奇数(3、5、または7単位)で、シンボルあたり合計11単位となります。例えば、ASCII文字「0」をエンコードすると10011101100となり、1の連続がバー、0の連続がスペースとなります。1つの1はバーコードの中で最も細い線になります。3つの1が連続している場合(111)、バーの太さは1つの1のバーの3倍になります。

11ユニット幅のシンボルは108種類あり、このコードではすべてのシンボルが使用されています。2つのシンボルは、ストップ(バーコードの終了)表示、ストップ、およびリバースストップに使用されます。2つのストップシンボルは、常に2ユニットのバーが続き、13ユニット長のストップパターンを形成するため、特別な意味を持ちます。ストップパターンを左から右に読むとストップシンボル(その後に2ユニットのバーが続く)となり、右から左に読むとリバースストップシンボル(その後に2ユニットのバーが続く)となります。

チェックディジットの計算

チェックデジットは、重み付けされたモジュロ103チェックサムです。これは、各シンボルの「値」と、バーコード文字列における位置の重みを乗じた積に、スタートコードの「値」を加算することで計算されます。スタートシンボル最初のエンコードされたシンボルは、位置1にあります。次に、積の合計をモジュロ103で減算します。そして、その余りを103個の非区切り記号のいずれかに変換し(以下の手順[無効なリンク、説明が必要(相違点を参照) ]に従って)、バーコードのストップシンボルの直前に追加します。

たとえば、次の表では、英数字文字列 PJJ123C のコード 128 バリアント A のチェックサム値が計算されています。

コード価値重さ価値 × 重量
スタートコードA103(1)103
P48148
J42284
J423126
117468
218590
3196114
C357245
878
103を法とする剰余54

したがって、V に等しい値 54 が追加され、その後に停止コードが続きます。

チェック シンボルを計算する目的では、シフト シンボルとコード スイッチ シンボルは、バーコード内の他のシンボルと同じように扱われます。

FNC4を使用して高文字数(160~255文字)をエンコードする

コードセットAとBにのみ存在する特殊シンボルFNC4(「機能4」)は、コード128バーコード内のすべてのラテン1( ISO-8859-1 )文字をエンコードするために使用できます。 [3]

文字列中に「FNC4」が1つだけ存在する場合、続く記号はASCIIと同様に読み取られますが、値は+128され、ISO-8859-1テーブルの上限値が適用されます。続く記号が「SHIFT」の場合、2つ目の記号を使用して文字を取得します。

連続する2つの「FNC4」文字が使用される場合、さらに2つの連続する「FNC4」文字が出現するか、シンボルの終端に達するまで、後続のすべてのデータ文字は拡張ASCII文字となります。この拡張エンコードのシーケンス中に1つの「FNC4」文字が出現した場合、次のデータ文字のみを標準ASCIIエンコードに戻すために使用されます。「SHIFT」文字および文字サブセット文字は、このようなシーケンス中は通常の効果を持ちます。[4]

コード128Aからは、FNC4キーを押すことで、160(16進数A0、ノーブレークスペース)から223(16進数DF、ß)までのLatin-1特殊文字にアクセスできます。224(16進数E0、à)から254(16進数FE、þ)までの小文字は、FNC4+SHIFT Bキーで使用できます。÷(247、16進数F7)とÿ(255、16進数FF)は使用できません。

この機能はGS1-128では利用できません。[5] [6]コード128タイプB(およびC)のサポートはあまり一般的ではないため、 ISO-8859-1コード範囲の文字の代わりにQRコードを使用する方が簡単な場合があります。

バーコードの幅

Code128では、各シンボルについて、6本のバーとスペース(それぞれ3本ずつ)を交互に配置する組み合わせが規定されています。したがって、各シンボルはバーで始まり、スペースで終わります。バーコードフォントでは、通常、最後のバーはストップシンボルと組み合わされて、より幅の広いストップパターンを形成します。以下の表は、各シンボルの各バーとスペースに関連付けられた幅を示しています。各バーまたはスペースの幅は、1、2、3、または4ユニット(モジュール)です。上記の例では、「A」はパターン10100011000、または以下の表では幅111323で表されます。

幅の値は、パターン内の1と0が連続する各連続の長さを左から数えることで算出されます。連続は常に6つあり、これらの6つの連続の長さが幅の値となります。例えば、パターン10100011000の場合、連続の長さは1(数字1)、1(数字0)、1(数字1)、3(数字0)、2(数字1)、3(数字0)です。各連続の長さだけを報告すると、1、1、1、3、2、3となり、幅の値は111323となります。

コード128
価値16進値128A128B128Cフォント位置
(共通/非共通/バーコードソフト)
バー/スペース
コードラテン語1パターン
000空間空間0032または194または207 / 212 / 252または Â または Ï / Ô / ü11011001100212222
101!!0133!11001101100222122
202023411001100110222221
303##0335#10010011000121223
404$$0436$10010001100121322
505%%0537%10001001100131222
606063810011001000122213
707''0739'10011000100122312
808084010001100100132212
909094111001001000221213
100a**1042*11001000100221312
110b++1143+11000100100231212
120c124410110011100112232
130日--1345-10011011100122132
140e144610011001110122231
150f//1547/10111001100113222
1610001648010011101100123122
1711111749110011100110123221
1812221850211001110010223211
1913331951311001011100221132
2014442052411001001110221231
2115552153511011100100213212
2216662254611001110100223112
2317772355711101101110312131
2418882456811101001100311222
2519992557911100101100321122
261a::2658:11100100110321221
271b;;2759;11101100100312212
281c<<2860<11100110100322112
291日296111100110010322211
301e>>3062>11011011000212123
311階??3163?11011000110212321
3220@@3264@11000110110232121
3321336510100011000111323
3422BB3466B10001011000131123
3523CC3567C10001000110131321
3624DD3668D10110001000112313
3725EE3769E10001101000132113
3826FF3870F10001100010132311
3927GG3971G11010001000211313
4028HH4072H11000101000231113
4129417311000100010231311
422aJJ4274J10110111000112133
432bKK4375K10110001110112331
442cLL4476L10001101110132131
452日MM4577M10111011000113123
462e467810111000110113321
472階477910001110110133121
4830PP4880P11101110110313121
4931質問質問4981質問11010001110211331
5032RR5082R11000101110231131
5133SS5183S11011101000213113
5234TT5284T11011100010213311
5335あなたあなた5385あなた11011101110213131
5436VV5486V11101011000311123
5537WW5587W11101000110311321
5638XX5688X11100010110331121
5739はいはい5789はい11101101000312113
583aZZ5890Z11101100010312311
593b[[5991[11100011010332111
603c\\6092\11101111010314111
613D]]6193]11001000010221411
623e^^6294^11110001010431111
633階__6395_10100110000111224
6440ヌル`6496`10100001100111422
6541SOH1つの65971つの10010110000121124
6642STXb6698b10010000110121421
6743ETXc6799c10000101100141122
6844終了時刻d68100d10000100110141221
6945ENQe69101e10110010000112214
7046確認f70102f10110000100112412
7147ベルグラム71103グラム10011010000122114
7248学士h72104h10011000010122411
7349HT7310510000110100142112
744aLFj74106j10000110010142211
754bVT7510711000010010241211
764cFFl76108l11001010000221114
774日CRメートル77109メートル11110111010413111
784eそれでn78110n11000010100241112
794階SIo79111o10001111010134111
8050DLEp80112p10100111100111242
8151DC1q81113q10010111100121142
8252DC2r82114r10010011110121241
8353DC3s83115s10111100100114212
8454DC4t84116t10011110100124112
8555ナクあなた85117あなた10011110010124211
8656シンv86118v11110100100411212
8757ETB8711911110010100421112
8858できる×88120×11110010010421211
8959EMy89121y11011011110212141
905aサブz90122z11011110110214121
915bESC{91123{11110110110412121
925cFS|92124|10101111000111143
935日GS}93125}10100011110111341
945eRS9412610001011110131141
955階私たち削除95195 / 200 / 240Ã / È / ð10111101000114113
9660FNC3FNC396196 / 201 / 241Ä / É / ñ10111100010114311
9761FNC2FNC297197 / 202 / 242Å / Ê / ò11110101000411113
9862シフトBシフトA98198 / 203 / 243Æ / Ë / ó11110100010411311
9963コードCコードC99199 / 204 / 244Ç / Ì / ô10111011110113141
10064コードBFNC 4コードB200 / 205 / 200È / Í / È10111101110114131
10165FNC 4コードAコードA201 / 206 / 246É / Î / ö11101011110311141
10266FNC 1FNC 1FNC 1202 / 207 / 247Ê / Ï / ÷11110101110411131
10367スタートコードA203 / 208 / 248Ë / Ð / ø11010000100211412
10468スタートコードB204 / 209 / 249Ì / Ñ / ù11010010000211214
10569スタートコードC205 / 210 / 250Í / Ò / ú11010011100211232
1066a停止11000111010233111
リバースストップ11010111000211133
ストップパターン(7小節/スペース)206 / 211 / 251Î / Ó / û11000111010112331112

「コードA」、「コードB」、「コードC」の各シンボルは、後続のすべてのシンボルを対応するサブコード(例:128A、128B、または128C)に従って解釈します。「シフト」シンボルは、後続の1つのシンボルの解釈をサブコードAとBの間で切り替えます。

エンコードされたASCII文字は、実際に使用されているバーコードフォントによって異なります。特に、値0および値95以上のASCII文字は、インストールされているフォントによって定義が異なる場合があります。

FNC xコードは特別な目的で使用されます。バーコードの先頭にある FNC1 は、Uniform Code Councilによって割り当てられた2桁、3桁、または4桁のアプリケーション識別子で始まるGS1-128バーコードを示します。このアプリケーション識別子は、後続の数字を説明します。例えば、アプリケーション識別子 421 は、ISO 3166-1 の国コードと出荷先郵便番号が続くことを示します。したがって、ホワイトハウス米国郵便番号は通常「(421) 840 20500」と印刷されますが、実際には「」 とコード化されます。[Start C] [FNC1] 42 18 40 20 50 [Code A] 16 [Check symbol 92] [Stop]

FNC2(メッセージ追加)はバーコード内の任意の場所に配置でき、バーコードリーダーが現在の文字列を保存し、次に読み取るバーコードの文字列の先頭に追加することを示します。GS1-128では使用されません。

FNC3 (初期化) はバーコード内の任意の場所に表示され、バーコード文字列の指示に従ってバーコード リーダーに初期化または再プログラムするように指示します。

FNC4は拡張ASCII文字セットを表すために使用されます(§ FNC4を用いた高位文字(160~255文字)のエンコードを参照)。GS1-128では使用されません。[7]

可用性

エンドユーザーにとって、Code 128バーコードは、バーコードの画像を作成する外部アプリケーション、またはフォントベースのバーコードソリューションのいずれかによって生成できます。どちらのソリューションでも、チェックデジットを計算してバーコードを作成するには、アプリケーションまたはアプリケーションのアドインを使用する必要があります。

Code 128 Type-Cによるバーコード長の最適化

コードセットCは、1つのコードシンボルで2桁の数字を表します。そのため、コードの内容が数字のみで構成されている場合、またはコード内に長い数字のシーケンスが含まれている場合は、より短いバーコードが作成されることがあります。

ただし、文字列に含まれる数字が少数の場合や、数字以外の文字が混在している場合は、コードセットAまたはBよりもコンパクトなコードが必ずしも生成されるとは限りません。コードセットCを使用すると、2桁ごとに1つのシンボルを節約できますが、セットへの出入りにモードシフトシンボルが必要になります。したがって、連続する数字が十分にある場合にのみ、コードセットCを使用する価値があります。例えば、文字列「X00Y」をコードセットAまたはBでエンコードするには7つのコードシンボルが必要です([Start B] 56 16 16 57 [checksum] [Stop])。一方、「X00Y」にコードセットCを使用すると、8つのシンボル長のコードになります([Start B] 56 [Code C] 00 [Code B] 57 [checksum] [Stop])。

コード セット C の使用は、次の条件を満たす場合にのみ有利です。

指の位置連続する数字の数
データの始まり4歳以上
データの終わり4歳以上
データの中央(コードセットAまたはBのシンボルで囲まれている)6歳以上
全体のデータ2または4以上(3は不可)

文字列の末尾で、コードセットCへの移行を偶数桁になるまで遅らせることで、余分な記号の発生を回避できます。文字列「...01234」を考えてみましょう。切り替えを遅らせると が生成されます... 0 [Code C] 12 34 [checksum] [Stop]が、切り替えを早めると が生成されます... [Code C] 01 23 [Code A] 4 [checksum] [Stop][8]

例えば、文字列「098x1234567y23」の場合、コードセットCを使用することでバーコードの長さを節約できるのは、文字列の中央部分に適用した場合のみです。文字列の先頭と末尾の部分では、コードセットCへの切り替えは効果がありません。文字列の中央には奇数の桁があるため、奇数桁には異なるコードセットを使用する必要がありますが、それが最初か最後かは関係ありません。どちらの場合も、、、[Start B] 0 9 8 x 1 [Code C] 23 45 67 [Code B] y 2 3 [checksum] [Stop]またはの16個のシンボルが必要です[Start B] 0 9 8 x [Code C] 12 34 56 [Code B] 7 y 2 3 [checksum] [Stop]

一般的なレーザースキャナなど、バーコード画像全体を一度に検出して読み取る必要があるバーコードリーダーを使用する場合、生成されるバーコードの長さを最適化することが重要です。バーコードが長くなるほど、レーザーバーコードリーダーとバーコード画像の距離が長くなり、一定の閾値を超えると読み取りが困難または不可能になります。

最適なエンコーディングは動的計画法アルゴリズムを使用して見つけることができます[9]

参考文献

  1. ^ 「ISO/IEC 15417:2007 - 情報技術 - 自動識別及びデータキャプチャ技術 - Code 128バーコードシンボル仕様」www.iso.org . 2018年2月15日閲覧
  2. ^ 「CODE 128とGS1-128」。バーコード情報とヒント。キーエンス。 2023年11月6日閲覧
  3. ^ ISO 15417 附属書F
  4. ^ "TBarcode1D_Code128". Han-soft corporation . 2017年1月21日閲覧。単一の「FNC 4」文字が使用されている場合、シンボル内の後続のデータ文字が拡張ASCII文字であることを示します。後続のデータ文字の文字サブセットを変更する必要がある場合は、「FNC 4」文字の後に「SHIFT」文字を続けることができます。後続のデータ文字は標準ASCII文字セットに戻ります。2つの連続した「FNC4」文字が使用されている場合、さらに2つの連続した「FNC4」文字が検出されるか、シンボルの末尾に達するまで、後続のすべてのデータ文字は拡張ASCII文字となります。この拡張エンコードのシーケンス中に単一の「FNC4」文字が検出された場合、それは次のデータ文字のみを標準ASCIIエンコードに戻すために使用されます。「SHIFT」および文字サブセット文字は、このようなシーケンス中は通常の効果を持ちます。
  5. ^ 「Code 128 解説」Softmatic GmbH . 2017年1月21日閲覧原則として、ドイツ語のウムラウト(例:ÄÖÜ)などの非ASCII文字は、特殊文字(FNC4)を使用することでCode 128シンボルにエンコードできます。ただし、この機能は広くサポートされていません。非ASCIIデータ専用のサポートを備えたAztecやDatamatrixなどの2Dバーコードシンボルを使用する方がよいかもしれません。
  6. ^ GS1 一般仕様書(2006 年 1 月 – バージョン 7.0)、セクション 5.3.1.1 GS1-128 シンボル特性では、「ASCII 値が 128 から 255 の文字は、Code 128 シンボルでもエンコードできます。機能 4 文字 (FNC4) でアクセスされる ASCII 値が 128 から 255 の文字は、将来の使用のために予約されており、GS1-128 バーコード シンボルでは使用されません。」と記載されています。
  7. ^ 「5.4.3.4.2 機能文字」GS1一般仕様規格。バージョン23.0。GS1 AISBL: 287。2023年1月。 2023年6月28日閲覧
  8. ^ GS1一般仕様書、バージョン13、発行1、2013年1月、セクション5.4.7.7。スタートシンボル、コードセットシンボル、シフトシンボルを使用したシンボル長の最小化(参考情報)、268~269ページ。このセクションでは圧縮戦略について説明します。
  9. ^ スキエナ、スティーブン・S. (2010). 「8.9 戦争物語:バーコード用テキスト圧縮」.アルゴリズム設計マニュアル(第2版). シュプリンガー. ISBN 978-1-849-96720-4動的プログラミングにより、平均で 8% より厳密なエンコードが実現しました。
  • 128 コード – フォントベースのバーコード ソリューションを使用して、Code 128 エンコーディング アルゴリズムを学習します。
  • オンライン バーコード ジェネレーター – さまざまな種類のバーコードに対応した無料のオンライン バーコード ジェネレーター。

サンプルコード

  • Pythonバーコード128 – Pythonコードは1ピクセル幅の四角形を描画するようです。線を描画する短線長線バーコードから改変されたようです。「黒い四角形」は「白い四角形」と同じサイズであるはずです。
  • Barcode1DTools Ruby gem – Code 128 を含む多くの 1D バーコードシンボルの Ruby ソース コード。
  • Perl バーコード生成コード – Code 128 を含む多くの 1D バーコードシンボルの Perl ソース コード。
  • Barcode::Code128 – Perl バーコード生成モジュール。
  • Barcode4J – Code128 およびその他の標準バーコードを実装した Java API。
  • JavaScript Code 128 – Code128 およびその他の線形バーコードの JavaScript 実装。
Retrieved from "https://en.wikipedia.org/w/index.php?title=Code_128&oldid=1305040547"