ドットコード

ドットコードの例

DotCodeは、 2次元(2D)マトリックスバーコード で、Hand Held Products社が2008年[ 1 ]に旧式のCode 128の代替として発明しました。現時点では、自動識別・モビリティ協会(AIM)によって「ISS DotCode Symbology Specification 4.0」として発行されています。[ 2 ] DotCodeは、白い背景にまばらな黒い丸い点と白いスペースで構成されています。背景が黒い場合は、点は白になります。DotCodeは、印刷精度が低くなる可能性がある高速産業用プリンター[ 3 ]で使用するために開発されました。標準のDotCodeは、連続した線や特殊な形状などの複雑な要素を必要としないため、レーザー彫刻や産業用ドリルで適用できます 。

DotCodeは、各辺の最小サイズが5ドットの長方形配列として表現できます。DotCodeの最大サイズは規格[ 4 ]では制限されていません(Code 128には制限がありません)。しかし、実用的な制限として100x99 [ 2 ]が推奨されており、 これは約730桁、366文字の英数字、または304バイトをエンコードできます。

Code 128バーコードの拡張として、DotCodeは8ビットデータ配列のよりコンパクトなエンコードと、拡張チャネル解釈機能によるUnicodeのサポートを可能にします。さらに、DotCodeはより高いデータ密度とリード・ソロモン誤り訂正機能を備えており、部分的に破損したドットコードを復元できます。しかし、DotCodeの主な実装は、Code 128と同様に、世界中の輸送および梱包業界で使用されているGS1データ[ 5 ]の効率的なエンコードです。

歴史と基準

DotCodeバーコードは、2008年にHand Held Products社のAndrew Longacre博士によって発明され[ 1 ] 、2009年にAIMによって「バーコードシンボル仕様 - DotCode」として標準化されました[ 6 ] 。 [ 7 ] 2019年にDotCodeは「ISS DotCodeシンボル仕様4.0」として見直されました。[ 2 ]

DotCode のエンコードとデコードに関連する一連の特許が登録されています。

  • 米国特許US20090200386A1、Hand Held Products Inc「オンデマンドで印刷可能な機械可読2Dシンボル」[ 1 ]
  • 米国特許US20090200386A1、Datalogic IP Tech SRL「二次元光コードからビットストリームデータを抽出するシステムおよび方法」[ 8 ]
  • 中国特許CN113297872A、福州シンボル情報技術株式会社「ドットコード識別方法および装置」[ 9 ]

応用

DotCodeバーコードは、 Code 128やその他の(2D)マトリックスバーコードと同様に使用できます。現在、主にタバコ業界、[ 10 ] [ 11 ]アルコール飲料およびノンアルコール飲料業界、[ 12 ]医薬品業界、食料品業界におけるGS1データのエンコードに使用されています。現在、主な導入分野はタバコ業界です。[ 13 ] [ 14 ]

DotCodeの主な利点は次のとおりです。[ 15 ]

バーコードのデザイン

DotCodeは、白地に黒の丸い点と白のスペース、または黒地に白の丸い点で構成される長方形構造でデータを表します。DotCodeには他の2Dバーコードのようなファインダーパターンがなく、ガボールフィルタ円ハフ変換などの低速なブロブ検出アルゴリズムで検出する必要があります。すべてのデータ、メタデータ、およびエラー訂正コードワードは、視覚的に違いのない同じドット配列にエンコードされます。

以下は DotCode のサンプルです。

DotCodeシンボル構造

ドットコードシンボルは以下の要素から構成されます: [ 2 ] : 5.1

  • 図上で 2 つの緑色の点として表される 2 つのマスク ビット。
  • 上から下(偶数バーコード側)および左から右(奇数バーコード側)に読み取る必要があるデータ ビット(データおよびエラー訂正ビット)。
  • 図上で赤くマークされているコーナー ポイントは、データ ビットまたはパディング ビット (黒い点) として使用できます。
  • 静かなゾーンはドットの少なくとも 3 倍の大きさです。

DotCodeビット配列は次のように表されます: (2つのマスクビット: M2、M1)(データビット)(コーナービット、データまたはパディングビット: C1 – C6)

0~112の範囲のデータコードワードは、5/9のバイナリドットパターンで符号化されます[ 2 ]:5.2。 これは、5つの黒点と4つの白点からなる9つのドットで符号化されます。バーコードマトリックスの残りの部分(9で割った残りの部分)は、黒のパディングビットで埋められます[ 2 ]:5.2.3。 パディングビットは0~8です。論理的にドットコードのビット配列は、次のように表されます: (2つのマスクビット)(データコードワード各9ビット)(パディングビット0~8ビット)

