アステカの法典

エンコーディング: 「これは、Wikipedia の Aztec シンボルの例です。」

アズテックコードは、アンドリュー・ロングエーカー・ジュニアとロバート・ハッセーによって1995年に発明されたマトリックスコードです。[ 1 ]このコードは1997年にAIM社によって公開されました。アズテックコードは特許を取得していましたが、その特許は正式にパブリックドメインとなりました。[ 2 ]アズテックコードはISO/IEC 24778:2024規格としても公開されています。中央のファインダーパターンがアステカのピラミッドに似ていることから名付けられたアズテックコードは、周囲の空白の「クワイエットゾーン」を必要としないため、他のマトリックスバーコードよりも省スペース化が可能です。

構造

シンボルは、コードの位置を示す中心に的を絞った模様を持つ正方格子上に構築されています。データは的を絞った模様の周囲に同心円状の正方形リングとして符号化されます。中心の的は9×9または13×13ピクセルで、その周囲の1列のピクセルは基本的な符号化パラメータを符号化し、11×11または15×15の正方形からなる「コア」を形成します。データは「レイヤー」単位で追加され、各レイヤーには2つのピクセルリングが含まれており、合計サイズは15×15、19×19、23×23などとなります。

コアの角には方向マークが刻まれており、コードを回転させたり反転させたりしても読み取ることができます。デコードは3つの黒ピクセルを持つ角から始まり、時計回りに2つ、1つ、0つの黒ピクセルを持つ角へと進みます。中央のコアの可変ピクセルはサイズをエンコードするため、コードの境界を空白の「クワイエットゾーン」でマークする必要はありませんが、一部のバーコードリーダーではこのマークが必要です。

コンパクトなアステカコードのコアは、1~4層で囲まれており、15×15(13桁の数字または12文字)から27×27までのシンボルを生成します。さらに、1バイトの情報をエンコードする11×11の特別な「ルーン」があります。コア全体は最大32層(151×151ピクセル)をサポートし、3832桁、3067文字、つまり1914バイトのデータをエンコードできます。

シンボルのうち基本データに使用されない部分はリード・ソロモン誤り訂正に使用され、その分割は1データワードから3チェックワードまでの範囲で完全に設定可能です。推奨されるチェックワードの数は、シンボル容量の23%に3コードワードを加えたものです。[ 3 ]

Aztec Codeは、様々なプリンター技術で読み取り可能なコードを生成するように設計されています。また、携帯電話などのモバイルデバイスのディスプレイにも最適です。

エンコーディング

エンコード プロセスは次の手順で構成されます。

  1. ソースメッセージをビット列に変換する
  2. リード・ソロモン符号語のサイズを決定する必要なシンボルサイズとモードメッセージの計算
  3. リード・ソロモン符号語にメッセージをビット詰めする
  4. メッセージをコードワード境界にパディングする
  5. チェックコードワードの追加
  6. 完全なメッセージを核の周りに螺旋状に配置

ビット文字列と他の形式の間のすべての変換は、ビッグエンディアン(最上位ビットが先頭) 規則 に従って実行されます。

文字セット

すべての 8 ビット値と 2 つのエスケープ コードをエンコードできます。

  • FNC1 は、 GS1-128標準と同じように、アプリケーション識別子の存在を示すために使用されるエスケープ シンボルです。
  • ECI はエスケープ文字の後に 6 桁の拡張チャネル解釈コードが続き、後続のバイトを解釈するために使用される文字セットを指定します。

デフォルトでは、コード 0 ~ 127 は ANSI X3.4 ( ASCII )に従って解釈され、コード 128 ~ 255 はISO/IEC 8859-1 : ラテンアルファベット No. 1に従って解釈されます。これは ECI 000003 に相当します。

バイトは、現在のデコードモードに基づいて4ビットまたは5ビットのコードに変換され、モード変更用のシフトコードとラッチコードが用いられます。この方法では得られないバイト値は、一般的な「バイナリシフト」コードを使用してエンコードされ、その後に長さと8ビットコードが続きます。

モード変更において、シフトは後続の単一コードの解釈のみに影響しますが、ラッチは後続のすべてのコードに影響します。ほとんどのモードでは5ビットコードが使用されますが、Digitモードでは4ビットコードが使用されます。

