Data Matrix(データマトリックス)は、マトリックス、また、日本ではデータコード(Data Code)ともいい、正方形または長方形のパターンで配置された白黒の「セル」またはドットで構成される二次元コードである。アメリカ合衆国を中心に普及している。

## 概要

テキストまたは数値データをエンコードできる。通常、数バイトから1556バイトまでのデータサイズの情報が記録でき、最大2,335 文字の英数字を保存できる。エンコードされたデータの長さは、マトリックス内のセル数に依存する。信頼性を高めるため、誤り訂正符号がよく使用され、1つまたは複数のセルが破損して読み取り不能になった場合でも、情報を読み取ることができる。

データマトリックスシンボルは長方形で、通常は正方形で、 ビットを表す正方形の「セル」で構成される。使用するコーディングに応じて、白のセルは0を表し、黒のセルは1を表す。逆も同様である。すべてのデータマトリックスは、L字型の2つの隣接する実線の境界線(ファインダパターン)と、明暗の交互の「セル」またはモジュールで構成される他の2つの境界線(タイミングパターン)で構成される。これらの境界内に、情報をエンコードするセルの行と列が存在する。

ファインダパターンは、位置検出パターンともいい、シンボルの位置を特定するために使用され、タイミングパターンは、シンボルの行と列の数を表す。より多くのデータがシンボルにエンコードされると、セル(行と列)の数が増加し、複雑になる。

サイズは、旧規格のData Matrix ECC 000 – 140では9×9から49×49、新規格Data Matrix ECC 200では10×10から144×144、と定められている。

## 用途

データマトリックスは、2または3 mmの大きさで、読み取り可能な50文字のテキストをエンコードできるが、コントラスト比20%でしか読み取れないために、小さく記載されている。

300マイクロメートルのもの(600マイクロメートルの集積回路にレーザーエッチングしたもの)から、1メートル(3フィート)の正方形(アメリカの貨物列車の有蓋車の屋根に塗装したもの)までの幅広い大きさのものが存在し、データマトリックスにはスケーラビリティが見込まれる技術とされている。

また、アメリカ電子工業会(EIA)は小さな電子部品のラベル付けにデータマトリックスの使用を推奨しており 、パソコンでもデータマトリックスが記載された部品がよく使用されている。

アメリカでは、手紙など郵便物のラベルといった印刷メディアで広く扱われている。コードはバーコードリーダーですばやく読み取ることが可能。バーコードリーダーを使用し、たとえば小包が受取人に発送されたときにメディアを追跡できる。

データマトリックスは産業工学の分野でも活用され、電子部品などコンポーネントに直接記載し、データマトリックスによって目的のコンポーネントを識別することができる。コードは様々な方法でマーキングでき、航空宇宙産業では、これらは一般に工業用インクジェット、ドットピーンマーキング(刻印、打刻)、レーザーマーキング、エレクトロケミカルエッチング(ECE)による。これらの方法により、コンポーネントの寿命まで消えないよう記載されている。

データマトリックスコードは通常、専門のカメラ機器とソフトウェアを使用して検証される。この検証により、コードが関連する規格に準拠していること、およびコンポーネントの有効期間中の可読性が確保される。コンポーネントがサービスを開始した後、データマトリックスコードはリーダーカメラによって読み取られ、データをデコードし、移動追跡や在庫在庫チェックなどのさまざまな目的に使用できる。

データマトリックスコードは、携帯電話でも二次元コードなどの他のオープンソースコードと同様、コード固有のモバイルアプリケーション(いわゆる「コードリーダー」)をダウンロード、インストールすることにより、読み取ることができる。多くのモバイルデバイスは、データマトリックスコードを含む二次元コードを読み取ることができるが、デコードを拡張する機能はほとんどなく、安全に追跡、偽造防止、電子政府、銀行のオンラインシステムなどのサービスで使用できる。

データマトリックスコードは、食品業界では自動包装システムで使用され、食品が誤って包装されたり、日付が付けられないようにする。コードは、食品製造業者のデータベースで管理され、原材料の種類など、各製品に関連付けられている。製品の包装を実行するたびに、コードがプリンターに提供される。最適なスキャンのために2Dデータマトリックスを配置するには、多種類のラベルアートワークが必要となる。白地に黒のコードでは、印刷品質が問題にならない限りテストは必要ないが、読みやすくするために、生産前にすべてのカラーバリエーションをテストする必要がある。

2006年5月、ドイツのコンピュータープログラマーであるベルンハルト・ホップフェンゲルターは、ミステリーサークルに似た方法で、麦畑に大規模なデータマトリックスを作成した。メッセージには「Hello、World!」と表示されていた。2011年6月、パリのタトゥーアーティストKARLは、スコッチウイスキーのブランドであるバランタインのプロモーション活動の一環としてコラボレーションし、 Facebookでライブストリーミングされた、世界初のデータマトリックスを利用したアニメーションを作成した。