DotCodeのサイズには以下の要件があります: [ 2 ] : 5.1

  • DotCode の幅と高さの合計は奇数でなければなりません: ;W+Hモッド21{\displaystyle (W+H){\pmod {2}}=1}
  • 各辺の最小サイズは 5 でなければなりませんが、最大サイズに制限はありません。
  • 幅と高さには、少なくとも6つのパディング黒ビットを持たせることが推奨されます。データビットの容量は、9以上の6で割った値で残ります: [ 2 ] : 5.2.1.4 6<=WH/22モッド9{\displaystyle 6<=(((W*H)/2)-2){\pmod {9}}}

データマスキング

DotCodeの問題となるシンボルを最小限に抑えるため、データコードワードはマスクされ、別の視覚的シーケンスが作成されます。マスクパターンはデータシーケンスにのみ適用され、誤り訂正コードワードには影響しません。DotCode規格には4つのマスクパターンがあり、これらは2ビットに符号化され、シンボルビット配列の最初の2ビットに配置されます。[ 2 ] : 5.2.4

DotCodeマスク選択ビット
マスク ビット マスキング操作例:099 099 099 099 099 099 099 106
000各値に0の倍数を連続して加算します。つまり、変化はありません(000) 099 099 099 099 099 099 099 106
101各値に3の倍数を連続して加算し、113を法とする(001) 099 102 105 108 111 001 004 007 017
210各値に7の倍数を連続して加算し、113を法とする(002)099106000007014021028035049
311各値に17の倍数を連続して加算し、113を法とする(003)099003020037054071088105016

エラー訂正

DotCodeは、リード・ソロモン誤り訂正[ 2 ]:5.3を 素数3のべき乗とし、有限体 またはGF(113)を使用します。データコードワードは0から112までの値で表され、マスク値は0から3までの先頭データコードワードとしてカウントされます。このように、データ保護配列の長さは(1 + ND)です。ただし、誤り訂正コードワードの数はND: からのみ計算されます。 ここで、 NDはデータコードワード、NCは誤り訂正コードワードです。 F113{\displaystyle \mathbb {F} _{113}}C3+D/2{\displaystyle NC=3+(ND/2)}

エラー訂正コードワードを含む結果のコードワード NW は次のようになります。 ここで、 NW はすべてエンコード コードワードです。1 つのマスク コードワード + データ コードワード (ND) + エラー訂正コードワード (NC)。 W1+D+C{\displaystyle NW=(1+ND)+NC}

リード・ソロモン誤り訂正では多項式を超える量のコードワードを訂正できないため、NW が 112 を超えると、データは誤り訂正ブロックに分割されます。 ここで、 B はブロック数です。 BW+111/112{\displaystyle B=(NW+111)/112}

データは次のようにブロックに分割できます。各ブロック '''n''' (n は 1 ~ B) は次のようになります。

  1. Dbloc1+Dn1+B1/B{\displaystyle ND(ブロック)=((1+ND)-(n-1)+(B-1))/B}
  2. WblocWn1+B1/B{\displaystyle NW(ブロック)=(NW-(n-1)+(B-1))/B}
  3. CblocWblocDbloc{\displaystyle NC(ブロック)=NW(ブロック)-ND(ブロック)}

スクランブルモードでは、エラー訂正データは単一のデータブロックの後に書き込まれます: [ 16 ] (ND)(NC1_1)(NC2_1)(NC3_1)...(NC1_n)(NC2_m)(NC3_k)C{\displaystyle NC}D{\displaystyle ND}

エンコーディング

DotCodeのエンコーディングサイズは規格によって制限されていませんが、4950ドットを含む100x99バージョンの実用的なエンコーディングサイズでは、366個の生データコードワード、730桁の数字、365個の英数字、つまり304バイトをエンコードできます。DotCodeのデータメッセージは、0から112までのデータコードワードで表現され、5/9のバイナリドットパターンでエンコードされます。

DotCodeは次の機能をサポートしています: [ 2 ] : 5.2.1

  • A、B、C コード セットを使用して数字または ASCII 文字セット (0 ~ 127) をネイティブにエンコードし、大文字シフトを使用して拡張 ASCII 値 (128 ~ 255) をエンコードします。
  • バイナリ ラッチを使用してバイトを効率的にエンコードします (5 バイトを 6 つのコードワードに)。
  • GS1データをエンコードする。[ 5 ]
  • 拡張チャネル解釈機能を使用して Unicode シンボルをエンコードします。
  • 構造化追加エンコーディング(複数のバーコードシンボルを論理的に単一のデータ ストリームとして使用)をサポートします。
  • 「マクロ」エンコーディングをサポートします。
