
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 のエンコードとデコードに関連する一連の特許が登録されています。
DotCodeバーコードは、 Code 128やその他の(2D)マトリックスバーコードと同様に使用できます。現在、主にタバコ業界、[ 10 ] [ 11 ]アルコール飲料およびノンアルコール飲料業界、[ 12 ]医薬品業界、食料品業界におけるGS1データのエンコードに使用されています。現在、主な導入分野はタバコ業界です。[ 13 ] [ 14 ]
DotCodeの主な利点は次のとおりです。[ 15 ]
DotCodeは、白地に黒の丸い点と白のスペース、または黒地に白の丸い点で構成される長方形構造でデータを表します。DotCodeには他の2Dバーコードのようなファインダーパターンがなく、ガボールフィルタや円ハフ変換などの低速なブロブ検出アルゴリズムで検出する必要があります。すべてのデータ、メタデータ、およびエラー訂正コードワードは、視覚的に違いのない同じドット配列にエンコードされます。
以下は DotCode のサンプルです。

ドットコードシンボルは以下の要素から構成されます: [ 2 ] : 5.1
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の問題となるシンボルを最小限に抑えるため、データコードワードはマスクされ、別の視覚的シーケンスが作成されます。マスクパターンはデータシーケンスにのみ適用され、誤り訂正コードワードには影響しません。DotCode規格には4つのマスクパターンがあり、これらは2ビットに符号化され、シンボルビット配列の最初の2ビットに配置されます。[ 2 ] : 5.2.4
| マスク | ビット | マスキング操作例:099 099 099 099 099 099 099 106 |
|---|---|---|
| 0 | 00 | 各値に0の倍数を連続して加算します。つまり、変化はありません(000) 099 099 099 099 099 099 099 106 |
| 1 | 01 | 各値に3の倍数を連続して加算し、113を法とする(001) 099 102 105 108 111 001 004 007 017 |
| 2 | 10 | 各値に7の倍数を連続して加算し、113を法とする(002)099106000007014021028035049 |
| 3 | 11 | 各値に17の倍数を連続して加算し、113を法とする(003)099003020037054071088105016 |
DotCodeは、リード・ソロモン誤り訂正[ 2 ]:5.3を 素数3のべき乗とし、有限体 またはGF(113)を使用します。データコードワードは0から112までの値で表され、マスク値は0から3までの先頭データコードワードとしてカウントされます。このように、データ保護配列の長さは(1 + ND)です。ただし、誤り訂正コードワードの数はND: からのみ計算されます。 ここで、 NDはデータコードワード、NCは誤り訂正コードワードです。
エラー訂正コードワードを含む結果のコードワード NW は次のようになります。 ここで、 NW はすべてエンコード コードワードです。1 つのマスク コードワード + データ コードワード (ND) + エラー訂正コードワード (NC)。
リード・ソロモン誤り訂正では多項式を超える量のコードワードを訂正できないため、NW が 112 を超えると、データは誤り訂正ブロックに分割されます。 ここで、 B はブロック数です。
データは次のようにブロックに分割できます。各ブロック '''n''' (n は 1 ~ B) は次のようになります。
スクランブルモードでは、エラー訂正データは単一のデータブロックの後に書き込まれます: [ 16 ] (ND)(NC1_1)(NC2_1)(NC3_1)...(NC1_n)(NC2_m)(NC3_k)
DotCodeのエンコーディングサイズは規格によって制限されていませんが、4950ドットを含む100x99バージョンの実用的なエンコーディングサイズでは、366個の生データコードワード、730桁の数字、365個の英数字、つまり304バイトをエンコードできます。DotCodeのデータメッセージは、0から112までのデータコードワードで表現され、5/9のバイナリドットパターンでエンコードされます。
DotCodeは次の機能をサポートしています: [ 2 ] : 5.2.1
| データシンボル | データシンボル | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| コードワード | コードセットA | コードセットB | コードセットC | ドットパターン | コードワード | コードセットA | コードセットB | コードセットC | ドットパターン | ||||
| チャー | アスキー | チャー | アスキー | チャー | アスキー | チャー | アスキー | ||||||
| 0 | SP | 32 | SP | 32 | 00 | 101010101 | 57 | はい | 89 | はい | 89 | 57 | 110101100 |
| 1 | ! | 33 | ! | 33 | 01 | 010101011 | 58 | Z | 90 | Z | 90 | 58 | 110110010 |
| 2 | 「 | 34 | 「 | 34 | 02 | 010101101 | 59 | [ | 91 | [ | 91 | 59 | 110110100 |
| 3 | # | 35 | # | 35 | 03 | 010110101 | 60 | \ | 92 | \ | 92 | 60 | 111001010 |
| 4 | $ | 36 | $ | 36 | 04 | 011010101 | 61 | ] | 93 | ] | 93 | 61 | 111010010 |
| 5 | % | 37 | % | 37 | 05 | 101010110 | 62 | ^ | 94 | ^ | 94 | 62 | 111010100 |
| 6 | & | 38 | & | 38 | 06 | 101011010 | 63 | _ | 95 | _ | 95 | 63 | 001011110 |
| 7 | ' | 39 | ' | 39 | 07 | 101101010 | 64 | ヌル | 00 | ` | 96 | 64 | 001101110 |
| 8 | ( | 40 | ( | 40 | 08 | 110101010 | 65 | SOH | 01 | 1つの | 97 | 65 | 001110110 |
| 9 | ) | 41 | ) | 41 | 09 | 010101110 | 66 | STX | 02 | b | 98 | 66 | 001111010 |
| 10 | * | 42 | * | 42 | 10 | 010110110 | 67 | ETX | 03 | c | 99 | 67 | 010011110 |
| 11 | + | 43 | + | 43 | 11 | 010111010 | 68 | 終了時刻 | 04 | d | 100 | 68 | 010111100 |
| 12 | 、 | 44 | 、 | 44 | 12 | 011010110 | 69 | ENQ | 05 | e | 101 | 69 | 011001110 |
| 13 | - | 45 | - | 45 | 13 | 011011010 | 70 | 確認 | 06 | f | 102 | 70 | 011011100 |
| 14 | 。 | 46 | 。 | 46 | 14 | 011101010 | 71 | ベル | 07 | グラム | 103 | 71 | 011100110 |
| 15 | / | 47 | / | 47 | 15 | 100101011 | 72 | BS | 08 | h | 104 | 72 | 011101100 |
| 16 | 0 | 48 | 0 | 48 | 16 | 100101101 | 73 | HT | 09 | 私 | 105 | 73 | 011110010 |
| 17 | 1 | 49 | 1 | 49 | 17 | 100110101 | 74 | LF | 10 | j | 106 | 74 | 011110100 |
| 18 | 2 | 50 | 2 | 50 | 18 | 101001011 | 75 | VT | 11 | け | 107 | 75 | 100010111 |
| 19 | 3 | 51 | 3 | 51 | 19 | 101001101 | 76 | FF | 12 | l | 108 | 76 | 100011011 |
| 20 | 4 | 52 | 4 | 52 | 20 | 101010011 | 77 | CR | 13 | メートル | 109 | 77 | 100011101 |
| 21 | 5 | 53 | 5 | 53 | 21 | 101011001 | 78 | それで | 14 | n | 110 | 78 | 100100111 |
| 22 | 6 | 54 | 6 | 54 | 22 | 101100101 | 79 | SI | 15 | o | 111 | 79 | 100110011 |
| 23 | 7 | 55 | 7 | 55 | 23 | 101101001 | 80 | DLE | 16 | p | 112 | 80 | 100111001 |
| 24 | 8 | 56 | 8 | 56 | 24 | 110010101 | 81 | DC1 | 17 | q | 113 | 81 | 101000111 |
| 25 | 9 | 57 | 9 | 57 | 25 | 110100101 | 82 | DC2 | 18 | r | 114 | 82 | 101100011 |
| 26 | : | 58 | : | 58 | 26 | 110101001 | 83 | DC3 | 19 | s | 115 | 83 | 101110001 |
| 27 | ; | 59 | ; | 59 | 27 | 001010111 | 84 | DC4 | 20 | t | 116 | 84 | 110001011 |
| 28 | < | 60 | < | 60 | 28 | 001011011 | 85 | ナク | 21 | あなた | 117 | 85 | 110001101 |
| 29 | = | 61 | = | 61 | 29 | 001011101 | 86 | シン | 22 | v | 118 | 86 | 110010011 |
| 30 | > | 62 | > | 62 | 30 | 001101011 | 87 | ETB | 23 | わ | 119 | 87 | 110011001 |
| 31 | ? | 63 | ? | 63 | 31 | 001101101 | 88 | できる | 24 | × | 120 | 88 | 110100011 |
| 32 | @ | 64 | @ | 64 | 32 | 001110101 | 89 | EM | 25 | y | 121 | 89 | 110110001 |
| 33 | あ | 65 | あ | 65 | 33 | 010010111 | 90 | サブ | 26 | z | 122 | 90 | 111000101 |
| 34 | B | 66 | B | 66 | 34 | 010011011 | 91 | ESC | 27 | { | 123 | 91 | 111001001 |
| 35 | C | 67 | C | 67 | 35 | 010011101 | 92 | FS | 28 | | | 124 | 92 | 111010001 |
| 36 | D | 68 | D | 68 | 36 | 010100111 | 93 | GS | 29 | } | 125 | 93 | 000101111 |
| 37 | E | 69 | E | 69 | 37 | 010110011 | 94 | RS | 30 | 〜 | 126 | 94 | 000110111 |
| 38 | F | 70 | F | 70 | 38 | 010111001 | 95 | 私たち | 31 | 削除 | 127 | 95 | 000111011 |
| 39 | G | 71 | G | 71 | 39 | 011001011 | 96 | シフトB | CR/LF | 13/10 | 96 | 000111101 | |
| 40 | H | 72 | H | 72 | 40 | 011001101 | 97 | シフトB×2 | HT * | 09 | 97 | 001001111 | |
| 41 | 私 | 73 | 私 | 73 | 41 | 011010011 | 98 | 3倍シフトB | FS * | 28 | 98 | 001100111 | |
| 42 | J | 74 | J | 74 | 42 | 011011001 | 99 | 4倍シフトB | GS * | 29 | 99 | 001110011 | |
| 43 | K | 75 | K | 75 | 43 | 011100101 | 100 | 5倍シフトB | RS * | 30 | (17)...(10) | 001111001 | |
| 44 | L | 76 | L | 76 | 44 | 011101001 | 101 | 6倍シフトB | シフトA | ラッチA | 010001111 | ||
| 45 | M | 77 | M | 77 | 45 | 100101110 | 102 | ラッチB | ラッチA | シフトB | 011000111 | ||
| 46 | 北 | 78 | 北 | 78 | 46 | 100110110 | 103 | 2倍シフトC | 2倍シフトC | シフトB×2 | 011100011 | ||
| 47 | お | 79 | お | 79 | 47 | 100111010 | 104 | 3倍シフトC | 3倍シフトC | 3倍シフトB | 011110001 | ||
| 48 | P | 80 | P | 80 | 48 | 101001110 | 105 | 4倍シフトC | 4倍シフトC | 4倍シフトB | 100011110 | ||
| 49 | 質問 | 81 | 質問 | 81 | 49 | 101011100 | 106 | ラッチC | ラッチC | ラッチB | 100111100 | ||
| 50 | R | 82 | R | 82 | 50 | 101100110 | 107 | FNC1 | FNC1 | FNC1 | 101111000 | ||
| 51 | S | 83 | S | 83 | 51 | 101101100 | 108 | FNC2 | FNC2 | FNC2 | 110001110 | ||
| 52 | T | 84 | T | 84 | 52 | 101110010 | 109 | FNC3 | FNC3 | FNC3 | 110011100 | ||
| 53 | あなた | 85 | あなた | 85 | 53 | 101110100 | 110 | 上段シフトA | 上段シフトA | 上段シフトA | 110111000 | ||
| 54 | V | 86 | V | 86 | 54 | 110010110 | 111 | 上段シフトB | 上段シフトB | 上段シフトB | 111000110 | ||
| 55 | W | 87 | W | 87 | 55 | 110011010 | 112 | バイナリラッチ | バイナリラッチ | バイナリラッチ | 111001100 | ||
| 56 | X | 88 | X | 88 | 56 | 110100110 | * リードデータの位置では、これらは「マクロ」になります | ||||||
メッセージのエンコーディング開始時には、主に 3 つのルールがあります。
DotCodeは2つの方法で完全な8ビット文字セットをエンコードできます: [ 2 ] : 5.2.1.1
上位シフト モードでは、前のモードに戻りながら、拡張 ASCII 文字 (128 ~ 255) を 2 つのコードワードでエンコードできます。
| 上段シフトタイプ | コードワード | アスキー |
|---|---|---|
| 上段シフトA | 64から95 | 128から159 |
| 上段シフトB | 0から95 | 160から255 |
バイナリラッチモードは、8ビット文字セットと1~5シンボルのECIシーケンスをエンコードできます。以下のルールに従います。
| コードワード | 手術 |
|---|---|
| 103 | 2倍シフトCの割り込み |
| 104 | 3倍シフトCの割り込み |
| 105 | 4倍シフトCの割り込み |
| 106 | 5倍シフトCの割り込み |
| 107 | 6倍シフトCの割り込み |
| 108 | 7倍シフトCの割り込み |
| 109 | Aへのラッチで終了 |
| 110 | Bへのラッチで終了 |
| 111 | Cへのラッチで終了 |
| 112 | シンボル分離で終了、Cにラッチ |
次の表に示すように、バイナリ ラッチは 3 バイトからデータをより効率的にエンコードします。
| バイト数 | 必要なコードワード | ラッチとリターンが必要なコードワード | 上位シフトコードワードが必要です |
|---|---|---|---|
| 1 | 2 | 4 | 2 |
| 2 | 3 | 5 | 4 |
| 3 | 4 | 6 | 6 |
| 4 | 5 | 7 | 8 |
| 5 | 6 | 8 | 10 |
DotCodeはECIインジケーターを2つの方法でエンコードできます: [ 2 ] : 5.2.1.2
データの末尾を除く任意の位置にあるFNC2は、ECIシーケンス「\nnnnnn」の挿入を示します。これは000000から811799までの値を表します。値は1つまたは3つのコードワードでエンコードできます。
最初のコードワードの位置に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
| コードワード | 最初のデータ位置 | 後続のデータ位置 | |
|---|---|---|---|
| チャー | アスキー | ||
| 97 | [)>RS05GS ... RSEoT | HT | 09 |
| 98 | [)>RS06GS ... RSEoT | FS | 28 |
| 99 | [)>RS12GS ... RSEoT | GS | 29 |
| 100 | [)>RSxx ... EoTで、2桁の数字「xx」は00から99までの値です。 | RS | 30 |
| 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 シンボルのコードワード容量は次のとおりです。
DotCode シンボルデータ コードワードの容量は次のとおりです。
このように、空きスペースがある場合にはデータコードワードをパディングする必要があります。これには2つのルールがあります。[ 2 ]:5.2.3