アステカコード文字エンコーディング
コードモード コードモード
アッパーより低い混合アッパーより低い混合
0 電源電源電源FLG( n )電源 16 o^\+
1 SPSPSPCRSP 17 Pp^]
2 1つの^ACR LF0 18 質問q^^-
3 Bb^B. SP1 19 Rr^_
4 Cc^C、SP2 20 Ss@/
5 Dd^D: SP3 21 Tt\:
6 Ee^E!4 22 あなたあなた^;
7 Ff^F5 23 Vv_<
8 Gグラム^G#6 24 W`
9 Hh^H$7 25 X×|>
10 ^私%8 26 はいy?
11 Jj^J9 27 Zz^?[
12 K^K'28 左/右私たち左/右]
13 Ll^L29 M/LM/L上/下{
14 Mメートル^M上/下 30 ダウンロードダウンロード損益}
15 n^[*私たち 31 B/SB/SB/S上/下
  • 初期モードは「上」
  • x/S = 1文字分モードxにシフト; B/S = 8ビットバイナリにシフト
  • x/L = 次の文字をモード x にラッチします
  • パンクトコード2~5はそれぞれ2バイトをエンコードします
  • 表にはASCII文字がリストされていますが、非ASCII文字セットが使用されている場合でも、エンコードされるのはバイト値です。

B/S(バイナリシフト)の後には5ビットの長さが続きます。0以外の場合、1~31個の8ビットバイトが続くことを示します。0の場合、11個の追加の長さビットは、後続のバイト数から31を引いた値をエンコードします。(32~62バイトの場合、5ビットのバイトシフトシーケンスを2つ使用する方が、11ビットのバイトシフトシーケンスを1つ使用するよりもコンパクトになることに注意してください。)バイナリシーケンスの最後には、前のモードが再開されます。

FLG( n )の後には3ビットのn値が続きます。n =0はFNC1をエンコードします。n = 1~6の後には1~6桁の数字(桁モード)が続き、ゼロが埋め込まれて6ビットのECI識別子になります。n =7予約されており、現在は無効です。

モードメッセージ

モードメッセージは、メッセージ内の 層の数(L層、整数L −1として符号化)とデータコードワードの数(Dコードワード、整数D −1として符号化)を符号化します。残りのコードワードはすべてチェックコードワードとして使用されます。

コンパクトAztecコードの場合、レイヤー数は2ビット値、データコードワード数は6ビット値としてエンコードされ、8ビットのモードワードとなります。フルAztecコードの場合、レイヤー数は5ビット、データコードワード数は11ビットとしてエンコードされ、16ビットのモードワードとなります。

モードワードはGF(16)上の2つまたは4つの4ビットコードワードに分割され、5つまたは6つのリード・ソロモンチェックワードが付加されて28ビットまたは40ビットのモードメッセージが構成されます。このメッセージはコアの周りに1ピクセルのレイヤーでラップされます。このようにして、GF(16)上の(15,10)または(15,9)リード・ソロモンコード(それぞれ(7,2)または(10,4)と短縮されます)が用いられます。

L+1 層のコンパクト Aztec コードは L 層のフル コードよりも多くのデータを保持できるため、4 層未満のフル コードはほとんど使用されません。

最も重要なのは、層の数によって使用されるリード・ソロモン符号語のサイズが決まることです。これは6ビットから12ビットまで変化します。

アステカコードの有限体多項式
ビット分野原始多項式生成多項式(小数係数)用途
4GF(16)× 4 + × + 1x 5 +11 x 4 +4 x 3 +6 x 2 +2 x +1 (コンパクトコード) x 6 +7 x 5 +9 x 4 +3 x 3 +12 x 2 +10 x +12 (フルコード)モードメッセージ
6GF(64)× 6 + × + 1エラー訂正ワードの数に依存する1~2層
8GF(256)× 8 + × 5 + × 3 + × 2 + 1エラー訂正ワードの数に依存する3~8層
10GF(1024)× 10 + × 3 + 1エラー訂正ワードの数に依存する9~22層
12GF(4096)× 12 + × 6 + × 5 + × 3 + 1エラー訂正ワードの数に依存する23~32層

コードワードサイズbは、シンボル内のコードワードの総数がリードソロモンコードで訂正できる 2 b −1 の限界未満になることを保証する最小の偶数です。

前述のように、利用可能なコードワードの少なくとも 23% と 3 を訂正用に予約し、メッセージが利用可能なスペースに収まるようにシンボル サイズを選択することをお勧めします。

ビット詰め

データビットはコードワードに分割され、最初のビットは最上位の係数に対応します。この際、ビットスタッフィングによって、すべて0またはすべて1のコードワードが回避されます。つまり、コードワードの最初のb −1ビットが同じ値を持つ場合、その補数を持つ追加のビットがデータストリームに挿入されます。この挿入は、コードワードの最後のビットが同じ値を持つかどうかに関係なく行われます。

また、これはコードワードの先頭のb −1ビットの文字列にのみ適用されることに注意してください。コードワードの境界をまたぐ限り、より長い同一ビットの文字列も許可されます。

復号化の際、すべて 0 またはすべて 1 のコード ワードは消失であると想定され、一般的なエラーよりも効率的に訂正されます。

このプロセスによりメッセージが長くなり、モードメッセージに記録されるデータコードワードの最終的な数は、メッセージが完了するまでわかりません。まれに、チェックワードの割合を最小限に抑えるために、次に大きいシンボルにジャンプしてプロセスを最初からやり直す必要がある場合があります。

パディング

ビットスタッフィング後、データ文字列は次のコードワード境界まで1ビットを追加してパディングされます。これによりコードワードがすべて1になる場合、最後のビットは0に変更されます(デコーダーではビットスタッフィングビットとして無視されます)。デコード時にパディングビットはシフトコードとラッチコードとしてデコードされる場合がありますが、メッセージの内容には影響しません。リーダーは、メッセージの末尾にある部分的なコードが、すべて1である限り、それを受け入れて無視する必要があります。

さらに、シンボル内で利用可能なデータビットの総数がコードワードサイズの倍数でない場合、データ文字列の先頭に適切な数の0ビットが付加され、余分なスペースが確保されます。これらのビットはチェックワードの計算には含まれません。

コードワードを確認する

モードワードとデータの両方に、利用可能なスペースを埋めるためにチェックワードを追加する必要があります。これは、メッセージ全体がリード・ソロモン多項式 ( x −2)( x −4)...( x −2 K ) の倍数になるように、K個のチェックワードを追加することで計算されます。

チェックワードはビットスタッフィングの対象ではなく、すべて0またはすべて1になる可能性があることに注意してください。したがって、チェックワードの消去を検出することはできません。

メッセージのレイアウト

参照グリッドが赤で強調表示された 9 層 (53×53) の Aztec コード。

フルアズテックコードシンボルは、コアに加えて、16行16列ごとに白黒のピクセルが交互に並ぶ「参照グリッド」を備えています。コンパクトアズテックコードにはこのグリッドは含まれていません。これらの既知のピクセルにより、リーダーは大きなシンボルでもピクセルグリッドの位置合わせを維持できます。最大4層(31×31ピクセル)までは、コアから外側に伸びる単線のみで構成され、交互パターンが続きます。ただし、5層目では、中心から±16ピクセル離れた位置に交互のピクセルの行と列が追加で挿入されるため、5層目は中心から±17ピクセルと±18ピクセルの位置に配置され、5層シンボルは37×37ピクセルになります。

同様に、中心から±32ピクセルの位置に参照グリッドの行と列が追加され、12層シンボル(67×67ピクセル)となります。この場合、12層目は中心から±31ピクセルと±33ピクセルのリングを占めます。このパターンは外側に向かって無限に続き、参照グリッドの行と列によって区切られた15ピクセルのデータブロックが続きます。

シンボルを作成する方法の一つは、参照グリッドを完全に削除し、2×2ピクセルの白い正方形を中心とする14×14ピクセルのコアから始めることです。次に、それを15×15ピクセルのブロックに分割し、その間に参照グリッドを挿入します。

モードメッセージはコアの左上隅から始まり、1ビット厚の層で時計回りに回ります。層数の最上位ビットから始まり、チェックワードで終わります。コンパクトなAztecコードの場合、方向マークのためのスペースを確保するため、モードメッセージは4つの7ビットの部分に分割されます。完全なAztecコードの場合、モードメッセージは4つの10ビットの部分に分割され、これらの部分はそれぞれ参照グリッドによって半分に分割されます。

場合によっては、マトリックスの総容量が完全なコードワードで均等に割り切れないことがあります。そのような場合、メインメッセージの先頭に 0 ビットが埋め込まれます。これらのビットはチェックワードの計算に含まれないため、デコード中にスキップする必要があります。完全なシンボルの総マトリックス容量は、完全な Aztec コードの場合は (112+16*L)*L、コンパクト Aztec コードの場合は (88+16*L)*L として計算できます。ここで、L はレイヤー内のシンボル サイズです。[ 4 ] 例として、1 レイヤーのコンパクト Aztec コードの総マトリックス容量は 104 ビットです。コードワードは 6 ビットなので、17 個のコードワードと 2 個の追加ビットになります。2 つの 0 ビットは埋め込みとしてメッセージの先頭に付加されますが、デコード中にスキップする必要があります。

パディングされたメインメッセージは、シンボル全体の外側の左上から始まり、 2ビット厚の層で反時計回りに螺旋状に広がり、コアの左上隅の真上で終わります。これにより、消失検出可能なビットスタッフィングされたデータワードは、シンボルの最も外側の層、つまり消失が発生しやすい層に配置されます。チェックワードはコアに近い層に格納されます。最後のチェックワードは、ブルズアイの左上隅の真上で終わります。

コアが標準の向きにある場合、最初のデータワードの最初のビットは左上隅に配置され、追加のビットは2ビット幅の列に左から右、上から下に配置されます。このパターンはシンボルの下から2行目まで続き、パターンは反時計回りに90度回転し、2ビット幅の列に下から上、左から右に配置されます。4つの等サイズの1/4層の後、スパイラルは次の内側の層の左上隅に続き、最終的にコアの左上隅の1ピクセル上で終了します。

最後に、1 ビットは黒い四角として印刷され、0 ビットは白い四角として印刷されます。

使用法

ドイツ鉄道のオンラインチケット。このサンプルチケットのAztecバーコードは、中央の位置が異なるため、通常のアプリでは読み取れませんのでご注意ください。

輸送

アステカ コードは交通機関のチケット発行に広く使用されています。

Aztecコードは、航空業界(IATAのBCBP規格)の電子搭乗券に採用されています。多くの航空会社は、搭乗券としてAztecコードを乗客の携帯電話に送信しています。これらのコードは、 Apple Walletなど、乗客の携帯電話アプリと連携していることが多いです。

アステカコードは鉄道でも使用されており、テヘラン地下鉄、イギリス国鉄[ 5 ]ユーロスタードイツ鉄道、TCDD TaşımacılıkDSBSJスロバキア鉄道スロベニア鉄道クロアチア鉄道トレニタリアオランダ鉄道パサジエル・ヴィルシエンス、PKPインターシティVRグループVia Railスイス連邦鉄道SNCBSNCFなどが、オンラインで販売され顧客が印刷するか携帯電話の画面に表示される切符に使用しています。チェコ鉄道もこのコードを使用していましたが、QRコードに切り替えました。アステカコードは、切符を認証するために、車内の係員または改札口でハンドヘルドスキャナでスキャンされます。

政府

ポーランドの自動車登録書類には、NRV2Eアルゴリズムで圧縮され、アステカコードでエンコードされた要約が記載されています。自動車保険会社が新規保険契約締結の第一段階として、書類のデジタル写真に基づいて関連情報を自動入力できるようにするための作業が進行中です。

ロシア連邦税務局は、納税通知書の支払い情報をアステカ コードとしてエンコードします。

コマーシャル

現在、カナダの多くの請求書でもこの技術が使用されており、その中にはEastLinkShaw CableBell Aliantなどがあります。

参照

参考文献

  1. ^ * US 5591956、Longacre, Jr.、Andrew & Hussey, Robert、「光学式リーダー用2次元データ符号化構造およびシンボル体系」、1997年1月7日発行 
  2. ^官報. 米国特許庁. 1997年6月17日.ここに、前記特許の全期間を公衆に捧げる。「画像」をクリックしてから「修正」をクリックすると、パブリック ドメインへの献呈が表示されます。
  3. ^ Adams, Russ. 「2次元バーコードページ」 。 2010年4月30日時点のオリジナルよりアーカイブ2022年7月14日閲覧。
  4. ^ “Спецификация Aztec Code (без Small Aztec)” [Aztec Code Specification (without Small Aztec)] (ロシア語). 2020年2月25日時点のオリジナルよりアーカイブ。
  5. ^ 「英国のモバイル鉄道チケットのリバーシング」 eta.st 2023年1月31日。 2023年2月5日閲覧