ドットコード文字セット
データシンボル データシンボル
コードワード コードセットA コードセットB コードセットC ドットパターン コードワード コードセットA コードセットB コードセットC ドットパターン
チャー アスキー チャー アスキー チャー アスキー チャー アスキー
0SP32SP320010101010157はい89はい8957110101100
133330101010101158Z90Z9058110110010
234340201010110159[91[9159110110100
3#35#350301011010160\92\9260111001010
4$36$360401101010161]93]9361111010010
5%37%370510101011062^94^9462111010100
638380610101101063_95_9563001011110
7'39'390710110101064ヌル00`9664001101110
840400811010101065SOH011つの9765001110110
941410901010111066STX02b9866001111010
10*42*421001011011067ETX03c9967010011110
11+43+431101011101068終了時刻04d10068010111100
1244441201101011069ENQ05e10169011001110
13-45-451301101101070確認06f10270011011100
1446461401110101071ベル07グラム10371011100110
15/47/471510010101172BS08h10472011101100
160480481610010110173HT0910573011110010
171491491710011010174LF10j10674011110100
182502501810100101175VT1110775100010111
193513511910100110176FF12l10876100011011
204524522010101001177CR13メートル10977100011101
215535532110101100178それで14n11078100100111
226546542210110010179SI15o11179100110011
237557552310110100180DLE16p11280100111001
248568562411001010181DC117q11381101000111
259579572511010010182DC218r11482101100011
26:58:582611010100183DC319s11583101110001
27;59;592700101011184DC420t11684110001011
28<60<602800101101185ナク21あなた11785110001101
2961612900101110186シン22v11886110010011
30>62>623000110101187ETB2311987110011001
31?63?633100110110188できる24×12088110100011
32@64@643200111010189EM25y12189110110001
3365653301001011190サブ26z12290111000101
34B66B663401001101191ESC27{12391111001001
35C67C673501001110192FS28|12492111010001
36D68D683601010011193GS29}12593000101111
37E69E693701011001194RS3012694000110111
38F70F703801011100195私たち31削除12795000111011
39G71G713901100101196シフトBCR/LF13/1096000111101
40H72H724001100110197シフトB×2HT *0997001001111
41737341011010011983倍シフトBFS *2898001100111
42J74J7442011011001994倍シフトBGS *2999001110011
43K75K75430111001011005倍シフトBRS *30(17)...(10)001111001
44L76L76440111010011016倍シフトBシフトAラッチA010001111
45M77M7745100101110102ラッチBラッチAシフトB011000111
467878461001101101032倍シフトC2倍シフトCシフトB×2011100011
477979471001110101043倍シフトC3倍シフトC3倍シフトB011110001
48P80P80481010011101054倍シフトC4倍シフトC4倍シフトB100011110
49質問81質問8149101011100106ラッチCラッチCラッチB100111100
50R82R8250101100110107FNC1FNC1FNC1101111000
51S83S8351101101100108FNC2FNC2FNC2110001110
52T84T8452101110010109FNC3FNC3FNC3110011100
53あなた85あなた8553101110100110上段シフトA上段シフトA上段シフトA110111000
54V86V8654110010110111上段シフトB上段シフトB上段シフトB111000110
55W87W8755110011010112バイナリラッチバイナリラッチバイナリラッチ111001100
56X88X8856110100110* リードデータの位置では、これらは「マクロ」になります

メッセージのエンコーディング開始時には、主に 3 つのルールがあります。

  • デフォルトの開始エンコーディングはコード セット C です。
  • コード セット C の 2 つの数字 (0 ~ 100 の値) が最初のコードワードの位置にエンコードされている場合、メッセージは GS1 メッセージとしてデコードされます。
  • FNC1(コード 128の逆の効果)またはその他の非数字コードワード(101 - 112)が最初のコードワードの位置にエンコードされている場合、メッセージは NON GS1 メッセージとしてデコードされます。

バイナリバイトエンコーディング

DotCodeは2つの方法で完全な8ビット文字セットをエンコードできます: [ 2 ] : 5.2.1.1

  • Upper Shift を使用する場合、1 つのシンボル (128 ~ 255) に 2 つのコードワードが必要です。
  • バイナリ ラッチを使用する場合、5 バイトごとに 1 つのバイナリ ラッチ シンボルと 6 つのコードワードが必要です。

上位シフト モードでは、前のモードに戻りながら、拡張 ASCII 文字 (128 ~ 255) を 2 つのコードワードでエンコードできます。

DotCode大文字シフトエンコード
上段シフトタイプ コードワード アスキー
上段シフトA64から95128から159
上段シフトB0から95160から255

バイナリラッチモードは、8ビット文字セットと1~5シンボルのECIシーケンスをエンコードできます。以下のルールに従います。

  • データは 5 つのシンボル (バイトまたは ECI モード識別子) または 6 つのコードワードのブロックに分割されます。
  • 0 ~ 258 の値は、5 進数 259 から 6 進数 103 の値に基数変換されます。
  • 0~255の値はバイト値です。
  • 256、257、または 258 の値は、それぞれ次の 1、2、または 3 バイトの ECI シーケンスをエンコードするためのマークです。
  • 102 を超えるエンコードされたシーケンス (103 から 112) 内のすべての DotCode コードワードは、モードを中断または変更します。
DotCode バイナリモードの非データコードワード
コードワード 手術
1032倍シフトCの割り込み
1043倍シフトCの割り込み
1054倍シフトCの割り込み
1065倍シフトCの割り込み
1076倍シフトCの割り込み
1087倍シフトCの割り込み
109Aへのラッチで終了
110Bへのラッチで終了
111Cへのラッチで終了
112シンボル分離で終了、Cにラッチ

次の表に示すように、バイナリ ラッチは 3 バイトからデータをより効率的にエンコードします。

DotCodeバイナリモードの効率
バイト数 必要なコードワード ラッチとリターンが必要なコードワード 上位シフトコードワードが必要です
1242
2354
3466
4578
56810

ECIエンコーディング

DotCodeはECIインジケーターを2つの方法でエンコードできます: [ 2 ] : 5.2.1.2

  • バイナリラッチモードの場合(上記参照)。
  • FNC2キャラクター付き。

データの末尾を除く任意の位置にあるFNC2は、ECIシーケンス「\nnnnnn」の挿入を示します。これは000000から811799までの値を表します。値は1つまたは3つのコードワードでエンコードできます。

  • 次のコードワードが 40 未満の場合は、ECI 値 000000 を 000039 に直接エンコードします。
  • それ以外の場合、次の 3 つのコードワード (値 A、B、C) は ECI 値 をエンコードします。4012769+B113+C+40{\displaystyle (A-40)*12769+B*113+C+40}

GS1エンコーディング

最初のコードワードの位置に2桁の数字がある場合、そのシンボルはGS1エンコードされている(Code 128の逆)。最初のコードワードの位置に2桁の数字がある場合、通常のデータとしてデコードする必要がある。その場合、デコードされたメッセージでは省略されるFNC1を最初のコードワードの位置に挿入する必要がある。[ 2 ] : 5.2.1.2 最初の位置以外のFNC1はGS1アプリケーション識別子のスプリッターとして機能し、GS(ASCII値29)文字としてデコードされる。

コードセットCのコードワード100は、アプリケーションGS1 AI (17) [ 5 ]をエンコードします。次の3つのコードワードは有効期限で、他のコードワードをデコードする前にGS1 AI (10) を挿入します: (100)(24)(12)(30)(56)(64) -> 17241230105664

マクロモード

コードセットBの先頭データ位置にあるデータコードワード97~100は、「マクロ」をエンコードすることができます。[ 17 ] [ 2 ]:5.2.1.1 その他の位置では、ASCIIシンボルをエンコードします:( ラッチB)(HT) -> [)>RS05GS … RSEoT (シフトB)(HT) -> [)>RS05GS … RSEoT

DotCodeコードセットBの二重機能コードワード
コードワード 最初のデータ位置 後続のデータ位置
チャー アスキー
97[)>RS05GS ... RSEoTHT09
98[)>RS06GS ... RSEoTFS28
99[)>RS12GS ... RSEoTGS29
100[)>RSxx ... EoTで、2桁の数字「xx」は00から99までの値です。RS30
1. これらの「マクロ」拡張には、データのヘッダーとトレーラーの両方が含まれます。2 . 最初のデータ位置にHT、FS、GS、またはRSをエンコードするには、コードセットAを使用します。3. コードワード100のマクロ拡張では、ヘッダーからGS、トレーラーからRSが意図的に省略されています。これは、これらの値が「xx」の値によっては正しくない可能性があるためです。ただし、必要に応じてGSまたはRSをエンコードすることは可能です。

構造化された追加

DotCodeは複合シンボルを作成できます。複合シンボルでは、複数のDotCodeシンボルのデータを論理的に結合できます。これは、最後のデータ位置にFNC2シンボルを配置することで実現できます。FNC2が最後のデータ位置にある場合、[ 2 ] : 5.2.1.2 の とおり、先行する2つのメッセージ文字(1から9の順序で数字と大文字、次にAからZ(値が10から35の場合))は、「m」と「n」として、このメッセージが「m of n」シーケンスのどこに属するかを示します。例えば、メッセージが「4 B FNC2」で終わるシンボルは、メッセージ全体を構成する11個のシンボルのうち4番目のシンボルとなります。

特殊モードエンコーディング

最初のコードワード位置のFNC3は、メッセージ[ 2 ]:5.2.1.2 がバーコードリーダーの初期化または再プログラミングの指示であることを示します。

FNC3 が最初以外の位置にある場合、エンコードされたメッセージは論理的に 2 つの異なるメッセージ (その前と後) に分割される必要があることを示します。

データパディング

DotCode シンボルのコードワード容量は次のとおりです。 WHW/22モッド9{\displaystyle NW=((H*W)/2-2){\pmod {9}})}

DotCode シンボルデータ コードワードの容量は次のとおりです。 DW3W3/3{\displaystyle ND=(NW-3)-(NW-3)/3}

このように、空きスペースがある場合にはデータコードワードをパディングする必要があります。これには2つのルールがあります。[ 2 ]:5.2.3

  • バイナリ モードは、コード セット A (コードワード 109) へのラッチで終了する必要があります。
  • 他のモードでは、コードワード 106 (コード セット C へのラッチ / コード セット B へのラッチ) を使用する必要があります。

参照

参考文献

  1. ^ a b c Andrew Longacre, Jr. (2008年2月13日). 「Hand Held Products Inc.による米国特許US20090200386A1「オンデマンドで印刷可能な機械可読2Dシンボル」」" . patents.google.com . 米国特許商標庁. US20090200386A1.
  2. ^ a b c d e f g h i j k l m n o p q r「ISS DotCodeシンボル仕様4.0」。aimglobal.org。AIM Global
  3. ^ 「バーコードガイド:ドットコード」。barcodeguide.seagullscientific.com
  4. ^ 「2Dコードの説明:DotCodeにはどのくらいのデータを保存できますか?」 www.domino-printing.com 2024年2月28日。
  5. ^ a b c 「GS1アプリケーション識別子」。www.gs1.org
  6. ^ 「バーコード技術:マトリックス2Dシンボル体系」aimglobal.org。 2011年11月5日時点のオリジナルよりアーカイブ
  7. ^ 「情報技術 - 自動識別およびデータキャプチャ技術 - バーコードシンボル仕様 - DotCode」 . aimglobal.org . AIM Global. 2011年10月16日時点のオリジナルよりアーカイブ。
  8. ^ Enrico Campaioli (2019年5月2日). 「米国特許US20090200386A1、Datalogic IP Tech SRL「二次元光コードからビットストリームデータを抽出するシステムおよび方法」」" . patents.google.com . 米国特許商標庁. US20190130236A1.
  9. ^ 「福州シンボル情報技術有限公司による中国特許CN113297872A「ドットコード識別方法および装置」」" . patents.google.com . 中国国家知識産権局. 2021年8月24日. CN113297872A.
  10. ^ 「GS1 DotCode影響評価」(PDF) inexto.com 2017年5月16日.
  11. ^ 「すべてのCILICOモバイルコンピュータはタバコのドットコードを読み取ります。linkedin.com
  12. ^ 「改訂版2Dバーコードは飲料、流通、電子商取引市場に可能性をもたらすwww.packagingdigest.com
  13. ^ 「GS1 FAQ: GS1 DotCode はどこで使用されていますか?」 . gs1.org .
  14. ^ 「タバコ製品のトレーサビリティシステムの構築および運用に関する技術基準に関する規則(EU)2018/574」 eur-lex.europa.eu 2017年12月15日。
  15. ^ 「C# で DotCode バーコードを生成する。www.aspose.com
  16. ^ 「オープンソースバーコードライブラリZint:CのDotCodeエンコーダ。github.com
  17. ^ ISO/IEC (2019). 「ISO/IEC 15434:2019 「情報技術 自動識別およびデータキャプチャ技術 大容量ADC媒体の構文」" . iso.org . 国際標準化機構(ISO). ISO/IEC 15434.