(57)【特許請求の範囲】
【請求項１】
開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置するとともに、前記コード領域の空き部分にデータを表さない埋め草コードを配置する二次元コードの生成装置として、コンピュータを機能させるためのプログラムであって、
秘匿するデータを表すコード語としてコード化された秘匿データコードを前記埋め草コードの一部または全部に代えて、前記終端識別コードの後に配置することを特徴とする二次元コードの生成プログラム。
【請求項２】
開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置するとともに、前記コード領域の空き部分にデータを表さない埋め草コードを配置する二次元コードであって、
秘匿するデータを表すコード語としてコード化された秘匿データコードを前記埋め草コードの一部または全部に代えて、前記終端識別コードの後に配置することを特徴とする二次元コード。
【請求項３】
開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置、または前記開示データコードがなすコード列の終端位置を特定可能な終端識別情報をこのコード列の所定の位置に配置する二次元コードの生成装置として、コンピュータを機能させるためのプログラムであって、
秘匿するデータを表すコード語としてコード化された秘匿データコードを、前記終端識別コードの後、または前記終端識別情報により特定される前記終端位置の後、に配置することを特徴とする二次元コードの生成プログラム。
【請求項４】
開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置、または前記開示データコードがなすコード列の終端位置を特定可能な終端識別情報をこのコード列の所定の位置に配置する二次元コードであって、
秘匿するデータを表すコード語としてコード化された秘匿データコードを、前記終端識別コードの後、または前記終端識別情報により特定される前記終端位置の後、に配置することを特徴とする二次元コード。
【請求項５】
開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置、または前記開示データコードがなすコード列の終端位置を特定可能な終端識別情報をこのコード列の所定の位置に配置する二次元コードの生成装置として、コンピュータを機能させるためのプログラムであって、
秘匿するデータを表すコード語としてコード化された秘匿データコードに所定の加工を施して、前記終端識別コードの後、または前記終端識別情報により特定される前記終端位置の後、に配置することを特徴とする二次元コードの生成プログラム。
【請求項６】
開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置、または前記開示データコードがなすコード列の終端位置を特定可能な終端識別情報をこのコード列の所定の位置に配置する二次元コードであって、
秘匿するデータを表すコード語としてコード化された秘匿データコードに所定の加工を施して、前記終端識別コードの後、または前記終端識別情報により特定される前記終端位置の後、に配置することを特徴とする二次元コード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、秘密にして隠しておきたいデータ（以下「秘匿データ」または「秘匿するデータ」という）を含む二次元コードの生成プログラム及び二次元コードに関するものである。
【背景技術】
【０００２】
秘匿データを含んだ二次元コードを生成したり読み取る技術として、例えば、下記特許文献１に開示される「情報送信方法及び携帯端末」がある。この従来技術では、送信側の携帯端末は、キー入力装置から入力された暗号キーにより送信データを暗号化しそれをＱＲコード（登録商標）に変換してＱＲコードを生成しそれを表示装置の画面に表示する（特許文献１；段落００２０，００２１、図４）。
【０００３】
これに対し、受信側の携帯端末では、送信側の携帯端末の画面に表示されたＱＲコードの画像をカメラ等により読み込んでＱＲコードが暗号化されているか否かを判断した後、暗号化されている場合には暗号キーを要求する。そして、ＱＲコードを逆変換するとともに入力された暗号キーにより送信データを復号して復元データを画面表示する（特許文献１；段落００２２、図５）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１４７００６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記特許文献１に開示される「情報送信方法及び携帯端末」によると、暗号化されているものをＱＲコードに逆変換した場合には、通常、暗号化されたデータそのものは文字情報として意味をなさないものであるため、携帯端末等の画面に表示される情報は意味不明なものであったり、画面表示の制御等に影響を与え得る制御コードに相当する情報であったりする。
【０００６】
このため、意味不明な情報である場合には、当該携帯端末等の使用者に不信感を与え得るという問題や、それが暗号化された情報であることを認識し得る使用者には対しては、解読を試みようとする不用意な動機を与える可能性があることから、セキュリティ上の問題を生じ得る。
【０００７】
また、制御コードに相当する情報である場合には、画面表示が乱れたり、その他のシステム上の問題にもつながり得るという問題がある。
【０００８】
本発明は、上述した課題を解決するためになされたもので、その目的とするところは、一般仕様の読取装置で読み取る利用者には秘匿データの存在を認識し得ない二次元コードの生成プログラム及び二次元コードを提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、第１の発明は、開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置するとともに、前記コード領域の空き部分にデータを表さない埋め草コードを配置する二次元コードの生成装置として、コンピュータを機能させるためのプログラムであって、秘匿するデータを表すコード語としてコード化された秘匿データコードを前記埋め草コードの一部または全部に代えて、前記終端識別コードの後に配置することを特徴とする。
【００１０】
第２の発明は、開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置するとともに、前記コード領域の空き部分にデータを表さない埋め草コードを配置する二次元コードであって、秘匿するデータを表すコード語としてコード化された秘匿データコードを前記埋め草コードの一部または全部に代えて、前記終端識別コードの後に配置することを特徴とする。
第３の発明は、開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置、または前記開示データコードがなすコード列の終端位置を特定可能な終端識別情報をこのコード列の所定の位置に配置する二次元コードの生成装置として、コンピュータを機能させるためのプログラムであって、秘匿するデータを表すコード語としてコード化された秘匿データコードを、前記終端識別コードの後、または前記終端識別情報により特定される前記終端位置の後、に配置することを特徴とする。
第４の発明は、開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置、または前記開示データコードがなすコード列の終端位置を特定可能な終端識別情報をこのコード列の所定の位置に配置する二次元コードであって、秘匿するデータを表すコード語としてコード化された秘匿データコードを、前記終端識別コードの後、または前記終端識別情報により特定される前記終端位置の後、に配置することを特徴とする。
第５の発明は、開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置、または前記開示データコードがなすコード列の終端位置を特定可能な終端識別情報をこのコード列の所定の位置に配置する二次元コードの生成装置として、コンピュータを機能させるためのプログラムであって、秘匿するデータを表すコード語としてコード化された秘匿データコードに所定の加工を施して、前記終端識別コードの後、または前記終端識別情報により特定される前記終端位置の後、に配置することを特徴とする。
第６の発明は、開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置、または前記開示データコードがなすコード列の終端位置を特定可能な終端識別情報をこのコード列の所定の位置に配置する二次元コードであって、秘匿するデータを表すコード語としてコード化された秘匿データコードに所定の加工を施して、前記終端識別コードの後、または前記終端識別情報により特定される前記終端位置の後、に配置することを特徴とする。
【発明の効果】
【００１１】
請求項１の発明によって生成される二次元コードは、秘匿するデータを表すコード語としてコード化された秘匿データコードを埋め草コードの一部または全部に代えて、終端識別コードの後に配置する。一般に、二次元コードの読取装置は、二次元コードのデコード処理において、コード領域に配置されたデータコードの先頭からコード列の終端を示す終端識別コードまでを読み取ってデコードするアルゴリズム仕様に設定されているため、通常、終端識別コードの後に配置される埋め草コード等は読み取りの対象にならない。このため、終端識別コードの後に、埋め草コードの一部または全部に代えて配置されるデータコードは、たとえそれが読み取り可能なコード語であっても、一般仕様の読取装置ではデコードすることはないので、終端識別コードの後に秘匿したいデータコード（秘匿データコード）を配置することにより、終端識別コードの前に配置されたデータコードは読み取ることはできても、当該秘匿データコードは読み取ることはできない。したがって、このような秘匿データコードが含まれる二次元コードを一般仕様の読取装置で読み取っても、当該秘匿データコードによって秘匿しようとするデータの存在はわからないので、一般仕様の読取装置の利用者には秘匿データの存在を認識させないようにすることができる。
【００１２】
請求項２の発明によれば、請求項１と同様の効果を奏する二次元コードを実現できる。
【図面の簡単な説明】
【００１３】
【図１】図１(A) は、本発明の第１実施形態に係るＱＲコードプリンタとそれに接続されるパソコンとを示す説明図で、図１(B) は、当該ＱＲコードプリンタのハードウェア構成例を示すブロック図である。
【図２】第１実施形態に係るＱＲコードプリンタにより実行されるコード生成処理の流れを示すフローチャートである。
【図３】図２に示すコード生成処理により情報処理されるデータやコードのフォーマット例を示す説明図で、図３(A) は印刷データのデータレコードの例、図３(B) はステップＳ１１５により並び替えた後の例、図３(C) はステップＳ１２１〜Ｓ１３７により各コードを付加した後の例、図３(D) は図３(C) に示す秘匿コードの構成例１、図３(E) は図３(C) に示す秘匿コードの構成例２、図３(F) は図３(C) に示す秘匿コードの構成例３、をそれぞれ示すものである。
【図４】１型のＱＲコードの構成例を示す説明図である。
【図５】ＱＲコードリーダのハードウェア構成例を示すブロック図である。
【図６】図５のＱＲコードリーダの制御回路により実行されるデコード処理の流れを示すフローチャートである。
【図７】図６に示す復号化処理の流れを示すフローチャートである。
【図８】本発明の第２実施形態に係るＱＲコードプリンタにより実行されるコード生成処理の流れを示すフローチャートである。
【図９】図８に示すコード生成処理により情報処理されるデータやコードのフォーマット例を示す説明図で、図９(A) は印刷データのデータレコードの例、図９(B) はステップＳ１１５により並び替えた後の例、図９(C) はステップＳ１２１〜Ｓ１３７により各コードを付加した後の例、図９(D) は図９(C) に示す秘匿コードの構成例１、図９(E) は図９(C) に示す秘匿コードの構成例２、図９(F) は図９(C) に示す秘匿コードの構成例３、をそれぞれ示すものである。
【図１０】図６等の例とは異なるＱＲコードリーダの制御回路により実行されるデコード処理の流れを示すフローチャートである。
【図１１】図１０に示す復号化処理の流れを示すフローチャートである。
【図１２】本発明の第３実施形態に係るＱＲコードプリンタにより実行されるコード生成処理の流れを示すフローチャートである。
【図１３】図１２に示す加工処理の流れを示すフローチャートである。
【図１４】図１３に示す加工処理により情報処理されるコードのフォーマット例を示す説明図で、図１４(A) は第２実施形態のコード生成処理により生成されたコードの例（図９(C) 相当）、図１４(B) はステップＳ５００により分散配置処理された秘匿コードの例、図１４(C) はステップＳ５００によりビットが並替え処理またはビットの値が変換処理された秘匿コードの例、図１４(D) は図１４(C) に示す秘匿コードの構成例、図１４(E) は、図１４(D) との比較として第２実施形態のコード生成処理により生成された秘匿コードの構成例（図９(D) 相当）、をそれぞれ示すものである。
【図１５】図６、図１０等の例とは異なるＱＲコードリーダの制御回路により実行されるデコード処理の流れを示すフローチャートである。
【図１６】図１５に示す復号化処理の流れを示すフローチャートである。
【図１７】図１６に示す抽出処理の流れを示すフローチャートである。
【図１８】図６、図１０、図１５等の例とは異なるＱＲコードリーダの制御回路により実行されるデコード処理の流れを示すフローチャートである。
【図１９】図１８のＱＲコードリーダの制御回路により実行される読取フラグ設定処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、本発明の実施形態について図を参照して説明する。なお、以下説明する各実施形態では、二次元コードの例として、ＱＲコードを挙げるが、本発明に係る二次元コードはこれに限られることはなく、例えば、データマトリクス、マキシコード、ＣＰコード、ＰＤＦ４１７やＲＳＳコンポジット等であってもＱＲコードと同様に本発明を適用することができる。
【００１５】
［第１実施形態］
まず、本発明の第１実施形態に係るＱＲコードプリンタ１０の構成を、図１を参照して説明する。なお、図１(A) には、本第１実施形態に係るＱＲコードプリンタ１０とそれに接続されるパーソナルコンピュータ（以下「パソコン」という）１とを示す説明図が図示されており、また図１(B) には、ＱＲコードプリンタ１０のハードウェア構成例を示すブロック図が図示されている。
【００１６】
図１(A) に示すように、ＱＲコードプリンタ１０は、ケーブル５を介してパソコン１に接続されることにより、パソコン１から出力されて当該ＱＲコードプリンタ１０に入力される英数字、漢字や記号等の文字データ（以下これらを「印刷データ」と総称する）に基づいてＱＲコードを生成してラベルＰ等に印刷する機能を有するものである。なお、ここでいう「ＱＲコード」とは、日本工業規格（ＪＩＳ）の二次元コードシンボル−ＱＲコード−基本仕様（JIS X 0510:2004）に従うものである。
【００１７】
パソコン１は、パソコン本体２およびディスプレイ３により構成されており、パソコン本体２は、図略の、ＭＰＵ、メインメモリ（主記憶装置）、ハードディスク（補助記憶装置）、入出力インタフェース、通信インタフェース、キーボード、ポインティングデバイス等からなる情報処理装置で、またディスプレイ３は、パソコン本体２に接続されることによりパソコン本体２から出力される情報を画面表示可能な情報表示装置である。
【００１８】
なお、このパソコン本体２には、ＱＲコードプリンタ１０のデバイスドライバがインストールされて（組み込まれて）おり、当該パソコン１の利用者が、ＱＲコードとしてラベルＰに印刷したい文字等を含んだ印刷データを、パソコン本体２からＱＲコードプリンタ１０に対して任意に出力可能にしている。
【００１９】
これに対し、ＱＲコードプリンタ１０は、図１(B) に示すように、主に、ＭＰＵ１１、メモリ１２、インタフェース１３、ローラ制御部１４、ヘッド制御部１５、ローラ１７、ヘッド１８等から構成されている。なお、これらは、図略のプリント配線板に実装あるいは図略のハウジング内に内装されている。
【００２０】
ＭＰＵ１１は、ＱＲコードプリンタ１０全体を制御可能なマイクロコンピュータ（以下「マイコン」という）で、メモリバスを介して接続されるメモリ１２とともに情報処理装置を構成し得るもので情報処理機能を有する。このＭＰＵ１１には、メモリ１２のほかに、インタフェース１３、ローラ制御部１４やヘッド制御部１５も接続されている。なお、後述するコード生成処理は、このＭＰＵ１１およびメモリ１２により実行される。
【００２１】
メモリ１２は、半導体メモリ装置で、例えばＲＡＭ（ＤＲＡＭ、ＳＲＡＭ等）やＲＯＭ（ＥＰＲＯＭ、ＥＥＰＲＯＭ等）がこれに相当する。このメモリ１２のうちのＲＡＭには、前述したパソコン１から送られてくる文字データを蓄積するバッファ領域のほか、ＭＰＵ１１が算術演算や論理演算等の各処理時に利用する作業領域等も確保可能に構成されている。またＲＯＭには、後述のコード生成処理等を実行可能な所定プログラムやその他、ローラ制御部１４やヘッド制御部１５等の各ハードウェアを制御可能なシステムプログラム等が予め格納されている。
【００２２】
インタフェース１３は、前述したパソコン１のパソコン本体２から送られてくる印刷データ等を受信可能にする入力インタフェースで、シリアルバス等を介してＭＰＵ１１に接続されている。このインタフェース１３を介してＭＰＵ１１に入力された印刷データは、コード生成処理によって後述するように情報処理されてコード化される。
【００２３】
ローラ制御部１４は、ローラ１７の駆動機構（図略）を制御し得る制御装置で、シリアルバス等を介してＭＰＵ１１に接続されている。これにより、ＭＰＵ１１から受けた制御信号に従ってローラ１７の回転の開始や停止あるいは回転方向等を制御している。
【００２４】
ヘッド制御部１５は、例えば、感熱用紙からなるラベルに対して任意のパターンを印刷し得るサーマルヘッドで、シリアルバス等を介してＭＰＵ１１に接続されている。本実施形態では、後述のコード生成処理によって生成されたＱＲコードを感熱ラベルに印刷可能にするもので、前述したローラ制御部１４による感熱ラベルの紙送りタイミングに同期して、ＱＲコードを構成する位置検出パターン、タイミングパターンやデータコード等を当該ラベルに印刷する。
【００２５】
なお、以下、ヘッド制御部１５として、サーマルヘッドの場合を例示して説明するが、ＱＲコードを印刷できるものであれば、例えば、インクジェット用やドットインパクト用のヘッドでも良いし、また印刷機構として、レーザプリンタやＬＥＤプリンタ等であっても良い。
【００２６】
このようにＱＲコードプリンタ１０を構成することによって、パソコン１から出力されて当該ＱＲコードプリンタ１０に入力された印刷データは、インタフェース１３を介してメモリ１２のバッファ領域に一旦蓄えられた後、次に説明するコード生成処理に渡される。ここで、コード生成処理を図２〜図４を参照して説明する。なお、図２には、コード生成処理の流れを示すフローチャートが図示されている。また図３には、図２に示すコード生成処理により情報処理されるデータやコードのフォーマット例が図示されている。さらに図４には、１型のＱＲコードの構成例が図示されている。
【００２７】
図２に示すように、コード生成処理は、ＱＲコードプリンタ１０の電源投入により起動するＭＰＵ１１およびメモリ１２によって開始され、まずステップＳ１０１により初期設定処理が行われる。この処理は、メモリ１２の作業領域や印刷データを蓄えるバッファ領域をクリアしたり、所定のフラグやカウンタ等をクリアする。
【００２８】
ステップＳ１０３では、印刷データを受信したか否かを判断する処理で、印刷データを受信するまで、このステップを繰り返す（Ｓ１０３；Ｎｏ）。そして、印刷データを受信したと判断すると（Ｓ１０３；Ｙｅｓ）、続くステップＳ１０５によりタイマーのカウント値をクリアする処理を行う。このステップＳ１０５でカウンタ値がクリアされるタイマーは、次のステップＳ１０７により所定時間の経過を計時するものである。
【００２９】
ステップＳ１０７では、先のタイマーにより所定時間が経過したか否かを判断する処理が行われる。即ち、パソコン１から送られてくる印刷データに、暗号化等に関するデータが含まれているか否かを次のステップＳ１１１により判断する必要上、例えば、所定時間として１秒間が経過したか否かを判断し、この時間が経過するまでに、パソコン１から暗号化に関するデータが送られてこない場合には、所定時間の経過とともにステップＳ１０９に処理を移行する（Ｓ１０７；Ｙｅｓ）。
【００３０】
これに対し、所定時間が経過していない場合には（Ｓ１０７；Ｎｏ）、次のステップＳ１１１により暗号化等に関するデータとして、秘匿する必要のあるデータ（以下「秘匿データ」という）のデータレコード中の位置関係を示す秘匿データ位置情報と暗号するために用いる暗号キー（暗号鍵）とを受信したか否かを判断する処理が行われる。そして、これらを受信していると判断した場合には（Ｓ１１１；Ｙｅｓ）、続くステップＳ１１３に処理を移行し、これらを受信していると判断できない場合には（Ｓ１１１；Ｎｏ）、前述したステップＳ１０７に処理を戻して、再度、時間の経過を判断する。
【００３１】
そして、所定時間が経過したとステップＳ１０７により判断した場合には（Ｓ１０７；Ｙｅｓ）、ステップＳ１０９により所定のフラグに「０」をセットする。このフラグは、印刷データに秘匿データが含まれているか否かを示すもので、「０」がセットされている場合には、秘匿データが含まれていないことを示し、「１」がセットされている場合には、秘匿データが含まれていることを示す。このため、ステップＳ１１１により暗号化等に関するデータを受信していると判断した場合には（Ｓ１１１；Ｙｅｓ）、続くステップＳ１１３によりこのフラグに「１」をセットする処理が行われる。
【００３２】
ステップＳ１１３により所定のフラグに「１」をセットすると、続くステップ１１５により、開示データおよび秘匿データを並び替える処理が行われる。即ち、印刷データに、第三者に開示するデータ（開示データ）と、第三者には秘密にして隠しておきたいデータ（秘匿データ）と、が含まれており、これらがデータレコード中で混在している場合に、ステップＳ１１１により受信した「秘匿データのデータレコード中の位置関係を示す位置情報」に基づいて、データの順番を入れ替えて、開示データの集まりと秘匿データの集まりとに分ける処理を行う。
【００３３】
例えば、図３(A) に示すように、例えば、パソコン１から送られてくる印刷データのレコードに、開示データＡ、秘匿データα、開示データＢ、秘匿データβの順に並ぶデータが含まれていたとすると、ステップＳ１１５により、これらのデータの順番を入れ替えて図３(B) に示すように、開示データＡ、開示データＢ、秘匿データα、秘匿データβの順に並び替える処理を行う。これにより、開示データと秘匿データとがそれぞれまとめられるので、後のステップ１２１による終端識別コードの付加処理や、ステップＳ１２５による秘匿識別コードの付加処理等が容易になる。
【００３４】
次のステップＳ１１７では、開示データや秘匿データ等の各データをＪＩＳの基本仕様（JIS X 0510:2004）に従って符号化する処理が行われる。これにより、開示するデータを表すコード語としてコード化された開示データコードが生成され、また秘匿するデータを表すコード語としてコード化された秘匿データコードが生成される。
【００３５】
また続くステップＳ１１９では、開示データの各データに対する誤り訂正符号をＪＩＳの基本仕様（JIS X 0510:2004）に準拠して生成しさらにそれをコード化して誤り訂正コードを生成する処理が行われる。また、秘匿データについても、例えば、開示データと同様に、ＪＩＳの基本仕様（JIS X 0510:2004）に記載されている誤り訂正コードの生成アルゴリズムを用いて誤り訂正符号を生成しそれをコード化して誤り訂正コードを生成する処理が行われる。
【００３６】
そして、続くステップＳ１２１により、開示データコードの後に終端識別コードを付加する処理が行われる。終端識別コードは、例えば、４ビットパターンで「００００」であり、図３(C) に示すように、開示データコードＡの後に続く開示データコードＢの直後に位置する。なお、図３(C) では、便宜上、開示データコードを「開示コード」、終端識別コードを「終端子」、とそれぞれ表現している。
【００３７】
次のステップＳ１２３では、前述した所定のフラグが「１」にセットされているか否か、即ち秘匿データが含まれているか否かを判断する処理が行われる。そして、秘匿データが含まれている場合には（フラグが「１」にセットされている場合：Ｓ１２３；Ｙｅｓ）、ステップＳ１２５に処理を移行し、また秘匿データが含まれていない場合には（フラグが「０」にセットされている場合：Ｓ１２３；Ｎｏ）、一連の秘匿処理（Ｓ１２５〜Ｓ１３３）を飛ばしてステップＳ１３５に処理を移行する。
【００３８】
ステップＳ１２５〜Ｓ１３３は、印刷データに秘匿データが含まれている場合に行われる一連の秘匿処理である。まず、ステップＳ１２５により、秘匿識別コードを終端識別コードの直後に付加する処理が行われる。
【００３９】
このステップＳ１２５による処理は、秘匿識別コードを終端識別コードの直後に配置することで、この終端識別コードの後に配置されているデータコードが「秘匿するデータを表すコード語としてコード化されたものであること」を明示的に表す。これにより、本コード生成処理によって生成されたＱＲコードＱを、ＱＲコードリーダ等のデコードする際に、当該ＱＲコードＱに秘匿データコードが含まれていることを認識可能にするので、例えば、読取対象外のデータやデータ化けしたデータ等を秘匿データコードと誤認して読み取ることを防ぎ、またこれに起因する誤動作の発生を防止することもできる。
【００４０】
次のステップＳ１２７では、秘匿データコードのデータ長を計算して求め、このデータ長をコード化したものを秘匿識別コードの直後に付加する処理が行われる。これにより、秘匿データコードが配置される領域や範囲がわかるので、本コード生成処理によって生成されたＱＲコードＱを、ＱＲコードリーダ等のデコードする際に、どこまでが秘匿データコードであるか、または暗号データコードであるかを認識可能にする。
【００４１】
例えば、図３(C) に示す例では、秘匿データコードαのデータ長と秘匿データコードβのデータ長との和が当該データ長として計算されて秘匿識別コードの直後に付加される。なお、図３(C) では、便宜上、秘匿データコードを「秘匿コード」、秘匿識別コードを「秘匿識別子」、とそれぞれ表現している。
【００４２】
続くステップＳ１２９では、暗号キーがあるか否かを判断することによって、秘匿データコードを暗号化する必要があるか否かを判断する。即ち、ステップS１１１によって暗号キーをパソコン１から受信している場合には、暗号キーがあるので（Ｓ１２９；Ｙｅｓ）、ステップＳ１３１に移行して暗号化処理を行う。これに対して、ステップS１１１によって暗号キーをパソコン１から受信していない場合には、暗号キーがないので（Ｓ１２９；Ｎｏ）、ステップＳ１３１による暗号化処理を飛ばしてステップＳ１３３に移行する。
【００４３】
なお、ステップＳ１１１により暗号キーを受信していない場合であっても、パソコン１が予め暗号キーをメモリ１２やハードディスク等の情報記憶媒体に保持しているときには暗号キーがあるので（Ｓ１２９；Ｙｅｓ）、ステップＳ１３１で暗号化処理を行う。
【００４４】
ステップＳ１３１では、秘匿データコードを暗号化する処理が行われる。この処理は、例えば、公知の視覚復号型暗号技術（視覚復号型秘密分散法）を用いて秘匿データコードを暗号化する。これにより、このような暗号化されていない平文データが付加されている場合に比べてセキュリティの強度を高めることができる。
【００４５】
例えば、図３(D) に示す例では、秘匿データコードαを構成する「暗号化データ」の部分が暗号化され、「開始桁」、「文字数」および「復号キー検査データ」も併せて生成される。最初に位置する「開始桁」は、当該暗号化された秘匿データの位置情報として、印刷データの先頭をゼロ番地とした場合に表現可能なアドレス値がこれに相当する。また次の「文字数」は、暗号化されている秘匿データの文字数である。これにより、コード語としてコード化される前のデータレコード中の位置関係において前後して混在する場合であっても、本コード生成処理によって生成されたＱＲコードＱを、ＱＲコードリーダ等のデコードする際において、デコードしたデータをこの位置情報に基づいてコード化前の位置関係に配置することができる。
【００４６】
最後に付加されている「復号キー検査データ」は、当該暗号を解読するのに用いる復号キーを特定可能な鍵特定情報で、暗号方式が暗号キーと復号キーとが同じ共通鍵暗号方式（「秘密鍵暗号方式」ともいう）の場合には、当該復号キー検査データは暗号キーも特定できる。これにより、本コード生成処理によって生成されたＱＲコードＱを、ＱＲコードリーダ等のデコードする際に、秘匿データコードを復号キー（復号できる鍵）を容易に特定することができたり、復号キーであるか否かを判断することができる。
【００４７】
なお、秘匿データコードβについても秘匿データコードαと同様に構成され、「復号キー検査データ」として、秘匿データコードαを復号する復号キーと同じ情報を付加しても良いし、また秘匿データコードαの暗号キーとは異なった他の暗号キーで秘匿データコードβの秘匿データを暗号化した場合には、他の復号キーを特定する「復号キー検査データ」を付加しても良い。これにより、本コード生成処理によって生成されたＱＲコードＱを、ＱＲコードリーダ等のデコードする際に、各秘匿データコードごとに復号できる鍵を容易に特定することができたり、復号できる鍵であるか否かを判断することができる。
【００４８】
ステップＳ１３３では、データ長の直後に秘匿データコードを付加する処理が行われる。図３(D) に示す例では、秘匿データコードαおよび秘匿データコードβをデータ長の後に付加する。これにより、一般仕様の二次元コードの読取装置では、二次元コードのデコード処理において、終端識別コードの後に配置される埋め草コード等は読み取りの対象にしないため、このように終端識別コードの後に配置された秘匿データコードは読み取ることはできない。したがって、このような秘匿データコードが含まれる二次元コードを一般仕様の読取装置で読み取っても、当該秘匿データコードの存在はわからないので、当該読取装置の利用者には秘匿データの存在を認識させないようにすることが可能となる。
【００４９】
続くステップＳ１３５では、例えば、ＪＩＳの基本仕様（JIS X 0510:2004）に記載されている処理アルゴリズムに準拠して、秘匿データコードの後に埋め草コードを付加する処理が行われ、さらにステップＳ１３７では、誤り訂正コードを付加する処理が行われる。これにより、図３(C) に示すフォーマットのデータコードが生成される。
【００５０】
そして、ステップＳ１３９では、ステップＳ１３７により生成されたデータコードに基づいて、各セルを生成し、図４に示すデータブロックに配置する処理が行われる。即ち、図４に示す１型のＱＲコードでは、１辺が２１セル（モジュール）の正方形状に構成されているため、三隅に設けられている位置検出パターンや形式情報（図４に示す斜線部分）、さらにはタイミングパターンを除いたコード領域に、８個のセルを４行２列に配置して構成されるデータブロックを２６ブロック（Ａ０〜Ａ２５）配置する。
【００５１】
例えば、図３(C) に示す例では、開示データコードＡをＡ０〜Ａ２、開示データコードＢをＡ３〜Ａ６に配置し、終端識別コードをＡ７に配置する。そして、この終端識別コードの後方で、通常は埋め草コードが配置される位置に相当するＡ８〜Ａ１７に、秘匿識別コード、データ長、秘匿識別コード等を配置する。
【００５２】
即ち、Ａ８に秘匿識別コードを配置し、その後のＡ９にデータ長を配置して、さらにこの後のＡ１０〜Ａ１３に秘匿データコードα、Ａ１４〜Ａ１７に秘匿データコードβをそれぞれ配置する。そして、通常のＱＲコードと同様に、誤り訂正コードを最後のＡ２０〜Ａ２５に配置して、この間の空いている部分であるＡ１８〜Ａ１９に埋め草コードを配置する。なお、Ａ１５およびＡ１８は、タイミングパターンを挟んで位置していることから、Ａ１５はＡ１５とＡ１５’とに、またＡ１８はＡ１８とＡ１８’とに分割されている。
【００５３】
なお、ステップＳ１３１において、図３(E) に示すように、「復号キー検査データ」に代えて、復号キーそのものを付加しても良い。これにより、本コード生成処理によって生成されたＱＲコードＱを、ＱＲコードリーダ等のデコードする際に、例えば、当該ＱＲコードリーダ等が秘匿データコードαの復号キーを持っていなくても、秘匿データコードαを復号して元の平文に戻すことができる。
【００５４】
また、秘匿データコードβについても、同様に「復号キー検査データ」に代えて、復号キーそのものを付加しても良い。付加する復号キーは、秘匿データコードαを復号する復号キーと同じものを付加しても良いし、また秘匿データコードαの暗号キーとは異なった他の暗号キーで秘匿データコードβの秘匿データを暗号化した場合には、この他の暗号キーに対応する他の復号キーを付加しても良い。これにより、本コード生成処理によって生成されたＱＲコードＱを、ＱＲコードリーダ等のデコードする際に、当該ＱＲコードリーダ等が、各秘匿データコードごとに対応するそれぞれの復号キーを持っていなくても、それぞれの秘匿データコードを復号して元の平文に戻すことができる。
【００５５】
また、ステップＳ１２３により、秘匿データが含まれていないと判断した場合であっても（フラグが「０」にセットされている場合：Ｓ１２３；Ｎｏ）、図３(F) に示すように、暗号化していない平文データの前に、ステップＳ１３１で付加した「開始桁」や「文字数」を付加する処理ステップを、ステップＳ１２３とステップＳ１３５との間に設けても良い。これにより、コード語としてコード化される前のデータレコード中の位置関係において前後して混在する場合であっても、本コード生成処理によって生成されたＱＲコードＱを、ＱＲコードリーダ等のデコードする際において、デコードしたデータをこの位置情報に基づいてコード化前の位置関係に配置することができる。
【００５６】
以上説明したように、本第１実施形態に係るＱＲコードプリンタ１０によると、ＭＰＵ１１により実行されるコード生成処理によって生成されるＱＲコードＱでは、ステップＳ１３３により秘匿データコードが、埋め草コードの一部または全部に代えて、終端識別コードの後に配置されている。これにより、終端識別コードの後に配置された秘匿データコードは、一般仕様の読取装置では読み取りの対象にならないので、このような秘匿データコードが含まれる二次元コードを一般仕様の読取装置で読み取っても、当該秘匿データコードによって秘匿しようとするデータの存在はわからない。したがって、一般仕様の読取装置の利用者には秘匿データの存在を認識させないようにすることができる。
【００５７】
よって、このような秘匿データコードを含んでいても、一般仕様の読取装置には当該秘匿データコードのデコードデータに相当するものが画面表示されないので、利用者に秘匿データの存在を認識させることがなく、当該利用者に対して不信感を与えたり、解読を試みようとする不用意な動機を与えることがない。また、当該秘匿データコードのデコードデータに相当するものが制御データ等であっても、それが画面表示されることがないので、画面表示が乱れたりもしない。
【００５８】
なお、上述した第１実施形態では、ＱＲコードプリンタ１０により、ラベルＰにＱＲコードＱを印刷する例を挙げて説明したが、本発明はこれに限られることはなく、ＱＲコードＱを視覚的に表現可能なものであればよく、例えば、図２に示すコード生成処理をパソコン本体２により実行してディスプレイ３にＱＲコードＱを表示するように構成しても良い。この場合、コード生成処理は、コンピュータプログラムとして概念できるので、例えば、「開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置するとともに、前記コード領域の空き部分にデータを表さない埋め草コードを配置する二次元コードの生成装置として、コンピュータを機能させるためのプログラムであって、秘匿するデータを表すコード語としてコード化された秘匿データコードを前記埋め草コードの一部または全部に代えて、前記終端識別コードの後に配置することを特徴とする二次元コードの生成プログラム。」と表現可能な技術的思想を把握できる。これにより、この二次元コードの生成プログラムにより二次元コードの生成装置として機能するコンピュータは、上述したＱＲコードプリンタ１０のＭＰＵ１１等と同様の作用および効果を奏する。
【００５９】
また、上述した第１実施形態では、ＱＲコードプリンタ１０にパソコン１を接続して当該パソコン１から印刷データを送る構成を例示して説明したが、英数字、漢字や記号等の文字データを出力可能な情報処理装置であれば、このような機能を備えたデジタルカメラや携帯電話機、あるいはハンドヘルドコンピュータやハンディターミナル等を、ＱＲコードプリンタ１０に接続する構成を採っても上述した作用および効果を得ることができる。
【００６０】
次に、ＱＲコードリーダ２０の構成を説明する。このＱＲコードリーダ２０は、第１実施形態で説明したＱＲコードプリンタ１０により印刷されたＱＲコードＱをデコード可能なＱＲコードリーダ２０である。なお、ＱＲコードリーダ２０によりデコード可能なＱＲコードＱの構成は、図３および図４を参照して既に説明しているので、ここでは説明を割愛する。
【００６１】
まず、ＱＲコードリーダ２０の構成を図５を参照して説明する。なお、図５には、ＱＲコードリーダのハードウェア構成例を示すブロック図が図示されている。
【００６２】
図５に示すように、ＱＲコードリーダ２０は、主に、照明光源２１、受光センサ２３、結像レンズ２７等の光学系と、メモリ３５、制御回路４０、操作スイッチ４２、液晶表示器４６等のマイコン系と、電源スイッチ４１、バッテリ４９等の電源系と、から構成されている。なお、これらは、図略のプリント配線板に実装あるいは図略のハウジング内に内装されており、ハードウェア的には一般仕様のＱＲコードリーダ（読取装置）と同様に構成されている。
【００６３】
光学系は、照明光源２１、受光センサ２３、結像レンズ２７等から構成されている。照明光源２１は、照明光Ｌｆを発光可能な照明光源として機能するもので、例えば、赤色のＬＥＤとこのＬＥＤの出射側に設けられる拡散レンズ、集光レンズ等とから構成されている。この構成では、受光センサ２３を挟んだ両側に照明光源２１が設けられており、図略のケースの読取口を介してラベルＰに向けて照明光Ｌｆを照射可能に構成されている。このラベルＰには、第１実施形態で説明したＱＲコードＱが印刷されている。
【００６４】
受光センサ２３は、ラベルＰやＱＲコードＱに照射されて反射した反射光Ｌｒを受光可能に構成されるもので、例えば、Ｃ−ＭＯＳやＣＣＤ等の固体撮像素子である受光素子を２次元に配列したエリアセンサが、これに相当する。受光センサ２３は、結像レンズ２７を介して入射する入射光をこの受光面２３ａで受光可能に図略のプリント配線板に実装されている。
【００６５】
結像レンズ２７は、外部から読取口を介して入射する入射光を集光して受光センサ２３の受光面２３ａに像を結像可能な結像光学系として機能するもので、例えば、鏡筒とこの鏡筒内に収容される複数の集光レンズとにより構成されている。
【００６６】
次に、マイコン系の構成概要を説明する。マイコン系は、増幅回路３１、Ａ／Ｄ変換回路３３、メモリ３５、アドレス発生回路３６、同期信号発生回路３８、制御回路４０、操作スイッチ４２、ＬＥＤ４３、ブザー４４、液晶表示器４６、通信インタフェース４８等から構成されている。このマイコン系は、その名の通り、マイコンとして機能し得る制御回路４０およびメモリ３５と中心に構成される。
【００６７】
光学系の受光センサ２３から出力される画像信号は、増幅回路３１に入力されることで所定ゲインで増幅された後、Ａ／Ｄ変換回路３３に入力されると、アナログ信号からディジタル信号に変換される。そして、ディジタル化された画像信号、つまり画像データは、メモリ３５に入力されると、画像データ蓄積領域に蓄積される。なお、同期信号発生回路３８は、受光センサ２３およびアドレス発生回路３６に対する同期信号を発生可能に構成されており、またアドレス発生回路３６は、この同期信号発生回路３８から供給される同期信号に基づいて、メモリ３５に格納される画像データの格納アドレスを発生可能に構成されている。
【００６８】
メモリ３５は、半導体メモリ装置で、例えばＲＡＭ（ＤＲＡＭ、ＳＲＡＭ等）やＲＯＭ（ＥＰＲＯＭ、ＥＥＰＲＯＭ等）がこれに相当する。このメモリ３５のうちのＲＡＭには、前述した画像データ蓄積領域のほかに、制御回路４０が算術演算や論理演算等の各処理時に利用する作業領域等も確保可能に構成されている。またＲＯＭには、後述するデコード処理等を実行可能な所定プログラムやその他、照明光源２１、受光センサ２３等の各ハードウェアを制御可能なシステムプログラム等が予め格納されている。
【００６９】
制御回路４０は、ＱＲコードリーダ２０全体を制御可能なマイコンで、ＣＰＵ、システムバス、入出力インタフェース等からなり、メモリ３５とともに情報処理装置を構成し得るもので情報処理機能を有する。この制御回路４０には、内蔵された入出力インタフェースを介して種々の入出力装置と接続可能に構成されており、本構成の場合、電源スイッチ４１、操作スイッチ４２、ＬＥＤ４３、ブザー４４、液晶表示器４６、通信インタフェース４８等が接続されている。
【００７０】
これにより、例えば、電源スイッチ４１や操作スイッチ４２の監視や管理、またインジケータとして機能するＬＥＤ４３の点灯・消灯、ビープ音やアラーム音を発生可能なブザー４４の鳴動のオンオフ、さらには読み取ったＱＲコードＱによるコード内容を画面表示可能な液晶表示器４６の画面制御や外部装置とのシリアル通信を可能にする通信インタフェース４８の通信制御等を可能にしている。なお、通信インタフェース４８に接続される外部装置には、当該ＱＲコードリーダ２０の上位システムに相当するホストコンピュータＨＳＴ等が含まれる。
【００７１】
電源系は、電源スイッチ４１、バッテリ４９等により構成されており、制御回路４０により管理される電源スイッチ４１のオンオフによって、上述した各装置や各回路に、バッテリ４９から供給される駆動電圧の導通や遮断が制御されている。なお、バッテリ４９は、所定の直流電圧を発生可能な二次電池で、例えば、リチウムイオン電池等がこれに相当する。また、バッテリ４９によることなく、例えば、通信インタフェース４８を介して接続されるホストコンピュータＨＳＴ等の外部装置から電力供給を受ける構成を採る場合もあり、この場合には当該バッテリ４９は不要となる。
【００７２】
このようにＱＲコードリーダ２０を構成することによって、例えば、電源スイッチ４１がオンされて所定の自己診断処理等が正常終了し、ＱＲコードＱの読み取りが可能な状態になると、照明光Ｌｆの発光を指示する操作スイッチ４２（例えばトリガースイッチ）の入力を受け付ける。これにより、利用者がトリガースイッチを引いてオンにすることで、制御回路４０が同期信号を基準に照明光源２１に発光信号を出力するので、当該発光信号を受けた照明光源２１は、ＬＥＤを発光させて照明光Ｌｆを照射する。
【００７３】
すると、ＱＲコードＱに照射された照明光Ｌｆが反射し、その反射光Ｌｒが読取口を介して結像レンズ２７に入射するため、受光センサ２３の受光面２３ａには、ＱＲコードＱの像が結像される。これにより、ＱＲコードＱの像が受光センサ２３を露光するため、上述したマイコン系によって画像処理された当該ＱＲコードＱの画像データが、メモリ３５の画像データ蓄積領域を介して、次に説明するデコード処理に渡される。
【００７４】
ここで、デコード処理を図４，図６および図７を参照して説明する。なお、図６には、デコード処理の流れを示すフローチャートが図示されている。また図７には、図６に示す復号化処理の流れを示すフローチャートが図示されている。また、図４には、１型のＱＲコードの構成例を示す説明図が図示されている。
【００７５】
図６に示すように、デコード処理は、ＱＲコードリーダ２０の電源投入により起動する制御回路４０およびメモリ３５によって開始され、まずステップＳ２０１により初期設定処理が行われる。この処理は、メモリ３５の作業領域や画像データを蓄える画像データ蓄積領域をクリアしたり、所定のフラグやカウンタ等をクリアする。なお、ここで説明するＱＲコードリーダ２０は、ホストコンピュータＨＳＴと接続されており、当該ホストコンピュータＨＳＴから設定データとして復号キーのデータを取得するものとする。
【００７６】
ステップＳ２０３では、タイマーのカウント値をクリアする処理が行われる。このステップＳ２０３でカウンタ値がクリアされるタイマーは、次のステップＳ２０５により所定時間の経過を計時するものである。
【００７７】
ステップＳ２０５では、先のタイマーにより所定時間が経過したか否かを判断する処理が行われる。即ち、ホストコンピュータＨＳＴから送られてくる設定データに復号キーのデータが含まれているか否かを次のステップＳ２０９により判断する必要上、例えば、所定時間として５秒間が経過したか否かを判断し、この時間が経過するまでに、ホストコンピュータＨＳＴから暗号化に関するデータが送られてこない場合には、所定時間の経過とともにステップＳ２０７に処理を移行する（Ｓ２０５；Ｙｅｓ）。
【００７８】
これに対し、所定時間が経過していない場合には（Ｓ２０５；Ｎｏ）、次のステップＳ２０９により復号キー（復号鍵）を受信したか否かを判断する処理が行われる。そして、これを受信していると判断した場合には（Ｓ２０９；Ｙｅｓ）、続くステップＳ２１１に処理を移行し、受信していると判断できない場合には（Ｓ２０９；Ｎｏ）、前述したステップＳ２０５に処理を戻して、再度、時間の経過を判断する。
【００７９】
そして、所定時間が経過したとステップＳ２０５により判断した場合には（Ｓ２０５；Ｙｅｓ）、ステップＳ２０７により所定のフラグに「０」をセットする。このフラグは、ＱＲコードＱの秘匿データコードを復号キーで復号するか否かを示すもので、「０」がセットされている場合には、復号キーで復号しないことを示し、「１」がセットされている場合には、復号キーで復号することを示す。このため、２０９により復号キーを受信していると判断した場合には（Ｓ２０９；Ｙｅｓ）、続くステップＳ２１１によりこのフラグに「１」をセットする処理が行われる。
【００８０】
ステップＳ２１１により所定のフラグに「１」をセットすると、続くステップ２１３により、画像データを取得する処理が行われる。即ち、メモリ３５の画像データ蓄積領域から蓄えられている画像データを読み出す処理を行う。これにより、例えば、図４に示すようなＱＲコードＱのコード画像が得られる。
【００８１】
続くステップＳ２１５では、位置検出パターンを検出する処理が行われる。即ち、ＱＲコードＱは、図４に示すように、その三隅に位置検出パターンが設けられているため、これらを検出することによって、次のステップＳ２１７によりＱＲコードＱのコード外形を検出する。
【００８２】
そして、ステップＳ２１９により各セルの中心座標を算出する処理を行うことによって次ステップＳ２２１により各セルの白黒を判別する。これにより、図４に示す形式情報（図４に示す斜線部分）やデータブロックを認識可能になるので、続くステップＳ２２３により、欠損等しているデータブロックがある場合には、そのブロックを誤り訂正可能であるか否かを判断する。
【００８３】
そして、ステップＳ２２３により誤り訂正可能であると判断できる場合には（Ｓ２２３；ＯＫ）、誤り訂正をして続くステップＳ３００により復号化処理を行う。これに対し、ステップＳ２２３により誤り訂正可能であると判断できない場合には（Ｓ２２３；ＮＧ）、誤り訂正できないので、ステップＳ２１３に処理を移行して再度、画像データを取得してステップＳ２１５〜Ｓ２２１の各処理を行う。
【００８４】
ステップＳ３００は、その詳細が図７に図示されているので、ここからは図７を参照して復号化処理を説明する。図７に示すように、復号化処理では、ステップＳ３０１により、まずカウンタｎに０（零）をセットする処理が行われる。このカウンタｎは、本復号化処理において、ＱＲコードＱを構成するデータコードの順番を示す変数として機能する。
【００８５】
ステップＳ３０３では、カウンタｎが指すｎ番目のデータコードを取得する処理が行われる。そして、続くステップＳ３０５では、ステップＳ３０３により取得されたｎ番目のデータコードが、終端識別コードであるか否かを判断する処理が行われる。これにより、当該データコードが終端識別コードであると判断した場合には（Ｓ３０５；Ｙｅｓ）、終端識別コードよりも前に配置される通常のデータコードはこれ以上、当該ＱＲコードＱには含まれていないことになるので、ステップＳ３１５に処理を移行する。
【００８６】
これに対し、当該データコードが終端識別コードであると判断できない場合には（Ｓ３０５；Ｎｏ）、終端識別コードよりも前にまだ通常のデータコードが存在することになるので、続くステップＳ３０７に処理を移行して次のデータコード、つまり（ｎ＋１）番目のデータコードをコード数ｉを取得する。これは、第１実施形態で図３(D) を参照して説明したように、データコードの２文字目相当の位置には、文字数が格納されていることに基づくもので、その詳細は、ＪＩＳの基本仕様（JIS X 0510:2004）の「8.4データの符号化」に記載されている。
【００８７】
ステップＳ３０７によりコード数ｉを取得すると、続くステップＳ３０９では、この文字数（ｉ）分だけデータコードを取得する処理が行われ、さらにステップＳ３１１により当該データコード、つまり開示データコード（開示するデータを表すコード語としてコード化されたデータコード）を復号（デコード）する処理が行われる。
【００８８】
ステップＳ３１１による復号処理が終わると、ステップＳ３１３により、カウンタｎが次のデータコードを指すように「ｎ＋ｉ＋１」をカウンタｎに設定する処理が行われた後、再びステップＳ３０３に処理を戻してｎ番目のデータコードを取得する処理が行われる。
【００８９】
このように、ステップＳ３０３〜Ｓ３１３では、終端識別コードの前方に配置されて元来デコードされる通常のデータコード（第１のデータコード、開示データコード）を取得してデコードする処理が行われる。このため、これらの各ステップを実行する制御回路４０等は、「第１デコード手段」に相当し得るものである。
【００９０】
ステップＳ３１５は、前述した所定のフラグに「１」がセットされているか否か、つまりＱＲコードＱの秘匿データコードを復号キーで復号するか否かを判断する処理が行われる。そして、当該フラグに「１」がセットされていない場合には（Ｓ３１５；Ｎｏ）、復号キーで復号する必要がないため、本復号化処理を終了して図６に示すステップＳ３００を終えてデコード処理を終了する。
【００９１】
これに対し、所定のフラグに「１」がセットされている場合には（Ｓ３１５；Ｙｅｓ）、復号キーで復号する必要があるため、続くステップＳ３１７に処理を移行してカウンタｎにｎ＋１を設定し、さらにステップＳ３１９によりカウンタｎが指すｎ番目のデータコードを取得する処理が行われる。
【００９２】
そして、続くステップＳ３２１では、ステップＳ３１９により取得されたｎ番目のデータコードが、秘匿識別コードであるか否かを判断する処理が行われる。このため、このステップＳ３２１を実行する制御回路４０等は、「データコード判断手段」や「秘匿識別コード判断手段」に相当し得るものである。
【００９３】
これにより、当該データコードが秘匿識別コードであると判断した場合には（Ｓ３２１；Ｙｅｓ）、秘匿識別コードよりも後には、秘匿データコードが存在することになるので、続くステップＳ３２３に処理を移行して次のデータコード、つまり（ｎ＋１）番目のデータコードをコード数ｊを取得する。これも、ステップＳ３０９と同様に、データコードの２文字目相当の位置には、文字数が格納されていることに基づくものである。
【００９４】
なお、ステップＳ３２１により秘匿識別コードが配置されていると判断した場合には、例えば、ホストコンピュータＨＳＴに対して当該ＱＲコードＱには、秘匿識別コードが配置されている旨を通知するように構成しても良い。これにより、ホストコンピュータＨＳＴでは、終端識別コードよりも後方のデータコードが秘匿データコードである旨を把握することができる。また、本来、埋め草コードしか配置されない終端識別コードの後のコード領域（コード領域の空き部分）に、埋め草コード以外のもので秘匿データコードではないもの（例えばデータ化けにより埋め草コードに該当しなくなったもの）が配置されている場合には、秘匿データコードである旨の情報がホストコンピュータＨＳＴに対して出力されないので、秘匿データコード以外のものをデコードすることで生じ得る誤動作を防止することができる。
【００９５】
これに対し、当該データコードが秘匿識別コードであると判断できない場合には（Ｓ３２１；Ｎｏ）、秘匿識別コードよりも後には、これ以上、秘匿データコードが当該ＱＲコードＱには含まれていないことになるので、本復号化処理を終了して図６に示すステップＳ３００を終えてデコード処理を終了する。
【００９６】
ステップＳ３２３によりコード数ｊを取得すると、続くステップＳ３２５では、この文字数（ｊ）分だけデータコードを取得する処理が行われ、さらにステップＳ３２７によりカウンタｎが次のデータコード、つまり秘匿データコードを指すように「ｎ＋ｊ＋２」をカウンタｎに設定する処理が行われた後、ステップＳ３２９によりｎ番目の復号キー検査データ（鍵特定情報）を取得する処理が行われる。
【００９７】
そして、このステップＳ３２９により取得した復号キー検査データに基づいて、先のステップＳ２０９によりホストコンピュータＨＳＴから受信した復号キーがこのｎ番目の秘匿データコードの暗号化データを解読する鍵として適合しているか否かの判断をステップＳ３３１により行う。ステップＳ３３１に当該復号キーが適合していると判断した場合には（Ｓ３３１；Ｙｅｓ）、続くステップＳ３３３により暗号化データを解読する。
【００９８】
なお、ここでの暗号化は、第１実施形態で説明した公知の視覚復号型暗号技術（視覚復号型秘密分散法）を用いたもので、これにより、秘匿データコードの暗号化データがこのような視覚復号型暗号技術により暗号化されている場合でも、復号して元の平文に戻すことができる。なお、このステップＳ３３３を実行する制御回路４０等は、「復号手段」に相当し得るものである。
【００９９】
これに対して、ステップＳ３３１に当該復号キーが適合していると判断できない場合には（Ｓ３３１；Ｎｏ）、当該ｎ番目の秘匿データコードを解読することなく、その次の秘匿データコードを取得すべく、ステップＳ３３７に移行してカウンタｎにｎ＋１を設定する。これにより、ＱＲコードリーダ２０が有する復号キーが当該ｎ番目の秘匿データコードを解読できる復号キーでない場合には、当該ｎ番目の秘匿データコードは解読も復号されないので、不要な復号処理を抑制することができる。なお、このステップＳ３３１を実行する制御回路４０等は、「鍵適合判断手段」に相当し得るものである。
【０１００】
ステップＳ３３５では、秘匿データコードを復号する処理が行われる。即ちその前のステップＳ３３３により暗号化データを解読することができているので、このステップＳ３３５により解読した暗号化データに基づいて秘匿データコードを復号（デコード）する。
【０１０１】
ステップＳ３３５による復号処理が終わると、ステップＳ３３７により、カウントｎが次のデータコードを指すように「ｎ＋１」をカウンタｎに設定する処理が行われた後、続くステップＳ３３９により、ｎ番目のデータコードを取得する処理が行われる。
【０１０２】
そして、ステップＳ３４１により、ステップＳ３３９で取得したｎ番目のデータコードが埋め草コードであるか否かを判断する処理が行われる。これにより、もし当該ｎ番目のデータコードが埋め草コードである場合には（Ｓ３４１；Ｙｅｓ）、これ以上、当該ＱＲコードＱには秘匿データコードが含まれていないことになるので、本復号化処理を終了して図６に示すステップＳ３００を終えてデコード処理を終了する。
【０１０３】
これに対し、ステップＳ３４１により当該ｎ番目のデータコードが埋め草コードであると判断されない場合には（Ｓ３４１；Ｎｏ）、当該ｎ番目のデータコードは、秘匿データコードであるので、ステップＳ３２３に処理を移行して、再び（ｎ＋１）番目のデータコードをコード数ｊを取得することで、前述と同様の処理を行う。
【０１０４】
このように、ステップＳ３１９，Ｓ３２３〜Ｓ３３５では、終端識別コードの後方に配置されて、本来はデコードされないデータコード（第２のデータコード、秘匿データコード）を取得してデコードする処理が行われる。このため、これらの各ステップを実行する制御回路４０等は、「第２デコード手段」に相当し得る。
【０１０５】
以上説明したように、本構成に係るＱＲコードリーダ２０によると、本来、埋め草コードしか配置されない終端識別コードの後のコード領域（コード領域の空き部分）に、秘匿データコード（第２のデータコード）が配置されていても、この秘匿データコードをデコードすることができる。したがって、コード語を配置すべきコード領域の空き部分に存在するデータコードをデコードすることができる。よって、第１実施形態で説明したＱＲコードプリンタ１０により印刷されたＱＲコードＱを、本構成に係るＱＲコードリーダ２０によりデコードすることができる。
【０１０６】
なお、上述したデコード処理では、ステップＳ３２９によりｎ番目の復号キー検査データを取得するように構成したが、例えば、第１実施形態で図３(E) を参照して説明したように復号キーそのものが秘匿データコードに付加されている場合には、このステップＳ３２９に代えて、ｎ番目の復号キーを取得するように構成しても良い。これにより、秘匿データコードの復号キー（復号できる鍵）を当該ＱＲコードリーダ２０が持っていなくても、当該秘匿データコードを復号して元の平文に戻すことができる。この場合、「ｎ番目の復号キーを取得する」処理を実行する制御回路４０等は、「鍵分離手段」に相当し得る。
【０１０７】
また、各秘匿データコードごとに異なった暗号キーで暗号化されている場合であっても、各秘匿データコードについてそれぞれの復号キーが付加されているときには、ステップＳ３２９に代えて、ｎ番目の復号キーを取得するように構成することで、秘匿データコードの復号キーを当該ＱＲコードリーダ２０が持っていなくても、それぞれの秘匿データコードを復号して元の平文に戻すことができる。
【０１０８】
さらに、上述したデコード処理では、ステップＳ３２９によりｎ番目の復号キー検査データを取得するように構成したが、例えば、第１実施形態で図３(D) を参照して説明したように位置情報としての「開始桁」が秘匿データコードに付加されている場合には、このステップＳ３２９に代えて、秘匿データコードから「開始桁」を分離してこの分離された「開始桁」に基づいて秘匿データコードを復号（デコード）した秘匿データをコード化される前のデータレコード中の位置関係に配置するように構成しても良い。これにより、コード語としてコード化される前のデータレコード中の位置関係において前後して混在する場合であっても、デコードしたデータを、この位置情報に基づいてコード化前の位置関係に配置することができる。この場合、「秘匿データコードから「開始桁」を分離する」処理を実行する制御回路４０等は、「位置情報分離手段」に相当し得る。また、「この分離された「開始桁」に基づいて秘匿データコードを復号（デコード）した秘匿データをコード化される前のデータレコード中の位置関係に配置する」処理を実行する制御回路４０等は、「データ配置手段」に相当し得る。
【０１０９】
［第２実施形態］
次に、本発明の第２実施形態に係るＱＲコードプリンタ１０による他のＱＲコードの生成処理を図８および図９を参照して説明する。ここで説明する他のＱＲコードは、図９(C) に示すように、埋め草コード（11101100）の代わりに、任意のコード（例えば00000000や11111111）を空き領域に詰めるフォーマットを採るものである。
【０１１０】
なお、図８に示すコード生成処理のフローチャートにおいて、既に説明したコード生成処理（図２）を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。また、図９に示すデータやコードのフォーマット例についても、同様に、既に説明したフォーマット例（図３）と実質的に同一のフォーマットについては詳細な説明を省略する。なお、図９では、便宜上、開示データコードを「開示コード」、終端識別コードを「終端子」、とそれぞれ表現している。
【０１１１】
図８に示すように、コード生成処理は、ＱＲコードプリンタ１０の電源投入により起動するＭＰＵ１１およびメモリ１２によって開始され、ステップＳ１０１により初期設定処理が行われると、次にステップＳ１０３により印刷データを受信する。そして、ステップＳ１０７，Ｓ１１１を経て秘匿データを受信すると、ステップＳ１１５により開示データおよび秘匿データを並び替え、さらにステップＳ１１７により開示データや秘匿データ等の各データを符号化した後、ステップＳ１１９により誤り訂正符号を生成してステップＳ１２１により開示データコードの後に終端識別コードを付加する。
【０１１２】
なお、このような終端識別コードを開示データコードの後に付加するのではなく、例えば、図９(C) の括弧内に示すフォーマットのように、全ての開示データコードのデータ長を算出することによって得られる「開示データコードがなすコード列の終端位置」（以下単に「終端位置」という）を特定できる終端位置データ（図９(C) では「終端情報」）を開示データコードの先頭に配置または付加しても良い。
【０１１３】
そして、印刷データに秘匿データが含まれている場合には（Ｓ１２３；Ｙｅｓ）、ステップＳ１２５〜Ｓ１３３によって、終端位置に続けて秘匿識別コード等を付加した後、また印刷データに秘匿データが含まれていない場合には（Ｓ１２３；Ｎｏ）、終端位置の後に、それぞれステップＳ１３５’により、前述した任意コードとして、例えば、00000000や11111111を付加する。
【０１１４】
即ち、ステップＳ１３５’による任意コードの付加処理では、終端位置よりも後で誤り訂正コードよりも前の範囲において、秘匿データコードを詰めても空き領域（コード領域の空き部分）が生じる場合に埋め草コードに代えて任意のコード（例えば00000000や11111111）を詰める。このため、例えば、このようなデータフォーマットを構成するメモリ上で、予め全ての範囲をこのような任意のコードで埋める初期化処理をステップＳ１０１において処理している場合には、当該ステップＳ１３５’を行うことなく省略できる（図８ではステップＳ１３５’の枠線は破線で表現されている）。
【０１１５】
そして、ステップＳ１３７により、誤り訂正コードを付加する処理が行われると、図９(C) に示すフォーマットのデータコードが生成されるため、続くステップＳ１３９によりこのようなデータコードに基づいて各セルを生成して図４に示して説明したデータブロックに配置される。つまり、本来、埋め草コードが配置される範囲に前述した任意コードが配置されること以外は、図２〜図４を参照して説明したＱＲコードと同様に配置される。
【０１１６】
以上説明したように、本第２実施形態に係るＱＲコードプリンタ１０によると、ＭＰＵ１１により実行されるコード生成処理によって生成されるＱＲコードＱでは、ステップＳ１３３により秘匿データコードが終端位置の後に配置されている。これにより、終端位置の後に配置された秘匿データコードは、一般仕様の読取装置では読み取りの対象にならないので、このような秘匿データコードが含まれる二次元コードを一般仕様の読取装置で読み取っても、当該秘匿データコードによって秘匿しようとするデータの存在はわからない。したがって、一般仕様の読取装置の利用者には秘匿データの存在を認識させないようにすることができる。
【０１１７】
よって、このような秘匿データコードを含んでいても、一般仕様の読取装置には当該秘匿データコードのデコードデータに相当するものが画面表示されないので、利用者に秘匿データの存在を認識させることがなく、当該利用者に対して不信感を与えたり、解読を試みようとする不用意な動機を与えることがない。また、当該秘匿データコードのデコードデータに相当するものが制御データ等であっても、それが画面表示されることがないので、画面表示が乱れたりもしない。
【０１１８】
なお、上述した第２実施形態では、ＱＲコードプリンタ１０により、ラベルＰにＱＲコードＱを印刷する例を挙げて説明したが、本発明はこれに限られることはなく、ＱＲコードＱを視覚的に表現可能なものであればよく、例えば、図８に示すコード生成処理をパソコン本体２により実行してディスプレイ３にＱＲコードＱを表示するように構成しても良い。この場合、コード生成処理は、コンピュータプログラムとして概念できるので、例えば、「開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置、または前記開示データコードがなすコード列の終端位置を特定可能な終端識別情報をこのコード列の所定の位置に配置する二次元コードの生成装置として、コンピュータを機能させるためのプログラムであって、秘匿するデータを表すコード語としてコード化された秘匿データコードを、前記終端識別コードの後、または前記終端識別情報により特定される前記終端位置の後、に配置することを特徴とする二次元コードの生成プログラム。」と表現可能な技術的思想を把握できる。これにより、この二次元コードの生成プログラムにより二次元コードの生成装置として機能するコンピュータは、上述したＱＲコードプリンタ１０のＭＰＵ１１等と同様の作用および効果を奏する。
【０１１９】
また、上述した第２実施形態では、ＱＲコードプリンタ１０にパソコン１を接続して当該パソコン１から印刷データを送る構成を例示して説明したが、英数字、漢字や記号等の文字データを出力可能な情報処理装置であれば、このような機能を備えたデジタルカメラや携帯電話機、あるいはハンドヘルドコンピュータやハンディターミナル等を、ＱＲコードプリンタ１０に接続する構成を採っても上述した作用および効果を得ることができる。
【０１２０】
次に、上述の例とは異なるＱＲコードリーダ２０による他のＱＲコードのデコード処理を図１０および図１１を参照して説明する。なお、「他のＱＲコード」とは、埋め草コード（11101100）の代わりに、任意のコード（例えば00000000や11111111）を空き領域に詰めるフォーマットを採るコードのことで、第２実施形態に係るＱＲコードプリンタ１０により印刷されたＱＲコードのことである。
【０１２１】
なお、図１０に示すデコード処理のフローチャートにおいて、既に説明したデコード処理（図６）を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。また、図１１に示す復号化処理のフローチャートにおいて、既に説明した復号化処理（図７）を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。
【０１２２】
図１０に示すように、デコード処理は、ＱＲコードリーダ２０の電源投入により起動する制御回路４０およびメモリ３５によって開始され、ステップＳ２０１により初期設定処理が行われると、ステップＳ２０５により所定時間を経過した後（Ｓ２０５；Ｙｅｓ）、またはステップＳ２０９により復号キーを受信した後（Ｓ２０９；Ｙｅｓ）、ステップＳ２１３により画像データを取得する。そして、ステップＳ２１５，Ｓ２１７，Ｓ２１９，Ｓ２２１によりＱＲコードＱを画像認識してステップＳ２２３により誤り訂正可能であるか否かを判断して、誤り訂正可能であると判断できる場合には（Ｓ２２３；ＯＫ）、誤り訂正をした後、ステップＳ３００’により復号化処理（図１１）を行う。
【０１２３】
図１１に示すように、ステップＳ３００’の復号化処理では、ステップＳ３０１〜Ｓ３１３により終端位置（開示データコードがなすコード列の終端位置で、終端識別コードまたは終端位置データにより特定可能なもの）が見つかると（Ｓ３０５’；Ｙｅｓ）、ステップＳ３１５，Ｓ３１７，Ｓ３１９によりカウンタｎが指すｎ番目のデータコードを取得してそれが秘匿識別コードであるか否かをステップＳ３２１により判断する。そして、秘匿識別コードであると判断すると（Ｓ３２１；Ｙｅｓ）、Ｓ３２３〜Ｓ３３１により復号キーの適合を調べてその復号キーでＳ３３３により暗号化データを解読し、さらにステップＳ３３５により秘匿データコードを復号する。
【０１２４】
なお、ステップＳ３２１により秘匿識別コードが配置されていると判断した場合には、例えば、ホストコンピュータＨＳＴに対して当該ＱＲコードＱには、秘匿識別コードが配置されている旨を通知するように構成しても良い。これにより、ホストコンピュータＨＳＴでは、終端識別コードよりも後方のデータコードが秘匿データコードである旨を把握することができる。また、本来、埋め草コードしか配置されない終端識別コードの後のコード領域（コード領域の空き部分）に、埋め草コード以外のもので秘匿データコードではないもの（例えばデータ化けにより埋め草コードに該当しなくなったもの）が配置されている場合には、秘匿データコードである旨の情報がホストコンピュータＨＳＴに対して出力されないので、秘匿データコード以外のものをデコードすることで生じ得る誤動作を防止することができる。
【０１２５】
そして、ステップＳ３３６’によりこの復号した秘匿データコードが最後の秘匿データコードであるか否かを判断する。具体的には、例えば、図９(C) に示すように、秘匿識別子の次には、その後に続く秘匿データコードのデータ長が格納されているので、これに基づいて当該秘匿データコードが最後の秘匿データコードに該当するか否かを判断する。また、前述したように、最後の秘匿データコードの後、つまり空き領域（コード領域の空き部分）には任意のコード（例えば00000000や11111111）が詰められているので、このような任意のコードの存在に基づいて当該秘匿データコードが最後の秘匿データコードに該当するか否かを判断する。
【０１２６】
ステップＳ３３６’により当該秘匿データコードが最後の秘匿データコードであると判断されない場合（最後の秘匿データコードでない判断された場合）には（Ｓ３３６’；Ｎｏ）、ステップＳ３３７により、カウントｎが次のデータコードを指すように「ｎ＋１」をカウンタｎに設定する処理が行われた後、続くステップＳ３３９により、ｎ番目のデータコードを取得する処理が行われて、前述と同様にステップＳ３２３〜Ｓ３３１により復号キーの適合を調べる。
【０１２７】
これに対し、ステップＳ３３６’により当該秘匿データコードが最後の秘匿データコードであると判断された場合には（Ｓ３３６’；Ｙｅｓ）、これ以上、当該ＱＲコードＱには秘匿データコードが含まれていないことになるので、本復号化処理を終了して図１０に示すステップＳ３００’を終えてデコード処理を終了する。
【０１２８】
なお、ステップＳ３０３〜Ｓ３１３では、終端位置の前方に配置されて元来デコードされる通常のデータコード（第１のデータコード、開示データコード）を取得してデコードする処理が行われる。このため、これらの各ステップを実行する制御回路４０等は、「第１デコード手段」に相当し得るものである。
【０１２９】
また、ステップＳ３２１では、ステップＳ３１９により取得されたｎ番目のデータコードが、秘匿識別コードであるか否かを判断する処理が行われる。このため、このステップＳ３２１を実行する制御回路４０等は、「データコード判断手段」や「秘匿識別コード判断手段」に相当し得るものである。さらに、ステップＳ３３１やＳ３３３を実行する制御回路４０等は、「鍵適合判断手段」や「復号手段」に相当し得るものである。
【０１３０】
さらに、ステップＳ３１９，Ｓ３２３〜Ｓ３３５では、終端位置の後方に配置されて、本来はデコードされないデータコード（第２のデータコード、秘匿データコード）を取得してデコードする処理が行われる。このため、これらの各ステップを実行する制御回路４０等は、「第２デコード手段」に相当し得るものである。
【０１３１】
以上説明したように、このＱＲコードリーダ２０によると、本来、データコードが配置されない終端位置の後のコード領域（コード領域の空き部分）に、秘匿データコード（第２のデータコード）が配置されていても、この秘匿データコードをデコードすることができる。したがって、コード語を配置すべきコード領域の空き部分に存在するデータコードをデコードすることができる。よって、ＱＲコードプリンタ１０により印刷されたＱＲコードＱを、このＱＲコードリーダ２０によりデコードすることができる。
【０１３２】
なお、上述したデコード処理では、ステップＳ３２９によりｎ番目の復号キー検査データを取得するように構成したが、例えば、第１実施形態で図３(E) を参照して説明したように第２実施形態でも同様に、復号キーそのものが秘匿データコードに付加されている場合には（図９(E) 参照）、このステップＳ３２９に代えて、ｎ番目の復号キーを取得するように構成しても良い。これにより、秘匿データコードの復号キー（復号できる鍵）を当該ＱＲコードリーダ２０が持っていなくても、当該秘匿データコードを復号して元の平文に戻すことができる。この場合、「ｎ番目の復号キーを取得する」処理を実行する制御回路４０等は、「鍵分離手段」に相当し得る。
【０１３３】
また、各秘匿データコードごとに異なった暗号キーで暗号化されている場合であっても、各秘匿データコードについてそれぞれの復号キーが付加されているときには、ステップＳ３２９に代えて、ｎ番目の復号キーを取得するように構成することで、秘匿データコードの復号キーを当該ＱＲコードリーダ２０が持っていなくても、それぞれの秘匿データコードを復号して元の平文に戻すことができる。
【０１３４】
さらに、上述したデコード処理では、ステップＳ３２９によりｎ番目の復号キー検査データを取得するように構成したが、例えば、第１実施形態で図３(D) を参照して説明したように第２実施形態でも同様に、位置情報としての「開始桁」が秘匿データコードに付加されている場合には（図９(D) 参照）、このステップＳ３２９に代えて、秘匿データコードから「開始桁」を分離してこの分離された「開始桁」に基づいて秘匿データコードを復号（デコード）した秘匿データをコード化される前のデータレコード中の位置関係に配置するように構成しても良い。これにより、コード語としてコード化される前のデータレコード中の位置関係において前後して混在する場合であっても、デコードしたデータを、この位置情報に基づいてコード化前の位置関係に配置することができる。この場合、「秘匿データコードから「開始桁」を分離する」処理を実行する制御回路４０等は、「位置情報分離手段」に相当し得る。また、「この分離された「開始桁」に基づいて秘匿データコードを復号（デコード）した秘匿データをコード化される前のデータレコード中の位置関係に配置する」処理を実行する制御回路４０等は、「データ配置手段」に相当し得る。
【０１３５】
［第３実施形態］
次に、本発明の第３実施形態に係るＱＲコードプリンタ１０による他のＱＲコードの生成処理を図１２〜図１４を参照して説明する。ここで説明する他のＱＲコードは、図１４(B) 等に示すように、秘匿データコードα，β等に所定の加工を施して空き領域に詰めるフォーマットを採るものである。
【０１３６】
なお、図１２に示すコード生成処理のフローチャートにおいて、既に説明したコード生成処理（図２）を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。また、図１４に示すコードのフォーマット例についても、同様に、既に説明したフォーマット例（図３）と実質的に同一のフォーマットについては詳細な説明を省略する。なお、図１４では、便宜上、開示データコードを「開示コード」、終端識別コードを「終端子」、とそれぞれ表現している。
【０１３７】
図１２に示すように、コード生成処理は、ＱＲコードプリンタ１０の電源投入により起動するＭＰＵ１１およびメモリ１２によって開始され、ステップＳ１０１により初期設定処理が行われると、次にステップＳ１０３により印刷データを受信する。そして、ステップＳ１０７，Ｓ１１１を経て秘匿データを受信すると、ステップＳ１１７により開示データや秘匿データ等の各データを符号化した後、ステップＳ１２１’により開示データコードの後に終端識別コード等（開示データコードがなすコード列の終端位置を含む）を付加する。
【０１３８】
そして、印刷データに秘匿データが含まれている場合には（Ｓ１２３；Ｙｅｓ）、ステップＳ１２５，Ｓ１２７により終端位置に続けて秘匿識別コードを付加等した後、ステップＳ１３１により秘匿データコードを暗号化し、さらにステップＳ１３２により空き領域に埋め草コードを付加する。そして、この後にステップＳ５００による所定の加工処理が行われる。一方、印刷データに秘匿データが含まれていない場合には（Ｓ１２３；Ｎｏ）、これらの各処理（Ｓ１２５，Ｓ１２７，Ｓ１３１，Ｓ１３２，Ｓ５００）を行うことなく、ステップＳ１３３に処理を移行する。
【０１３９】
ここで、ステップＳ５００による所定の加工処理を図１３を参照して説明する。図１３に示すように、所定の加工処理では、まずステップＳ５０１によりポインタｉをゼロクリアする処理が行われる。このポインタｉは、ステップＳ５０７〜Ｓ５１７による分散配置処理の対象となるビット位置を指すもので、このクリア処理によって０ビット目からスタートする。
【０１４０】
ステップＳ５０３では、終端位置よりも後に存在する空き領域（図１４(A)〜(C)参照）、即ち、本来埋め草コードで埋められる領域で誤り訂正コードの範囲を除いた領域のビット数ｎを求める処理が行われる。この処理は、後述のステップＳ５１３により疑似乱数Ｒを求める際に使用される定数である。
【０１４１】
続くステップＳ５０５では、暗号化データのビット数と復号キー検査データのビット数との和ｍ（図１４(D)，(E)参照）を求める処理が行われる。即ち、分散配置処理の対象となる秘匿データコードのビット数を把握することにより、後述のステップＳ５１９による分散配置完了の可否判断を可能にしている。
【０１４２】
次のステップＳ５０７では、開示データコードと暗号化データとを２バイト単位で排他的論理和（ＥＸＯＲ）演算を行いその結果Ｓを求める処理が行われ、続くステップＳ５０９ではこのような演算結果ＳをステップＳ５１３による疑似乱数のシード値にセットする処理が行われる。このシード値は、所定の演算により疑似乱数を発生させるための種で、このシード値が同じであれば、発生する乱数はまったく同じものとなる。つまり、ステップＳ５１３による疑似乱数は、この演算結果Ｓの値によって発生する値およびその発生順が一義的に定まる。この点で、本加工処理は、開示データコードの内容に基づいて行われることとなる。
【０１４３】
ステップＳ５１１では、ポインタｉをインクリメント、つまり１だけカウントアップさせる処理が行われる。これにより、ステップＳ５１７等による分散配置処理の対象となるビットの位置（ポインタｉが指し示す位置）のカウントがアップされる。先の例では、０から１にカウントアップされることで、１ビット目が指し示めされる。
【０１４４】
続くステップＳ５１３により、疑似乱数Ｒを求める処理が行われる。この演算は、前述したシード値に基づいて所定の乱数発生アルゴリズムに従った情報処理を行うことにより、擬似的に乱数を発生させるもので、ここでは、１からｎ（ｎは、空き領域のビット数）までの範囲で、疑似乱数を発生させる。このため、例えば「Ｒ＝rand()mod ｎ ＋ １」なる演算式で演算される。
【０１４５】
なお、rand()は、シード値Ｓに対して疑似乱数を返す関数で、また、ｘ mod ｙは、ｘに対してモジュロー値ｙを求める関数である。即ち、先の演算式では、modの前の引数ｘ（rand()のこと）となる疑似乱数の値を、modの後の引数ｙ（ｎのこと）で割ったときの余りに、１を加えた値として疑似乱数Ｒが求められる。なお、ｎは、前述したように、空き領域のビット数である。
【０１４６】
このようにステップＳ５１３によって１〜ｎまでの疑似乱数Ｒが求められると、次のステップＳ５１５により当該疑似乱数Ｒが既に発生したものであるか否かの判断処理が行われる。つまり、疑似乱数Ｒとして同じ値が発生すると、次のステップＳ５１７による再配置処理においてビット値の上書きが行われることから、それ以前に同じビット位置に配置された値が破壊されてしまうことを防止するためである。このため、このステップＳ５１５により既に疑似乱数Ｒとして同じ値が発生していると判断された場合には（Ｓ５１５；Ｙｅｓ）、ステップＳ５１３に戻って再度、疑似乱数Ｒを求める。
【０１４７】
ステップＳ５１５により既に発生した疑似乱数Ｒと同じ値であると判断されない場合には（Ｓ５１５；Ｎｏ）、続くステップＳ５１７により暗号化データのｉビット目（ポインタｉが指し示すビットの位置）の値を空き領域のＲビット目にセットする処理、つまり配置処理が行われる。先の例では、１ビット目の値が空き領域のＲビット目にセットされる。これにより、本来１ビット目に位置している情報が、乱数により不規則的に発生するＲビット目に移動する。
【０１４８】
続くステップＳ５１９では、ポインタｉの値が、分散配置処理の対象となる秘匿データコードのビット数の終わり（最終ビット）に達しているか否かを判断する処理、つまり分散配置完了の可否判断が行われる。そして、ポインタｉと秘匿データコードの全ビット数とが一致している場合には、秘匿データコードの全てのビットが前述したステップＳ５０７〜５１７による分散配置処理が施されていることになるので（Ｓ５１９；Ｙｅｓ）、本加工処理を終了する。
【０１４９】
これに対して、ポインタｉと秘匿データコードの全ビット数とが一致していない場合には、秘匿データコードにはまだ分散配置処理が施されていないビットが残存することになるので（Ｓ５１９；Ｎｏ）、ステップＳ５１１によりポインタｉをカウントアップして再度ステップＳ５１３による疑似乱数発生処理を行う。
【０１５０】
このようにステップＳ５１３〜Ｓ５１７による処理を秘匿データコードの全ビットに対して繰り返し行うことにより、本来、１ビット目、２ビット目、３ビット目、…、（ｎ−１）ビット目、ｎビット目というように順番に並ぶ各ビット情報が、不規則的に変動する疑似乱数Ｒに従った位置にＲビット目にそれぞれ移動してしまう。このため、ステップＳ５００による所定の加工処理が終了すると、例えば、図１４(B) に示すように、分散配置処理が施される前の秘匿データコードα，β（図１４(A) ）は、いずれもビット単位でバラバラに分解されて秘匿データコード片として分散して再配置され、また、埋め草コードも同様に分散配置処理よってビット単位でバラバラに分解されるため、秘匿データコード片と混在した状態で、空き領域内に再配置される。
【０１５１】
これにより、暗号化されている秘匿データコードがさらにスクランブルされてしまうので、セキュリティの強度を一層高めることが可能となる。
【０１５２】
なお、本加工処理では、このようなステップＳ５０７〜Ｓ５１７による分散配置処理に代えて、例えば、ビット位置を変換可能なビット位置変換テーブル（変換テーブル）に基づくビットの並替えでも良い。具体的には、例えば、１ビット目を４ビット目に、２ビット目を１３ビット目に、３ビット目を１ビット目に、４ビット目を２ビット目に、５ビット目を１５ビット目に、６ビット目を１１ビット目に、７ビット目を８ビット目に、８ビット目を３ビット目に、９ビット目を１０ビット目に、１０ビット目を６ビット目に、１１ビット目を１２ビット目に、１２ビット目を５ビット目に、１３ビット目を９ビット目に、１４ビット目を１６ビット目に、１５ビット目を７ビット目に、１６ビット目を１４ビット目に、それぞれ位置を変換するビット位置変換テーブルを設けその変換規則に従ってビット位置を変換する。これにより、例えば、１６ビット構成のデータ「１００１０１１０１１０１０１１０」（９６Ｄ６ｈ）は、「０１０１１０１１０１１００００１」（５Ａ６１ｈ）に変換される。
【０１５３】
また、このようなビット位置変換テーブルを通すことによって、例えば、先の例では、１６進表記のデータ「９６Ｄ６ｈ」が、「５Ａ６１ｈ」に変換されることから、秘匿データコードを構成するビットにより特定されるデータ値、そのものを所定のデータ値変換テーブル（変換テーブル）に基づいて変換する技術的思想として把握することができる。なお、このデータ値の変換は、例えば、入力データＸを２倍にしてから１を減算して出力Ｙ（＝Ｘ×２−１）するといった所定のデータ値変換式によっても可能である。
【０１５４】
さらに、例えば、ビット位置を所定ビット数だけＬＳＢ側に循環してシフトするように、循環シフトレジスタを通しても良い。先の１６ビット構成のデータ例では、「１００１０１１０１１０１０１１０」（９６Ｄ６ｈ）は、「０１１０１００１０１１０１１０１」（６９６Ｄｈ）に変換される。勿論、シフト量は４ビットに限られることはなく、１６ビット構成の場合には、１ビット〜１５ビットのうちのいずれでも良く、またシフト方向もＭＳＢ側であっても良い。なお、ここで例示した１６ビット構成の１６ビットは、上述した暗号化データのビット数と復号キー検査データのビット数の和ｍに相当するものである。なお、図１４(D) には、上述したような分散配置処理以外のビットの並替えやビット値の変換によるフォーマット例（暗号化データ＋復号キー検査データ）が図示されている（図１４(E) は、比較として第２実施形態のコード生成処理により生成された秘匿コードの構成例である。）。
【０１５５】
また、前述したステップＳ５０７では、開示データコードと暗号化データとを２バイト単位で排他的論理和（ＥＸＯＲ）演算を行いその結果Ｓを求め、それをステップＳ５０９により疑似乱数のシード値にセットしたが、開示データコードに代えて、当該ＱＲコードＱに付随する固有情報、例えば、誤り訂正レベル（Ｌ，Ｍ，Ｑ，Ｈ）や型番（１〜４０）を用いて暗号化データとを排他的論理和（ＥＸＯＲ）演算を行いその結果Ｓを求めても良い。なお、誤り訂正レベルや型番の詳細や仕様は、例えば、日本工業規格（ＪＩＳ）の二次元コードシンボル−ＱＲコード−基本仕様（JIS X 0510:2004）に従う。
【０１５６】
ここで、図１２に戻ると、ステップＳ５００により所定の加工処理が終了した後は、続くステップＳ１３３により秘匿データコードを付加され、さらにステップＳ１３４により秘匿データコードが含まれているか否かを判断する処理が行われる。
【０１５７】
即ち、ステップＳ１３４では、秘匿データコードが含まれている場合には（Ｓ１３４；Ｙｅｓ）、前述したステップＳ１３２により埋め草コードが既に付加されていることから、続くステップＳ１３５による埋め草コードの付加が不要となる。このため、このような場合には、ステップＳ１３５による処理をスキップしてステップＳ１３７に処理を移行する。これに対し、秘匿データコードが含まれていない場合、つまり開示データコードのみの場合には（Ｓ１３４；Ｎｏ）、まだ埋め草コードが付加されていないため、続くステップＳ１３５により埋め草コードを付加してから、ステップＳ１３７に処理を移行する。
【０１５８】
そして、ステップＳ１３７により、誤り訂正コードを付加する処理が行われると、図１４(A)〜(C)に示すフォーマットのデータコードが生成されるため、続くステップＳ１３９によりこのようなデータコードに基づいて各セルを生成して図４に示して説明したデータブロックに配置される。
【０１５９】
以上説明したように、本第３実施形態に係るＱＲコードプリンタ１０によると、ＭＰＵ１１により実行されるコード生成処理によって生成されるＱＲコードＱでは、ステップＳ５００による加工処理により秘匿データコードに所定の加工を施して、終端識別コードの後、または終端識別情報により特定される終端位置の後、に配置する。これにより、秘匿データコードは、所定の加工を施されて当該秘匿データコードの存在がわからないように加工されているので、たとえ終端識別コードの後等を読み取る試みがなされても、秘匿データコードが配置されていることすらわからないので、セキュリティの強度を一層高めることができる。
【０１６０】
なお、上述した第３実施形態では、ステップＳ１１３の後に、開示データおよび秘匿データを並び替える処理（図２に示すＳ１１５相当）を介在させていないが、印刷データに、第三者に開示するデータ（開示データ）と、第三者には秘密にして隠しておきたいデータ（秘匿データ）と、が含まれており、これらがデータレコード中で混在している場合に、ステップＳ１１１により受信した「秘匿データのデータレコード中の位置関係を示す位置情報」に基づいて、データの順番を入れ替えて、開示データの集まりと秘匿データの集まりとに分ける処理を行っても良い。これにより、例えば、パソコン１から送られてくる印刷データのレコードに、開示データＡ、秘匿データα、開示データＢ、秘匿データβの順に並ぶデータが含まれていた場合には、ステップＳ１１５により、開示データＡ、開示データＢ、秘匿データα、秘匿データβの順に並び替える処理を行うことにより、開示データと秘匿データとがそれぞれまとめられるので、後のステップ１２１による終端識別コードの付加処理や、ステップＳ１２５による秘匿識別コードの付加処理等が容易になる。
【０１６１】
次に、上述の例とは異なるＱＲコードリーダ２０による他のＱＲコードのデコード処理を図１５〜図１７を参照して説明する。なお、ここで説明する他のＱＲコードは、図１４(B) 等を参照して前述したように、秘匿データコードα，β等に所定の加工を施して空き領域に詰めるフォーマットを採るものである。
【０１６２】
なお、図１５に示すデコード処理のフローチャートにおいて、既に説明したデコード処理（図１０）を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。また、図１６に示す復号化処理のフローチャートにおいて、既に説明した復号化処理（図１１）を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。
【０１６３】
図１５に示すように、デコード処理は、ＱＲコードリーダ２０の電源投入により起動する制御回路４０およびメモリ３５によって開始され、ステップＳ２０１により初期設定処理が行われると、ステップＳ２０５により所定時間を経過した後（Ｓ２０５；Ｙｅｓ）、またはステップＳ２０９により復号キーを受信した後（Ｓ２０９；Ｙｅｓ）、ステップＳ２１３により画像データを取得する。そして、ステップＳ２１５，Ｓ２１７，Ｓ２１９，Ｓ２２１によりＱＲコードＱを画像認識してステップＳ２２３により誤り訂正可能であるか否かを判断して、誤り訂正可能であると判断できる場合には（Ｓ２２３；ＯＫ）、誤り訂正をした後、ステップＳ３００”により復号化処理（図１６）を行う。
【０１６４】
図１６に示すように、ステップＳ３００”の復号化処理では、ステップＳ３０１〜Ｓ３１３により終端位置（開示データコードがなすコード列の終端位置で、終端識別コードまたは終端位置データにより特定可能なもの）が見つかると（Ｓ３０５’；Ｙｅｓ）、ステップＳ３１５，Ｓ３１７，Ｓ３１９によりカウンタｎが指すｎ番目のデータコードを取得してそれが秘匿識別コードであるか否かをステップＳ３２１により判断する。そして、秘匿識別コードであると判断すると（Ｓ３２１；Ｙｅｓ）、続くステップＳ３２３によりコード数ｊを取得した後、ステップＳ６００による所定の抽出処理が行われる。
【０１６５】
なお、ステップＳ３２１により秘匿識別コードが配置されていると判断した場合には、例えば、ホストコンピュータＨＳＴに対して当該ＱＲコードＱには、秘匿識別コードが配置されている旨を通知するように構成しても良い。これにより、ホストコンピュータＨＳＴでは、終端識別コードよりも後方のデータコードが秘匿データコードである旨を把握することができる。また、本来、埋め草コードしか配置されない終端識別コードの後のコード領域（コード領域の空き部分）に、埋め草コード以外のもので秘匿データコードではないもの（例えばデータ化けにより埋め草コードに該当しなくなったもの）が配置されている場合には、秘匿データコードである旨の情報がホストコンピュータＨＳＴに対して出力されないので、秘匿データコード以外のものをデコードすることで生じ得る誤動作を防止することができる。
【０１６６】
ここで、ステップＳ６００による所定の抽出処理を図１７を参照して説明する。なお、図１７に示す所定の抽出処理は、既に第３実施形態で説明した所定の加工処理（図１３）と情報処理の内容が類似しているので、所定の加工処理を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。
【０１６７】
図１７に示すように、所定の抽出処理では、ステップＳ５０１によりポインタｉをゼロクリアする処理、ステップＳ５０３により終端位置よりも後に存在する空き領域のビット数ｎ（図１４(A)〜(C)参照）を求める処理、ステップＳ５０５により暗号化データのビット数と復号キー検査データのビット数との和ｍ（図１４(D)，(E)参照）を求める処理、ステップＳ５０７により開示データコードと暗号化データとを２バイト単位で排他的論理和（ＥＸＯＲ）演算を行いその結果Ｓを求める処理、がそれぞれ順番に行われ、続くステップＳ５０９により疑似乱数のシード値にセットする処理が行われる。
【０１６８】
このステップＳ５０９によりセットされるシード値は、第３実施形態で説明したように、所定の演算により疑似乱数を発生させるための種であり、このシード値が同じであれば、発生する乱数はまったく同じものとなる。このため、同一のＱＲコードＱであれば、所定の加工処理（図１３）のシード値と本抽出処理のシード値とは、同じ値となり、次のステップＳ５１３による疑似乱数の値およびその発生順も同じになる。
【０１６９】
ステップＳ５１３により疑似乱数Ｒを求める処理が行われ、ステップＳ５１５により既に発生した疑似乱数Ｒと同じ値であると判断されない場合には（Ｓ５１５；Ｎｏ）、続くステップＳ６１７により、空き領域のＲビット目の値を暗号化データバッファのｉビット目（ポインタｉが指し示すビットの位置）にセットする処理が行われる。
【０１７０】
即ち、第３実施形態の所定の加工処理では、ステップＳ５１７により、暗号化データのｉビット目（ポインタｉが指し示すビットの位置）の値を空き領域のＲビット目にセットする処理を行うことによって、例えば、１ビット目の値を空き領域のＲビット目にセットしたが、本抽出処理のステップＳ６１７では、これとは逆に、空き領域のＲビット目の値を暗号化データバッファのｉビット目（ポインタｉが指し示すビットの位置）にセット、例えば、空き領域のＲビット目の値を暗号化データバッファの１ビット目にセットする。
【０１７１】
これにより、第３実施形態の所定の加工処理により空き領域のＲビット目にセットされた暗号化データのｉビット目の値は、本抽出処理によって、暗号化データバッファのｉビット目にセットされるので、ビット単位でバラバラに分解された秘匿データコード片等を元通りに復元することが可能となる。つまり、ステップＳ６１７等では集約復元処理が可能となる。
【０１７２】
そして、ステップＳ５１９により、ポインタｉと秘匿データコードの全ビット数とが一致している場合には、秘匿データコードの全てのビットが前述したステップＳ５０７〜５１７による集約復元処理が施されていることになるので（Ｓ５１９；Ｙｅｓ）、本加工処理を終了する。これに対して、ポインタｉと秘匿データコードの全ビット数とが一致していない場合には、秘匿データコードにはまだ復元処理が施されていないビットが残存することになるので（Ｓ５１９；Ｎｏ）、ステップＳ５１１によりポインタｉをカウントアップして再度ステップＳ５１３による疑似乱数発生処理を行う。
【０１７３】
ここで、図１６に戻ると、ステップＳ６００により所定の抽出処理が終了した後、ステップＳ３２５により文字数（ｊ）分だけデータコードを取得し、続くステップＳ３２９’によりｊ番目の復号キー検査データ（鍵特定情報）を取得する。
【０１７４】
そして、ステップＳ３２９’により取得した復号キー検査データに基づいて、先のステップＳ２０９によりホストコンピュータＨＳＴから受信した復号キーがこのｊ番目の秘匿データコードの暗号化データを解読する鍵として適合しているか否かの判断をステップＳ３３１により行い、当該復号キーが適合していると判断した場合には（Ｓ３３１；Ｙｅｓ）、続くステップＳ３３３により暗号化データを解読する。
【０１７５】
これに対して、ステップＳ３３１に当該復号キーが適合していると判断できない場合には（Ｓ３３１；Ｎｏ）、当該ｎ番目の秘匿データコードを解読することなく、本復号化処理を終了する。ステップＳ３３５により、秘匿データコードを復号する処理が行われると、図１５に示すステップＳ３００”を終えてデコード処理を終了する。
【０１７６】
なお、本抽出処理では、このようなステップＳ５０７〜Ｓ６１７による集約復元処理に代えて、例えば、ビット位置を逆方向に変換可能なビット位置逆変換テーブルに基づくビットの並替えでも良い。具体的には、例えば、第３実施形態で説明したビット位置逆変換テーブルにおいては、１ビット目を３ビット目に、２ビット目を４ビット目に、３ビット目を８ビット目に、４ビット目を１ビット目に、５ビット目を１２ビット目に、６ビット目を１０ビット目に、７ビット目を１５ビット目に、８ビット目を７ビット目に、９ビット目を１３ビット目に、１０ビット目を９ビット目に、１１ビット目を６ビット目に、１２ビット目を１１ビット目に、１３ビット目を２ビット目に、１４ビット目を１６ビット目に、１５ビット目を５ビット目に、１６ビット目を１４ビット目に、それぞれ位置を変換するビット位置逆変換テーブルを設けその逆変換規則に従ってビット位置を変換する。これにより、例えば、１６ビット構成のデータ「０１０１１０１１０１１００００１」（５Ａ６１ｈ）は、元の「１００１０１１０１１０１０１１０」（９６Ｄ６ｈ）に変換される。
【０１７７】
また、このようなビット位置逆変換テーブルを通すことに代えて、秘匿データコードを構成するビットにより特定されるデータ値を逆方向に変換可能なデータ値逆変換テーブルを用いても良い。例えば、第３実施形態で説明したデータ値変換テーブルの例においては、１６進表記のデータ「９６Ｄ６ｈ」が「５Ａ６１ｈ」に変換されることから、これを逆方向の、「５Ａ６１ｈ」を「９６Ｄ６ｈ」に逆変換可能な所定のデータ値逆変換テーブルに基づいて変換することで、復元処理が可能となる。
【０１７８】
さらに、このようなビット位置逆変換テーブルを通すことに代えて、秘匿データコードを構成するビットにより特定されるデータ値を逆方向に変換可能なデータ値逆変換式を用いても良い。例えば、第３実施形態で説明した所定のデータ値変換式の例においては、入力データＸを２倍にしてから１を減算して出力Ｙ（＝Ｘ×２−１）しているので、これとは逆に、入力データＸ’に１を加算した結果を２で除算して出力Ｙ’（＝（Ｘ’＋１）／２）することで、復元処理が可能となる。
【０１７９】
さらに、第３実施形態で説明した循環シフトレジスタを通す場合に対しては、所定の加工処理とは逆方向にシフトする循環シフトレジスタを復元処理に用いることで、復元処理が可能となる。例えば、先の１６ビット構成のデータ例では、所定の加工処理においてＬＳＢ側に４ビットシフトさせることで「１００１０１１０１１０１０１１０」（９６Ｄ６ｈ）を「０１１０１００１０１１０１１０１」（６９６Ｄｈ）に変換したので、これを、復元処理では、逆方向のＭＳＢ側に４ビットシフトさせることで、「１００１０１１０１１０１０１１０」（９６Ｄ６ｈ）というように元に戻すことが可能となる。
【０１８０】
なお、ステップＳ５０９によりセットされる疑似乱数のシード値については、第３実施形態と同様に、当該ＱＲコードＱに付随する固有情報、例えば、誤り訂正レベル（Ｌ，Ｍ，Ｑ，Ｈ）や型番（１〜４０）を用いて暗号化データとを排他的論理和（ＥＸＯＲ）演算を行いその結果Ｓを求めても良い。なお、誤り訂正レベルや型番の詳細や仕様は、例えば、日本工業規格（ＪＩＳ）の二次元コードシンボル−ＱＲコード−基本仕様（JIS X 0510:2004）に従う。
【０１８１】
なお、ステップＳ３０３〜Ｓ３１３では、終端位置の前方に配置されて元来デコードされる通常のデータコード（第１のデータコード、開示データコード）を取得してデコードする処理が行われる。このため、これらの各ステップを実行する制御回路４０等は、「第１デコード手段」に相当し得るものである。
【０１８２】
また、ステップＳ３２１では、ステップＳ３１９により取得されたｎ番目のデータコードが、秘匿識別コードであるか否かを判断する処理が行われる。このため、このステップＳ３２１を実行する制御回路４０等は、「データコード判断手段」や「秘匿識別コード判断手段」に相当し得るものである。さらに、ステップＳ３３３を実行する制御回路４０等は、「復号手段」に相当し得るものである。
【０１８３】
さらに、ステップＳ３１９，Ｓ３２３〜Ｓ３３５では、終端位置の後方に配置されて、本来はデコードされないデータコード（第２のデータコード、秘匿データコード）を取得してデコードする処理が行われる。このため、これらの各ステップを実行する制御回路４０等は、「第２デコード手段」に相当し得るものである。
【０１８４】
以上説明したように、本構成のＱＲコードリーダ２０によると、本来、データコードが配置されない終端識別コードの後のコード領域（コード領域の空き部分）等に、所定の加工が施された秘匿データコード（第２のデータコード）が配置されていても、この第２のデータコードをデコードすることができる。したがって、コード語を配置すべきコード領域の空き部分に存在するデータコードをデコードすることができる。
【０１８５】
また、上述したデコード処理では、ステップＳ３２９’によりｊ番目の復号キー検査データを取得するように構成したが、例えば、第３実施形態で述べたように、ステップＳ１１３の後に、開示データおよび秘匿データを並び替える処理（図２に示すＳ１１５相当）を介在させて、ステップＳ１１１により受信した「秘匿データのデータレコード中の位置関係を示す位置情報」に基づいて、データの順番を入れ替えて、開示データの集まりと秘匿データの集まりとに分ける処理を行った場合には、ステップＳ３２９’に代えて、秘匿データコードから「開始桁」を分離してこの分離された「開始桁」に基づいて秘匿データコードを復号（デコード）した秘匿データをコード化される前のデータレコード中の位置関係に配置するように構成しても良い。
【０１８６】
これにより、コード語としてコード化される前のデータレコード中の位置関係において前後して混在する場合であっても、デコードしたデータを、この位置情報に基づいてコード化前の位置関係に配置することができる。この場合、「秘匿データコードから「開始桁」を分離する」処理を実行する制御回路４０等は、「位置情報分離手段」に相当し得る。また、「この分離された「開始桁」に基づいて秘匿データコードを復号（デコード）した秘匿データをコード化される前のデータレコード中の位置関係に配置する」処理を実行する制御回路４０等は、「データ配置手段」に相当し得る。
【０１８７】
次に、上述の例とは異なるＱＲコードリーダ２０によるＱＲコードＱのデコード処理を図１８および図１９を参照して説明する。なお、ここで説明するＱＲコードＱは、これまで第１実施形態〜第３実施形態において説明した各秘匿データコードを含むＱＲコードを意味する。
【０１８８】
なお、ここでは、デコード処理のフローチャートは図示しないが、図６、図１０や図１５に示されるステップＳ３００，Ｓ３００’，Ｓ３００”の各復号処理を図１８に示す復号処理に置き換えることで、これらのデコード処理を本構成に適用することができる。また、図１８に示す復号化処理のフローチャートにおいて、既に説明した復号化処理（図１１）を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。
【０１８９】
図１８に示すように、復号化処理は、Ｓ３０５’により終端位置（開示データコードがなすコード列の終端位置で、終端識別コードまたは終端位置データにより特定可能なもの）でないと判断すると（Ｓ３０５’；Ｎｏ）、ステップＳ３０７，Ｓ３０９により文字数ｉ分のデータコードを取得した後、ステップＳ３１０により開示データコードをデコードするか否かを判断する。
【０１９０】
即ち、このステップＳ３１０では、後で図１９を参照して説明する「読取フラグＳ」の状態（(1) 開示データコードだけをデコードするフラグＳ＝１、(2) 秘匿データコードだけをデコードするフラグＳ＝２、(3) 開示データコードと秘匿データコードの双方をデータコードするフラグＳ＝０）に基づいて、開示データコードを復号する情報が当該読取フラグＳにセットされているか否かを判断する。この読取フラグＳは、例えば、ＱＲコードリーダ２０を構成するメモリ３５の所定領域またはレジスタに設定されるもので、後述する読取フラグ設定処理（図１９参照）により設定される。
【０１９１】
そして、(1) 開示データコードだけをデコードするフラグＳ＝１、または(3) 開示データコードと秘匿データコードの双方をデータコードするフラグＳ＝０が読取フラグにセットされている場合）には（Ｓ３１０；Ｙｅｓ）、続くステップＳ３１１により開示データコードを復号する処理を行い、(2) 秘匿データコードだけをデコードするフラグＳ＝２が読取フラグにセットされている場合には（Ｓ３１０；Ｎｏ）、続くステップＳ３１１により開示データコードを復号する処理をスキップして、ステップＳ３１３，Ｓ３０３等により次のデータコードを取得する処理を行う。
【０１９２】
一方、ステップＳ３０１〜Ｓ３１３により終端位置（開示データコードがなすコード列の終端位置で、終端識別コードまたは終端位置データにより特定可能なもの）が見つかると（Ｓ３０５’；Ｙｅｓ）、ステップＳ３１４により秘匿データコードをデコードするか否かを判断する。
【０１９３】
即ち、このステップＳ３１４は、前述したステップＳ３１０とは反対に、秘匿データコードをデコードするか否かを読取フラグＳに基づいて判断する。つまり、(2) 秘匿データコードだけをデコードするフラグＳ＝２、または(3) 開示データコードと秘匿データコードの双方をデータコードするフラグＳ＝０が読取フラグにセットされている場合には（Ｓ３１４；Ｙｅｓ）、続くステップＳ３１５〜Ｓ３３５により秘匿データコードを復号する処理を行い、(1) 開示データコードだけをデコードするフラグＳ＝１が読取フラグにセットされている場合には（Ｓ３１４；Ｎｏ）、本復号処理を終了する。
【０１９４】
ここで、読取フラグ設定処理を図１９を参照して説明する。なお、この読取フラグ設定処理は、例えば、当該ＱＲコードリーダ２０を構成するハードウェアの各種設定状態（例えば、ビープ音のオンオフ、液晶表示器４６のバックライトのオンオフ等）を変更、解除または初期化する場合に起動されるメンテナンスプログラムに含まれるもので、通常のデコード処理（図６、図１０や図１５）には含まれないものである。なおここでは、メンテナンスプログラムによるメンテナンス処理のフローチャートおよびその説明は省略する。
【０１９５】
図１９に示すように、読取フラグ設定処理では、まずステップＳ９０１により読取フラグＳに０（Ｓ＝０）をセットする等の所定の初期化処理を行った後、ステップＳ９０３によりタイマー値をクリアする処理が行われる。このタイマーは、次のステップＳ９０５により所定時間を経過したか否かを判断するためにカウントされるものである。
【０１９６】
そして、ステップＳ９０５により所定時間を経過していないと判断した場合には（Ｓ９０５；Ｎｏ）、続くステップＳ９０７によりコマンドを受信したか否かを判断する処理が行われる。このコマンドは、例えば、前述したメンテナンスプログラムにおいて、ホストコンピュータＨＳＴから受信したり、当該ＱＲコードリーダ２０を構成する操作スイッチ４２から入力されたりするものである。
【０１９７】
ステップＳ９０７によりコマンドを受信したと判断しない（受信していないと判断した）場合には（Ｓ９０７；Ｎｏ）、ステップＳ９０５により再び所定時間を経過しているか否かを判断する。これに対し、コマンドを受信したと判断した場合には（Ｓ９０７；Ｙｅｓ）、続くステップＳ９０９により受信したコマンドの内容を判断する処理が行われる。
【０１９８】
即ち、ステップＳ９０９により、当該コマンドが(1) 開示データコードだけをデコードするものである場合には、ステップＳ９１１により読取フラグＳに「１」をセットし（Ｓ＝１）、当該コマンドが(2) 秘匿データコードだけをデコードするものである場合には、ステップＳ９１３により読取フラグＳに「２」をセットする（Ｓ＝２）。これに対し、当該コマンドがこれらのいずれでもない場合には、読取フラグＳを「０」のままにして、本読取フラグ設定処理を終了する。つまり、この場合には、前述したステップＳ９０１によりデフォルトで設定されている「０」をそのまま引き継ぐことで、(3) 開示データコードと秘匿データコードの双方をデータコードする読取フラグＳを維持する。
【０１９９】
ステップＳ９１１，Ｓ９１３により読取フラグがセットされると、本読取フラグ設定処理を終了する。なお、ステップＳ３１０，Ｓ３１４は、「デコード機能選択手段」に相当し得るものである。また、ステップＳ３１１は、「第１のデータコードのデコード機能」に相当し、ステップＳ３３５は、「第２のデータコードのデコード機能」に相当し得るものである。
【０２００】
以上説明したように、本構成に係るＱＲコードリーダ２０によると、当該ＱＲコードリーダ２０の使用者は、開示データコードをデコードするか、秘匿データコードのデコードするか、の少なくとも一方を選択することができるので、例えば、秘匿データコードは読んでも開示データコードを読みたくない場合や、それとは逆に、開示データコードは読んでも秘匿データコードを読みたくない場合に、不要なデコード処理によるデコード時間を削減することができる。したがって、デコード時間を短縮することができる。
【０２０１】
なお、上述した実施形態のなかには、例えば、第１実施形態（図２）や第２実施形態（図８）で説明したように、コード生成処理のステップＳ１１９において誤り訂正コードを生成しているものがあるが、必ずしもこのステップＳ１１９で誤り訂正コードを生成する必要はなく、例えば、当該ステップＳ１１９に相当する処理（誤り訂正コード生成処理）を、誤り訂正コードを付加する処理（ステップＳ１３７）とともにまたはその前段階で実行するように、コード生成処理の流れを構成しても良い。
【符号の説明】
【０２０２】
１…パソコン
１０…ＱＲコードプリンタ
１１…ＭＰＵ
１２…メモリ
２０…ＱＲコードリーダ（二次元コードの読取装置）
３５…メモリ（第１デコード手段、データコード判断手段、第２デコード手段、秘匿識別コード判断手段、秘匿情報出力手段、復号手段、鍵適合判断手段、鍵分離手段、位置情報分離手段、データ配置手段、抽出手段、デコード機能選択手段）
４０…制御回路（第１デコード手段、データコード判断手段、第２デコード手段、秘匿識別コード判断手段、秘匿情報出力手段、復号手段、鍵適合判断手段、鍵分離手段、位置情報分離手段、データ配置手段、抽出手段、デコード機能選択手段）
ＨＳＴ…ホストコンピュータ
Ｐ…ラベル
Ｑ…ＱＲコード（二次元コード）
【図１】
0005206888.tif 000002
【図２】
0005206888.tif 000003
【図３】
0005206888.tif 000004
【図４】
0005206888.tif 000005
【図５】
0005206888.tif 000006
【図６】
0005206888.tif 000007
【図７】
0005206888.tif 000008
【図８】
0005206888.tif 000009
【図９】
0005206888.tif 000010
【図１０】
0005206888.tif 000011
【図１１】
0005206888.tif 000012
【図１２】
0005206888.tif 000013
【図１３】
0005206888.tif 000014
【図１４】
0005206888.tif 000015
【図１５】
0005206888.tif 000016
【図１６】
0005206888.tif 000017
【図１７】
0005206888.tif 000018
【図１８】
0005206888.tif 000019
【図１９】
0005206888.tif 000020