日本でも見られるデータマトリックスの例に、「FINAマーク」がある。これは、国際水泳連盟(FINA)が認定した水着に付けられるマークで、公式大会にはこのマークのある水着でないと選手は出場できないことになっている。

## 技術仕様

データマトリックスシンボルは、境界ファインダーとタイミングパターン内に配置されたモジュールで構成される。ASCII文字コード全体(拡張子付き)から最大3,116文字をエンコードできる。シンボルは、通常の配列で設定されたモジュールを含むデータ領域で構成されて、大きなシンボルにはいくつかの領域が含まれる。各データ領域はファインダーパターンで区切られ、4辺すべてがクワイエットゾーンの境界(マージン)で囲まれている。

なお、モジュールは円形または正方形の場合があり、標準では特定の形状は定義されていない。たとえば、ドットでピーニングされたセルは通常円形。

### Data Matrix ECC 200

Data Matrixの新しい規格であるECC 200は、エラーと消去の回復にリード・ソロモン符号を使用する。ECC 200では、シンボルが30%の損傷を受けた場合に、マトリックスがまだ正確に配置されていると仮定して、エンコードされたデータ文字列全体を再構築できる。Data Matrixのエラー率は、スキャンされた1,000万文字に1未満。

シンボルには、偶数の行と偶数の列がある。ほとんどのシンボルのサイズは、10×10から144×144の正方形。ただし、一部のシンボルは、8×18から16×48(偶数のみ)の長方形。ECC 200エラー訂正を使用するすべてのシンボルは、右上隅のモジュールが背景色と同じであることで認識できる(バイナリ0)。

ECC 200シンボルを以前の規格と区別する追加機能には、次のものがある。

Additional capabilities that differentiate ECC 200 symbols from the earlier standards include:

- 逆読み記号(暗い背景の明るい画像)
- 文字セットの仕様(拡張チャネル解釈)
- 長方形記号
- 構造化された追加記号(最大16個のシンボルをリンク、より大量のデータをエンコード可能)

### Data Matrix ECC 000–140

Data Matrixの古い規格には、ECC 000、ECC 050、ECC 080、ECC 100、ECC 140が含まれる。ECC 200などのリード・ソロモン符号を使用する代わりに、ECC 000–140は畳み込みベースのエラー修正を使用します。それぞれが提供するエラー訂正の量は異なるが、ECC 000では提供されず、ECC 140は最大量が提供されている。デコード時のエラー検出のために、ECC 000の場合でも、これらの各バージョンは巡回冗長検査(CRC)もエンコードする。追加の手段として、コード内の各ビットの配置は、仕様に含まれるビット配置テーブルによって決定される。これらの古いバージョンには常に奇数のモジュールがあり、9×9から49×49の範囲のサイズで作成できる。ECC 000-140のエラー訂正を利用するすべてのシンボルは、背景色と逆の右上隅のモジュールで認識できる(バイナリ1)。

ISO / IEC 16022によると、ECC 000–140は、単一の当事者がシンボルの生成と読み取りの両方を制御し、システム全体のパフォーマンスを担当するクローズドアプリケーションでのみ使用する必要がある。

## 標準規格

データマトリックスの特許は、米インターナショナル・データマトリックス社(ID Matrix)によって1987年に発明され、米オートマチックス社に買収された後、2005年10月に独シーメンス、2008年9月には米マイクロスキャン システムズ社が取得。現在は、ISO / IEC標準規格であり、多くの用途でパブリックドメインにあり、ライセンスや使用料なしで使用できる。

- ISO/IEC 16022:2006 — データマトリックスバーコード記号仕様
- ISO/IEC 15415 — 二次元印刷品質指標
- ISO/IEC 15418:2009 — シンボルデータ形式のセマンティクス(GS1アプリケーション識別子とASC MH10データ識別子とメンテナンス)
- ISO/IEC 15424:2008 - データキャリア識別子(シンボル識別子を含む異なるバーコードタイプを区別するためのID)
- ISO/IEC 15434:2006 — 大容量ADCメディアのk構成(スキャナーからソフトウェアに転送されるデータのフォーマットなど)
- ISO/IEC 15459 — 特殊な識別子

## エンコード

エンコードプロセスについては、ISO(国際標準化機構)のWebサイトで公開されている。また、Data MatrixのECC-200バリアントをエンコードおよびデコードするためのオープンソースソフトウェアも公開されている。

以下の図は、データマトリックスシンボル内のメッセージデータの配置を示している。メッセージは「Wikipedia」であり、左上隅から始まるやや複雑な斜めのパターンで配置されている。最初のWなど、一部の文字は2つに分割され、3番目の「i」は通常のL字型の配置ではなく「コーナーパターン2」になっている。また、メッセージの終わりコード(終了マーク)、パディング(P)およびエラー修正(E)バイト、および4つの未使用スペース(X)モジュールも示されている。

複数のエンコードモードを使用し、様々な種類のメッセージを保存できる。デフォルトモードでは、8ビットコードワードごとに1つのASCII文字が保存される。
また、以下に示すように、モードを切り替えるための制御コードが提供されている。

