
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]

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

3 : データ、4 : チェックサム、5 : 停止
Code 128 バーコードには 7 つのセクションがあります。
- 静かなゾーン
- 開始記号
- エンコードされたデータ
- チェックマーク(必須)
- 停止記号
- 最終バー(多くの場合、ストップ記号の一部と見なされます)
- 静かなゾーン
チェック シンボルは、すべてのシンボルの 加重合計(モジュロ103) から計算されます。
サブタイプ
Code 128 には 108 個のシンボルが含まれています。103 個のデータ シンボル、3 個の開始シンボル、および 2 個の停止シンボルです。各シンボルは、3 本の黒いバーと幅の異なる 3 本の白いスペースで構成されます。すべての幅は、基本「モジュール」の倍数です。各バーとスペースの幅は 1 ~ 4 モジュールで、シンボルの幅は固定です。3 本の黒いバーと 3 本の白いバーの幅の合計は 11 モジュールです。
ストップ パターンは、2 つの重なり合ったシンボルで構成され、4 本のバーがあります。ストップ パターンでは双方向のスキャンが可能です。ストップ パターンを左から右に読み取ると (通常の場合)、ストップ シンボル (その後に 2 モジュール バーが続く) が認識されます。ストップ パターンを右から左に読み取ると、逆ストップ シンボル (その後に 2 モジュール バーが続く) が認識されます。逆ストップ シンボルを確認したスキャナーは、2 モジュール バーをスキップして、バーコードの残りの部分を逆順に読み取る必要があることを認識します。
その名前にもかかわらず、コード 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、制御コード)、特殊文字、FNC 1 ~ 4
- 128B (コードセット B) – ASCII 文字 32 ~ 127 (0 ~ 9、A ~ Z、a ~ z)、特殊文字、FNC 1 ~ 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 個の非区切り記号の 1 つに変換され (以下の手順に従って)、バーコードの停止シンボルの直前に追加されます。
たとえば、次の表では、英数字文字列 PJJ123C のコード 128 バリアント A チェックサム値が計算されています。
したがって、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 になります。
「コード 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 つのシンボルが節約されますが、セットに出入りするためにモード シフト シンボルが必要になります。したがって、連続する数字が十分にある場合にのみ使用する価値があります。たとえば、文字列 "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 の使用は、次の条件の場合にのみ有利です。
文字列の最後では、コードセット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]
参考文献
- ^ 「ISO/IEC 15417:2007 - 情報技術 - 自動識別およびデータキャプチャ技術 - Code 128 バーコードシンボル仕様」。www.iso.org 。 2018年2月15日閲覧。
- ^ 「CODE 128とGS1-128」。バーコード情報とヒント。キーエンス。 2023年11月6日閲覧。
- ^ どうやら ISO 15417 附属書 F
- ^ "TBarcode1D_Code128". Han-soft corporation . 2017-01-21取得。
単一の "FNC 4" 文字が使用されている場合、シンボル内の次のデータ文字が拡張 ASCII 文字であることを示します。 後続のデータ文字の文字サブセットを変更する必要がある場合は、'FNC 4' 文字の後に 'SHIFT' 文字を続けることができます。 後続のデータ文字は、標準の ASCII 文字セットに戻ります。 2 つの連続した 'FNC4' 文字が使用されている場合、さらに 2 つの連続した 'FNC4' 文字が検出されるか、シンボルの末尾に達するまで、後続のすべてのデータ文字は拡張 ASCII 文字です。 この拡張エンコードのシーケンス中に単一の "FNC4" 文字が検出された場合、次のデータ文字のみ標準の ASCII エンコードに戻すために使用されます。 'SHIFT' および文字サブセット文字は、このようなシーケンス中は通常の効果を持ちます。
- ^ 「Code 128 の説明」。Softmatic GmbH。2017年 1 月 21 日取得。
原則として、ドイツ語のウムラウト (例: ÄÖÜ) などの非 ASCII 文字は、特殊文字 (FNC4) を使用して Code 128 シンボルにエンコードできます。ただし、この機能は広くサポートされていません。非 ASCII データ専用のサポートを備えた Aztec や Datamatrix などの 2D バーコード シンボルを使用する方がよい場合があります。
- ^ GS1 一般仕様 (2006 年 1 月 – バージョン 7.0)、セクション 5.3.1.1 GS1-128 シンボル特性には、「ASCII 値が 128 から 255 の文字は、コード 128 シンボルでエンコードすることもできます。機能 4 文字 (FNC4) によってアクセスされる ASCII 値が 128 から 255 の文字は、将来の使用のために予約されており、GS1-128 バーコード シンボルでは使用されません。」と記載されています。
- ^ 「5.4.3.4.2 機能文字」。GS1 一般仕様規格。バージョン 23.0。GS1 AISBL: 287。2023 年 1 月。2023年6 月 28 日閲覧。
- ^ GS1 一般仕様、バージョン 13、第 1 版、2013 年 1 月、セクション 5.4.7.7。スタート、コード セット、およびシフト シンボルを使用したシンボル長の最小化 (参考情報)、268 ~ 269 ページ。このセクションでは、圧縮戦略について説明します。
- ^ Skiena, Steven S. (2010). 「8.9 War Story: バーコードのテキスト圧縮」.アルゴリズム設計マニュアル(第 2 版). Springer. ISBN 978-1-849-96720-4動的プログラミングにより、
平均で 8% より厳密なエンコードが実現しました。
外部リンク
- オンライン Code128 バーコードジェネレーター
- GS1-128 仕様 – アプリケーション識別子の詳細なリスト。
- Barcodesoft – 一般的な ASCII マッピングとは異なる Barcodesoft のフォント マッピング (http://ascii-code.com/ を参照)。
- 128 コード – フォントベースのバーコード ソリューションを使用して、Code 128 エンコーディング アルゴリズムを学習します。
- オンライン バーコード ジェネレーター – さまざまな種類のバーコード用の無料オンライン バーコード ジェネレーター。
- バーコードの種類の概要 - 一般的な 1D および 2D バーコードの種類の概要
- オンライン バーコード ジェネレーター - 無料のオンライン バーコード ジェネレーター、1D および 2D。
サンプルコード
- ZXing – Java バージョン (コア プロジェクト) と ActionScript、C++、C#、ObjectiveC、Ruby へのポートを備えた、マルチプラットフォームのオープン ソース バーコード スキャナー/ジェネレーター。
- Python バーコード 128 – このコードは、1 ピクセル幅のボックスを描画するようです。線を描画する短線長線バーコードから変更されたようです。「黒いボックス」は「白いボックス」と同じサイズである必要があります。
- GenCode128 – Code128 の無料 C# ソース コード実装。ほぼすべての機能が実装されていますが、100% 完了しているわけではありません。
- Barcode1DTools Ruby gem – Code 128 を含む多くの 1D バーコードシンボルの Ruby ソース コード。
- Perl バーコード生成コード – Code 128 を含む多くの 1D バーコードシンボルの Perl ソース コード。
- Barcode::Code128 – 無料の Perl バーコード生成モジュール。
- GOCR – コード 128 認識機能を備えた無料の OCR。
- バーコード コード 128 – Code128 の無料 JavaScript ソース コード実装。
- Barcode4J – Code128 およびその他の標準バーコードを実装した無料の Java API。
- JavaScript Code 128 – Code128 およびその他の線形バーコードのオープンソース JavaScript 実装。
- Code 128 バーコードの作成の紹介 テキストを Code 128 バーコードに変換するためのガイド。Lazarus (オープンソース、マルチプラットフォーム GUI Pascal) 用に書かれていますが、汎用的です。