| コード | 解釈 |
| --- | --- |
| 0 | (使用なし) |
| 1–128 | ASCIIデータ(ASCII値+ 1) |
| 129 | メッセージの終わり |
| 130–229 | 00〜99までの桁のペア |
| 230 | C40エンコードを開始 |
| 231 | Base 256エンコードを開始 |
| 232 | FNC1 |
| 233 | 構造化された追加記号。メッセージを複数のシンボルに分割可能 |
| 234 | リーダープログラミング |
| 235 | 次の文字の上位ビットを設定 |
| 236 | 05 マクロ |
| 237 | 06 マクロ |
| 238 | ANSI X12エンコードを開始 |
| 239 | テキストのエンコードを開始 |
| 240 | EDIFACTエンコードを開始 |
| 241 | 拡張チャネル解釈コード |
| 242–255 | (使用なし) |

### テキストモード

C40、Text、およびX12モードは、テキストメッセージを保存するためにコンパクトな構造となっている。0〜39の範囲の文字コードを使用するDEC Radix-50に似ており、これらのコードのうち3つを組み合わせて最大400=64000の数値を作成し、次のように2バイトまで(最大値65536)に圧縮する。

B1の結果の値は0〜249の範囲。ASCIIエンコードモードに戻すには、特別な値である254が使用される。

文字コードの解釈を次の表に示す。C40モードとテキストモードには、4つの個別のセットがある。セット0はデフォルトであり、次の文字に別のセットを一時的に選択するコードが含まれている。唯一の違いは、大文字と小文字を逆にすることである。C40は主に大文字で、セット3に小文字が含まれています。テキストはその逆となる。ASCII制御コードを含むセット1、および句読点記号を含むセット2は、C40モードとテキストモードで同一。

| コード | set 0 | | set 1 | set 2 | set 3 | | X12 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| C40 | Text | C40 | Text |
| 0 | set 1 | | NUL | ! | ` | | CR |
| 1 | set 2 | | SOH | " | a | A | \* |
| 2 | set 3 | | STX | # | b | B | > |
| 3 | space | | ETX | $ | c | C | space |
| 4 | 0 | | EOT | % | d | D | 0 |
| 5 | 1 | | ENQ | & | e | E | 1 |
| 6 | 2 | | ACK | ' | f | F | 2 |
| 7 | 3 | | BEL | ( | g | G | 3 |
| 8 | 4 | | BS | ) | h | H | 4 |
| 9 | 5 | | HT | \* | i | I | 5 |
| 10 | 6 | | LF | + | j | J | 6 |
| 11 | 7 | | VT | , | k | K | 7 |
| 12 | 8 | | FF | – | l | L | 8 |
| 13 | 9 | | CR | . | m | M | 9 |
| 14 | A | a | SO | / | n | N | A |
| 15 | B | b | SI | : | o | O | B |
| 16 | C | c | DLE | ; | p | P | C |
| 17 | D | d | DC1 | < | q | Q | D |
| 18 | E | e | DC2 | = | r | R | E |
| 19 | F | f | DC3 | > | s | S | F |
| 20 | G | g | DC4 | ? | t | T | G |
| 21 | H | h | NAK | @ | u | U | H |
| 22 | I | i | SYN | [ | v | V | I |
| 23 | J | j | ETB | \ | w | W | J |
| 24 | K | k | CAN | ] | x | X | K |
| 25 | L | l | EM | ^ | y | Y | L |
| 26 | M | m | SUB | \_ | z | Z | M |
| 27 | N | n | ESC | FNC1 | { | | N |
| 28 | O | o | FS |  | | | | O |
| 29 | P | p | GS | } | | P |
| 30 | Q | q | RS | hibit | ~ | | Q |
| 31 | R | r | US |  | DEL | | R |
| 32 | S | s |  |  | | S |
| 33 | T | t | T |
| 34 | U | u | U |
| 35 | V | v | V |
| 36 | W | w | W |
| 37 | X | x | X |
| 38 | Y | y | Y |
| 39 | Z | z | Z |

### EDIFACT モード

EDIFACTモードでは、1文字あたり6ビットを使用し、4文字を3バイトに圧縮する。数字、大文字、および多くの句読点を格納できるが、小文字はサポートされていない。

| コード | 意味 |
| --- | --- |
| 0–30 | ASCIIコード64〜94 |
| 31 | ASCIIモードに戻る |
| 32–63 | ASCIIコード32–63 |

### ベース 256 モード

ベース256モードのデータは、長さのインジケータで始まり、その後に多数のデータバイトが続く。1〜249の長さは1バイトとしてエンコードされ、それより長い長さは2バイトとして保存される。

コード化されたメッセージ内の0の長い文字列は、データマトリックスシンボル内の大きな空白領域になり、スキャナーの同期が失われる可能性があるため、避けられる。そのため、デフォルトのASCIIエンコードでは0を使用しない。その可能性を低くするために、疑似乱数値R(n)を追加することで長さとデータバイトを隠す(nはバイトストリーム内の位置)。