以下、本発明の実施形態について図を参照して説明する。なお、以下説明する各実施形態では、二次元コードの例として、QRコードを挙げるが、本発明に係る二次元コードはこれに限られることはなく、例えば、データマトリクス、マキシコード、CPコード、PDF417やRSSコンポジット等であってもQRコードと同様に本発明を適用することができる。
[第1実施形態]
まず、本発明の第1実施形態に係るQRコードプリンタ10の構成を、図1を参照して説明する。なお、図1(A) には、本第1実施形態に係るQRコードプリンタ10とそれに接続されるパーソナルコンピュータ(以下「パソコン」という)1とを示す説明図が図示されており、また図1(B) には、QRコードプリンタ10のハードウェア構成例を示すブロック図が図示されている。
図1(A) に示すように、QRコードプリンタ10は、ケーブル5を介してパソコン1に接続されることにより、パソコン1から出力されて当該QRコードプリンタ10に入力される英数字、漢字や記号等の文字データ(以下これらを「印刷データ」と総称する)に基づいてQRコードを生成してラベルP等に印刷する機能を有するものである。なお、ここでいう「QRコード」とは、日本工業規格(JIS)の二次元コードシンボル−QRコード−基本仕様(JIS X 0510:2004)に従うものである。
パソコン1は、パソコン本体2およびディスプレイ3により構成されており、パソコン本体2は、図略の、MPU、メインメモリ(主記憶装置)、ハードディスク(補助記憶装置)、入出力インタフェース、通信インタフェース、キーボード、ポインティングデバイス等からなる情報処理装置で、またディスプレイ3は、パソコン本体2に接続されることによりパソコン本体2から出力される情報を画面表示可能な情報表示装置である。
なお、このパソコン本体2には、QRコードプリンタ10のデバイスドライバがインストールされて(組み込まれて)おり、当該パソコン1の利用者が、QRコードとしてラベルPに印刷したい文字等を含んだ印刷データを、パソコン本体2からQRコードプリンタ10に対して任意に出力可能にしている。
これに対し、QRコードプリンタ10は、図1(B) に示すように、主に、MPU11、メモリ12、インタフェース13、ローラ制御部14、ヘッド制御部15、ローラ17、ヘッド18等から構成されている。なお、これらは、図略のプリント配線板に実装あるいは図略のハウジング内に内装されている。
MPU11は、QRコードプリンタ10全体を制御可能なマイクロコンピュータ(以下「マイコン」という)で、メモリバスを介して接続されるメモリ12とともに情報処理装置を構成し得るもので情報処理機能を有する。このMPU11には、メモリ12のほかに、インタフェース13、ローラ制御部14やヘッド制御部15も接続されている。なお、後述するコード生成処理は、このMPU11およびメモリ12により実行される。
メモリ12は、半導体メモリ装置で、例えばRAM(DRAM、SRAM等)やROM(EPROM、EEPROM等)がこれに相当する。このメモリ12のうちのRAMには、前述したパソコン1から送られてくる文字データを蓄積するバッファ領域のほか、MPU11が算術演算や論理演算等の各処理時に利用する作業領域等も確保可能に構成されている。またROMには、後述のコード生成処理等を実行可能な所定プログラムやその他、ローラ制御部14やヘッド制御部15等の各ハードウェアを制御可能なシステムプログラム等が予め格納されている。
インタフェース13は、前述したパソコン1のパソコン本体2から送られてくる印刷データ等を受信可能にする入力インタフェースで、シリアルバス等を介してMPU11に接続されている。このインタフェース13を介してMPU11に入力された印刷データは、コード生成処理によって後述するように情報処理されてコード化される。
ローラ制御部14は、ローラ17の駆動機構(図略)を制御し得る制御装置で、シリアルバス等を介してMPU11に接続されている。これにより、MPU11から受けた制御信号に従ってローラ17の回転の開始や停止あるいは回転方向等を制御している。
ヘッド制御部15は、例えば、感熱用紙からなるラベルに対して任意のパターンを印刷し得るサーマルヘッドで、シリアルバス等を介してMPU11に接続されている。本実施形態では、後述のコード生成処理によって生成されたQRコードを感熱ラベルに印刷可能にするもので、前述したローラ制御部14による感熱ラベルの紙送りタイミングに同期して、QRコードを構成する位置検出パターン、タイミングパターンやデータコード等を当該ラベルに印刷する。
なお、以下、ヘッド制御部15として、サーマルヘッドの場合を例示して説明するが、QRコードを印刷できるものであれば、例えば、インクジェット用やドットインパクト用のヘッドでも良いし、また印刷機構として、レーザプリンタやLEDプリンタ等であっても良い。
このようにQRコードプリンタ10を構成することによって、パソコン1から出力されて当該QRコードプリンタ10に入力された印刷データは、インタフェース13を介してメモリ12のバッファ領域に一旦蓄えられた後、次に説明するコード生成処理に渡される。ここで、コード生成処理を図2〜図4を参照して説明する。なお、図2には、コード生成処理の流れを示すフローチャートが図示されている。また図3には、図2に示すコード生成処理により情報処理されるデータやコードのフォーマット例が図示されている。さらに図4には、1型のQRコードの構成例が図示されている。
図2に示すように、コード生成処理は、QRコードプリンタ10の電源投入により起動するMPU11およびメモリ12によって開始され、まずステップS101により初期設定処理が行われる。この処理は、メモリ12の作業領域や印刷データを蓄えるバッファ領域をクリアしたり、所定のフラグやカウンタ等をクリアする。
ステップS103では、印刷データを受信したか否かを判断する処理で、印刷データを受信するまで、このステップを繰り返す(S103;No)。そして、印刷データを受信したと判断すると(S103;Yes)、続くステップS105に処理を移行する。なお、ここで受信するデータには、印刷データのほかに、暗号キーのデータも含まれる。即ち、後述するように、秘匿データコードを暗号化する必要がある場合には、このステップS103により暗号キーのデータも併せて受信する。また、ここで受信する印刷データは、その全てが第三者には秘密にして隠しておきたいデータ(秘匿エータ)であり、第三者に開示するデータ(開示データ)は含まれていないものとする。したがって、これらの印刷データは、全て秘匿データとして以下処理される。
次のステップS105では、秘匿データをJISの基本仕様(JIS X 0510:2004)に従って符号化する処理が行われる。これにより、秘匿するデータを表すコード語としてコード化された秘匿データコードが生成される。例えば、図3に示すように、ステップS103によって受信された印刷データが秘匿データα,βである場合には(図3(A) )、ステップS105により符号化された秘匿データコードαのデータ長と秘匿データコードβのデータ長と和が当該データ長として計算されて秘匿データコードαの直前に付加される(図3(B) )。なお、図3(B) では、便宜上、秘匿データコードを「秘匿コード」、秘匿識別コードを「秘匿識別子」、とそれぞれ表現している。
続くステップS107では、秘匿データコードのデータ長を計算して求め、このデータ長をコード化したものを秘匿データコードの直前に付加する処理が行われる。これにより、秘匿データコードが配置される領域や範囲がわかるので、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際に、どこまでが秘匿データコードであるか、または暗号データコードであるかを認識可能にする。
ステップS109では、ステップS107によりコード化されたデータ長の前に秘匿識別コードを付加する処理が行われる。この秘匿識別コードは、次ステップS111で付加される終端識別コードの直後に配置されているデータコードが「秘匿するデータを表すコード語としてコード化されたものであること」を明示的に表すもので、これにより、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際に、当該QRコードQに秘匿データコードが含まれていることを認識可能にする。このため、例えば、読取対象外のデータやデータ化けしたデータ等を秘匿データコードと誤認して読み取ることを防ぎ、またこれに起因する誤動作の発生を防止することもできる。
そして、続くステップS111により、秘匿識別コードの直前に終端識別コードを付加する処理が行われる。終端識別コードは、例えば、4ビットパターンで「0000」である。本実施形態では、前述したように、ステップS103により受信した印刷データには、開示データが含まれていない。このため、図3(B) に示すように、本来、終端識別コードの前の位置するはずである開示データコードは存在せず、当該終端識別コードが先頭に位置する。なお、図3(B) では、便宜上、終端識別コードを「終端子」と表現している。
このようにステップS105〜S111までの各処理を経ると、秘匿データコードの後に埋め草コードや誤り訂正コードが付加されるが、本実施形態では、図3(C) に示すように、秘匿データコードを暗号化する処理が施され得る。
具体的には、ステップS113により、暗号キーがあるか否かを判断することによって、秘匿データコードを暗号化する必要があるか否かを判断する。即ち、ステップS103によって暗号キーのデータをパソコン1から受信している場合には、暗号キーがあるので(S113;Yes)、ステップS115に移行して暗号化処理を行う。これに対して、ステップS103によって暗号キーをパソコン1から受信していない場合には、暗号キーがないので(S113;No)、ステップS115による暗号化処理をスキップしてステップS117に移行する。
なお、ステップS103により暗号キーのデータを受信していない場合であっても、パソコン1が予め暗号キーをメモリ12やハードディスク等の情報記憶媒体に保持しているときには暗号キーがあるので(S113;Yes)、ステップS115によって暗号化処理を行う。
ステップS115では、秘匿データコードを暗号化する処理が行われる。この処理は、例えば、公知の視覚復号型暗号技術(視覚復号型秘密分散法)を用いて秘匿データコードを暗号化する。これにより、このような暗号化されていない平文データが付加されている場合に比べてセキュリティの強度を高めることができる。
例えば、図3(C) に示す例では、秘匿データコードαを構成する「暗号化データ」の部分が暗号化され、「開始桁」、「文字数」および「復号キー検査データ」も併せて生成される。最初に位置する「開始桁」は、当該暗号化された秘匿データの位置情報として、印刷データの先頭をゼロ番地とした場合に表現可能なアドレス値がこれに相当する。また次の「文字数」は、暗号化されている秘匿データの文字数である。これにより、コード語としてコード化される前のデータレコード中の位置関係において前後して混在する場合であっても、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際において、デコードしたデータをこの位置情報に基づいてコード化前の位置関係に配置することができる。
最後に付加されている「復号キー検査データ」は、当該暗号を解読するのに用いる復号キーを特定可能な鍵特定情報で、暗号方式が暗号キーと復号キーとが同じ共通鍵暗号方式(「秘密鍵暗号方式」ともいう)の場合には、当該復号キー検査データは暗号キーも特定できる。これにより、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際に、秘匿データコードを復号キー(復号できる鍵)を容易に特定することができたり、復号キーであるか否かを判断することができる。
なお、秘匿データコードβについても秘匿データコードαと同様に構成され、「復号キー検査データ」として、秘匿データコードαを復号する復号キーと同じ情報を付加しても良いし、また秘匿データコードαの暗号キーとは異なった他の暗号キーで秘匿データコードβの秘匿データを暗号化した場合には、他の復号キーを特定する「復号キー検査データ」を付加しても良い。これにより、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際に、各秘匿データコードごとに復号できる鍵を容易に特定することができたり、復号できる鍵であるか否かを判断することができる。
続くステップS117では、JISの基本仕様(JIS X 0510:2004)に従って、秘匿データコードの後に埋め草コードを付加する処理が行われ、さらにステップS119では、秘匿データに対する誤り訂正符号をJISの基本仕様(JIS X 0510:2004)に従って生成しさらにそれをコード化して誤り訂正コードを生成する処理が行われる。
そして、ステップS121では、ステップS119により生成されたデータコードに基づいて、各セルを生成し、図4に示すデータブロックに配置する処理が行われる。即ち、図4に示す1型のQRコードでは、1辺が21セル(モジュール)の正方形状に構成されているため、三隅に設けられている位置検出パターンや形式情報(図4に示す斜線部分)、さらにはタイミングパターンを除いたコード領域に、8個のセルを4行2列に配置して構成されるデータブロックを26ブロック(A0〜A25)配置する。
例えば、図3(B) に示す例では、データ領域の先頭にあたるA0に終端識別コードを、これに続いて通常は埋め草コードが配置される位置に相当するA1以降に、即ち、A1に秘匿識別コード、A2にデータ長、A3〜A6に秘匿識別コードα、A7〜A9に秘匿識別コードβ、をそれぞれ配置する。そして、通常のQRコードと同様に、誤り訂正コードを最後のA20〜A25に配置して、この間の空いている部分であるA10〜A19に埋め草コードを配置する。なお、A15およびA18は、タイミングパターンを挟んで位置していることから、A15はA15とA15’とに、またA18はA18とA18’とに分割されている。
なお、ステップS115において、図3(D) に示すように、「復号キー検査データ」に代えて、復号キーそのものを付加しても良い。これにより、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際に、例えば、当該QRコードリーダ等が秘匿データコードαの復号キーを持っていなくても、秘匿データコードαを復号して元の平文に戻すことができる。
また、秘匿データコードβについても、同様に「復号キー検査データ」に代えて、復号キーそのものを付加しても良い。付加する復号キーは、秘匿データコードαを復号する復号キーと同じものを付加しても良いし、また秘匿データコードαの暗号キーとは異なった他の暗号キーで秘匿データコードβの秘匿データを暗号化した場合には、この他の暗号キーに対応する他の復号キーを付加しても良い。これにより、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際に、当該QRコードリーダ等が、各秘匿データコードごとに対応するそれぞれの復号キーを持っていなくても、それぞれの秘匿データコードを復号して元の平文に戻すことができる。
また、ステップS113により、暗号キーがないと判断した場合であっても(S113;No)、図3(E) に示すように、暗号化していない平文データの前に、ステップS115で付加した「開始桁」や「文字数」を付加する処理ステップを、ステップS113とステップS117との間に設けても良い。これにより、コード語としてコード化される前のデータレコード中の位置関係において前後して混在する場合であっても、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際において、デコードしたデータをこの位置情報に基づいてコード化前の位置関係に配置することができる。
以上説明したように、本第1実施形態に係るQRコードプリンタ10によると、MPU11により実行されるコード生成処理によって生成されるQRコードQでは、ステップS111によりコード領域の最初に終端識別コードが配置されるとともに、終端識別コードの後に、ステップS111により秘匿データコードが埋め草コードの一部または全部に代えて配置されている。つまり、本来、コード領域に配置されるべきデータコードの先頭(コード領域の最初)に終端識別コードを配置することによって、開示データコードが存在せず開示データコードの総数が零であるデータコードを生成し、終端識別コードの後に、秘匿データコードを埋め草コードの一部または全部に代えて配置する。
これにより、終端識別コードの後に配置された秘匿データコードは、一般仕様の読取装置では読み取りの対象にならないので、このような一般仕様の読取装置ではコード化されたデータがない(中身のない)空のQRコードを読み取ったように認識されるので、当該読取装置の利用者には秘匿データの存在がわからない。したがって、一般仕様の読取装置の利用者には秘匿データの存在を認識させないようにすることができる。
よって、このような秘匿データコードを含んでいても、一般仕様の読取装置には当該秘匿データコードのデコードデータに相当するものが画面表示されないので、利用者に秘匿データの存在を認識させることがなく、当該利用者に対して不信感を与えたり、解読を試みようとする不用意な動機を与えることがない。また、当該秘匿データコードのデコードデータに相当するものが制御データ等であっても、それが画面表示されることがないので、画面表示が乱れたりもしない。
なお、上述した第1実施形態では、QRコードプリンタ10により、ラベルPにQRコードQを印刷する例を挙げて説明したが、本発明はこれに限られることはなく、QRコードQを視覚的に表現可能なものであればよく、例えば、図2に示すコード生成処理をパソコン本体2により実行してディスプレイ3にQRコードQを表示するように構成しても良い。この場合、コード生成処理は、コンピュータプログラムとして概念できるので、例えば、「開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置するとともに、前記コード領域の空き部分にデータを表さない埋め草コードを配置する二次元コードの生成装置として、コンピュータを機能させるためのプログラムであって、前記開示データコードが存在せず前記開示データコードの総数が零であり、前記コード領域の最初に前記終端識別コードが配置されるとともに、秘匿するデータを表すコード語としてコード化された秘匿データコードを前記埋め草コードの一部または全部に代えて、前記終端識別コードの後に配置することを特徴とする二次元コードの生成プログラム。」と表現可能な技術的思想を把握できる。これにより、この二次元コードの生成プログラムにより二次元コードの生成装置として機能するコンピュータは、上述したQRコードプリンタ10のMPU11等と同様の作用および効果を奏する。
また、上述した第1実施形態では、QRコードプリンタ10にパソコン1を接続して当該パソコン1から印刷データを送る構成を例示して説明したが、英数字、漢字や記号等の文字データを出力可能な情報処理装置であれば、このような機能を備えたデジタルカメラや携帯電話機、あるいはハンドヘルドコンピュータやハンディターミナル等を、QRコードプリンタ10に接続する構成を採っても上述した作用および効果を得ることができる。
次に、QRコードリーダ20の構成を説明する。本構成に係るQRコードリーダ20は、第1実施形態で説明したQRコードプリンタ10により印刷されたQRコードQをデコード可能なQRコードリーダ20で、通常仕様のQRコード(終端識別コードの前に開示データコードが配置されているもの)もデコード可能に構成されている。なお、QRコードリーダ20によりデコード可能なQRコードQの構成は、図3および図4を参照して既に説明しているので、ここでは説明を割愛する。
まず、QRコードリーダ20の構成を図5を参照して説明する。なお、図5には、QRコードリーダのハードウェア構成例を示すブロック図が図示されている。
図5に示すように、QRコードリーダ20は、主に、照明光源21、受光センサ23、結像レンズ27等の光学系と、メモリ35、制御回路40、操作スイッチ42、液晶表示器46等のマイコン系と、電源スイッチ41、バッテリ49等の電源系と、から構成されている。なお、これらは、図略のプリント配線板に実装あるいは図略のハウジング内に内装されており、ハードウェア的には一般仕様のQRコードリーダ(読取装置)と同様に構成されている。
光学系は、照明光源21、受光センサ23、結像レンズ27等から構成されている。照明光源21は、照明光Lfを発光可能な照明光源として機能するもので、例えば、赤色のLEDとこのLEDの出射側に設けられる拡散レンズ、集光レンズ等とから構成されている。本構成では、受光センサ23を挟んだ両側に照明光源21が設けられており、図略のケースの読取口を介してラベルPに向けて照明光Lfを照射可能に構成されている。このラベルPには、第1実施形態で説明したQRコードQが印刷されている。
受光センサ23は、ラベルPやQRコードQに照射されて反射した反射光Lrを受光可能に構成されるもので、例えば、C−MOSやCCD等の固体撮像素子である受光素子を2次元に配列したエリアセンサが、これに相当する。受光センサ23は、結像レンズ27を介して入射する入射光をこの受光面23aで受光可能に図略のプリント配線板に実装されている。
結像レンズ27は、外部から読取口を介して入射する入射光を集光して受光センサ23の受光面23aに像を結像可能な結像光学系として機能するもので、例えば、鏡筒とこの鏡筒内に収容される複数の集光レンズとにより構成されている。
次に、マイコン系の構成概要を説明する。マイコン系は、増幅回路31、A/D変換回路33、メモリ35、アドレス発生回路36、同期信号発生回路38、制御回路40、操作スイッチ42、LED43、ブザー44、液晶表示器46、通信インタフェース48等から構成されている。このマイコン系は、その名の通り、マイコンとして機能し得る制御回路40およびメモリ35と中心に構成される。
光学系の受光センサ23から出力される画像信号は、増幅回路31に入力されることで所定ゲインで増幅された後、A/D変換回路33に入力されると、アナログ信号からディジタル信号に変換される。そして、ディジタル化された画像信号、つまり画像データは、メモリ35に入力されると、画像データ蓄積領域に蓄積される。なお、同期信号発生回路38は、受光センサ23およびアドレス発生回路36に対する同期信号を発生可能に構成されており、またアドレス発生回路36は、この同期信号発生回路38から供給される同期信号に基づいて、メモリ35に格納される画像データの格納アドレスを発生可能に構成されている。
メモリ35は、半導体メモリ装置で、例えばRAM(DRAM、SRAM等)やROM(EPROM、EEPROM等)がこれに相当する。このメモリ35のうちのRAMには、前述した画像データ蓄積領域のほかに、制御回路40が算術演算や論理演算等の各処理時に利用する作業領域等も確保可能に構成されている。またROMには、後述するデコード処理等を実行可能な所定プログラムやその他、照明光源21、受光センサ23等の各ハードウェアを制御可能なシステムプログラム等が予め格納されている。
制御回路40は、QRコードリーダ20全体を制御可能なマイコンで、CPU、システムバス、入出力インタフェース等からなり、メモリ35とともに情報処理装置を構成し得るもので情報処理機能を有する。この制御回路40には、内蔵された入出力インタフェースを介して種々の入出力装置と接続可能に構成されており、本構成の場合、電源スイッチ41、操作スイッチ42、LED43、ブザー44、液晶表示器46、通信インタフェース48等が接続されている。
これにより、例えば、電源スイッチ41や操作スイッチ42の監視や管理、またインジケータとして機能するLED43の点灯・消灯、ビープ音やアラーム音を発生可能なブザー44の鳴動のオンオフ、さらには読み取ったQRコードQによるコード内容を画面表示可能な液晶表示器46の画面制御や外部装置とのシリアル通信を可能にする通信インタフェース48の通信制御等を可能にしている。なお、通信インタフェース48に接続される外部装置には、当該QRコードリーダ20の上位システムに相当するホストコンピュータHST等が含まれる。
電源系は、電源スイッチ41、バッテリ49等により構成されており、制御回路40により管理される電源スイッチ41のオンオフによって、上述した各装置や各回路に、バッテリ49から供給される駆動電圧の導通や遮断が制御されている。なお、バッテリ49は、所定の直流電圧を発生可能な二次電池で、例えば、リチウムイオン電池等がこれに相当する。また、バッテリ49によることなく、例えば、通信インタフェース48を介して接続されるホストコンピュータHST等の外部装置から電力供給を受ける構成を採る場合もあり、この場合には当該バッテリ49は不要となる。
このようにQRコードリーダ20を構成することによって、例えば、電源スイッチ41がオンされて所定の自己診断処理等が正常終了し、QRコードQの読み取りが可能な状態になると、照明光Lfの発光を指示する操作スイッチ42(例えばトリガースイッチ)の入力を受け付ける。これにより、利用者がトリガースイッチを引いてオンにすることで、制御回路40が同期信号を基準に照明光源21に発光信号を出力するので、当該発光信号を受けた照明光源21は、LEDを発光させて照明光Lfを照射する。
すると、QRコードQに照射された照明光Lfが反射し、その反射光Lrが読取口を介して結像レンズ27に入射するため、受光センサ23の受光面23aには、QRコードQの像が結像される。これにより、QRコードQの像が受光センサ23を露光するため、上述したマイコン系によって画像処理された当該QRコードQの画像データが、メモリ35の画像データ蓄積領域を介して、次に説明するデコード処理に渡される。
ここで、デコード処理を図4,図6および図7を参照して説明する。なお、図6には、デコード処理の流れを示すフローチャートが図示されている。また図7には、図6に示す復号化処理の流れを示すフローチャートが図示されている。また、図4には、1型のQRコードの構成例を示す説明図が図示されている。
図6に示すように、デコード処理は、QRコードリーダ20の電源投入により起動する制御回路40およびメモリ35によって開始され、まずステップS201により初期設定処理が行われる。この処理は、メモリ35の作業領域や画像データを蓄える画像データ蓄積領域をクリアしたり、所定のフラグやカウンタ等をクリアする。なお、ここで説明するQRコードリーダ20は、ホストコンピュータHSTと接続されており、当該ホストコンピュータHSTから設定データとして復号キーのデータを取得するものとする。
ステップS203では、タイマーのカウント値をクリアする処理が行われる。このステップS203でカウンタ値がクリアされるタイマーは、次のステップS205により所定時間の経過を計時するものである。
ステップS205では、先のタイマーにより所定時間が経過したか否かを判断する処理が行われる。即ち、ホストコンピュータHSTから送られてくる設定データに復号キーのデータが含まれているか否かを次のステップS209により判断する必要上、例えば、所定時間として5秒間が経過したか否かを判断し、この時間が経過するまでに、ホストコンピュータHSTから暗号化に関するデータが送られてこない場合には、所定時間の経過とともにステップS207に処理を移行する(S205;Yes)。
これに対し、所定時間が経過していない場合には(S205;No)、次のステップS209により復号キー(復号鍵)を受信したか否かを判断する処理が行われる。そして、これを受信していると判断した場合には(S209;Yes)、続くステップS211に処理を移行し、受信していると判断できない場合には(S209;No)、前述したステップS205に処理を戻して、再度、時間の経過を判断する。
そして、所定時間が経過したとステップS205により判断した場合には(S205;Yes)、ステップS207により所定のフラグに「0」をセットする。このフラグは、QRコードQの秘匿データコードを復号キーで復号するか否かを示すもので、「0」がセットされている場合には、復号キーで復号しないことを示し、「1」がセットされている場合には、復号キーで復号することを示す。このため、209により復号キーを受信していると判断した場合には(S209;Yes)、続くステップS211によりこのフラグに「1」をセットする処理が行われる。
ステップS211により所定のフラグに「1」をセットすると、続くステップ213により、画像データを取得する処理が行われる。即ち、メモリ35の画像データ蓄積領域から蓄えられている画像データを読み出す処理を行う。これにより、例えば、図4に示すようなQRコードQのコード画像が得られる。
続くステップS215では、位置検出パターンを検出する処理が行われる。即ち、QRコードQは、図4に示すように、その三隅に位置検出パターンが設けられているため、これらを検出することによって、次のステップS217によりQRコードQのコード外形を検出する。
そして、ステップS219により各セルの中心座標を算出する処理を行うことによって次ステップS221により各セルの白黒を判別する。これにより、図4に示す形式情報(図4に示す斜線部分)やデータブロックを認識可能になるので、続くステップS223により、欠損等しているデータブロックがある場合には、そのブロックを誤り訂正可能であるか否かを判断する。
そして、ステップS223により誤り訂正可能であると判断できる場合には(S223;OK)、誤り訂正をして続くステップS300により復号化処理を行う。これに対し、ステップS223により誤り訂正可能であると判断できない場合には(S223;NG)、誤り訂正できないので、ステップS213に処理を移行して再度、画像データを取得してステップS215〜S221の各処理を行う。
ステップS300は、その詳細が図7に図示されているので、ここからは図7を参照して復号化処理を説明する。図7に示すように、復号化処理では、ステップS301により、まずカウンタn,Cntにそれぞれ0(零)をセットする処理が行われる。カウンタnは、本復号化処理において、QRコードQを構成するデータコードの順番を示す変数として機能する。またカウンタCntは、通常仕様のQRコード等に含まれる開示データコードの数を示す変数として機能する。
ステップS303では、カウンタnが指すn番目のデータコードを取得する処理が行われる。そして、続くステップS305では、ステップS303により取得されたn番目のデータコードが、終端識別コードであるか否かを判断する処理が行われる。これにより、当該データコードが終端識別コードであると判断した場合には(S305;Yes)、読み取ったQRコードは前述した第1実施形態により生成されたQRコードQであるか、または終端識別コードよりも前に配置される通常のデータコードはこれ以上、当該QRコードには含まれていないことになるので、ステップS315に処理を移行する。
これに対し、当該データコードが終端識別コードであると判断できない場合には(S305;No)、読み取ったQRコードは前述した第1実施形態により生成されたQRコードQではなく、通常仕様のQRコードであり、終端識別コードよりも前にまだ通常のデータコードが存在することになるので、続くステップS307に処理を移行して次のデータコード、つまり(n+1)番目のデータコードをコード数iを取得する。これは、第1実施形態で図3(C) を参照して説明したように、データコードの2文字目相当の位置には、文字数が格納されていることに基づくもので、その詳細は、JISの基本仕様(JIS X 0510:2004)の「8.4データの符号化」に記載されている。
ステップS307によりコード数iを取得すると、続くステップS309では、この文字数(i)分だけデータコードを取得する処理が行われ、さらにステップS311により当該データコード、つまり開示データコード(開示するデータを表すコード語としてコード化されたデータコード)を復号(デコード)する処理が行われる。
ステップS311による復号処理が終わると、ステップS313により、カウンタnが次のデータコードを指すように「n+i+1」をカウンタnに、またカウンタCntが開示データコードの数を1だけ加算するように「Cnt+1」をCntに、それぞれ設定する処理が行われた後、再びステップS303に処理を戻してn番目のデータコードを取得する処理が行われる。
このように、ステップS303〜S313では、終端識別コードの前方に配置されて元来デコードされる通常のデータコード(第1のデータコード、開示データコード)を取得してデコードする処理が行われる。
ステップS305により、取得したn番目のデータコードが終端識別コードであると判断すると(S305;Yes)、ステップS314により、カウンタCntの値が0(零)を超えているか否かを判断する処理が行われる。
即ち、開示データコードの数をカウントしているカウンタCntの値が0(零)を超えている場合には(S343;Yes)、読み取ったQRコードには開示データコードが含まれていることになるので、ステップS315〜S341による秘匿データコードに関する各処理を行うことなく、ステップS343に処理を移行する。これにより、終端識別コードの前には、開示データコード(第1のデータコード)が配置されているか否かを判断することができるので、このステップS314を実行する制御回路40等は、「第1のデータコード判断手段」に相当し得るものである。
これに対し、カウンタCntの値が0(零)を超えていない場合には(S343;No)、つまりカウンタCntの値が0(零)である場合には、読み取ったQRコードには開示データコードが含まれていないことになるので、その次のデータコードを取得するため、ステップS315によりカウンタnにn+1を設定する処理を行った後、ステップS317によりn番目のデータコードを取得する。
続くステップS319では、ステップS317により取得されたn番目のデータコードが、秘匿識別コードであるか否かを判断する処理が行われる。これにより、終端識別コードの後には、秘匿データコード(第2のデータコード)が配置されているか否かを判断することができるので、このステップS319を実行する制御回路40等は、「第2のデータコード判断手段」に相当し得るものである。
そして、当該データコードが秘匿識別コードであると判断した場合には(S319;Yes)、秘匿識別コードの直後には、秘匿データコードが存在することになるので、続くステップS321に処理を移行して次のデータコード、つまり(n+1)番目のデータコードをコード数jを取得する。これも、ステップS309と同様に、データコードの2文字目相当の位置には、文字数が格納されていることに基づくものである。
なお、ステップS319により秘匿識別コードが配置されていると判断した場合には、例えば、ホストコンピュータHSTに対して当該QRコードQには、秘匿識別コードが配置されている旨を通知するように構成しても良い。これにより、ホストコンピュータHSTでは、終端識別コードよりも後方のデータコードが秘匿データコードである旨を把握することができる。また、本来、埋め草コードしか配置されない終端識別コードの後のコード領域(コード領域の空き部分)に、埋め草コード以外のもので秘匿データコードではないもの(例えばデータ化けにより埋め草コードに該当しなくなったもの)が配置されている場合には、秘匿データコードである旨の情報がホストコンピュータHSTに対して出力されないので、秘匿データコード以外のものをデコードすることで生じ得る誤動作を防止することができる。
これに対し、当該データコードが秘匿識別コードであると判断できない場合には(S319;No)、秘匿識別コードよりも後には、これ以上、秘匿データコードが当該QRコードQには含まれていないことになるので、本復号化処理を終了して図6に示すステップS300を終えてデコード処理を終了する。
ステップS321によりコード数jを取得すると、続くステップS323では、この文字数(j)分だけデータコードを取得する処理が行われ、さらにステップS325によりカウンタnが次のデータコード、つまり秘匿データコードを指すように「n+j+2」をカウンタnに設定する処理が行われた後、ステップS327によりn番目の復号キー検査データ(鍵特定情報)を取得する処理が行われる。
続くステップS329では、前述した所定のフラグに「1」がセットされているか否か、つまりQRコードQの秘匿データコードを復号キーで復号するか否かを判断する処理が行われる。そして、当該フラグに「1」がセットされていない場合には(S329;No)、復号キーで復号する必要がないため、ステップS331,333の各処理をスキップしてステップS335に処理を移行する。
これに対し、所定のフラグに「1」がセットされている場合には(S329;Yes)、復号キーで復号する必要があるため、先のステップS327により取得した復号キー検査データに基づいて、ステップS209によりホストコンピュータHSTから受信した復号キーがこのn番目の秘匿データコードの暗号化データを解読する鍵として適合しているか否かの判断をステップS331により行う。
そして、ステップS331に当該復号キーが適合していると判断した場合には(S331;Yes)、続くステップS333により暗号化データを解読する。なお、ここでの暗号化は、第1実施形態で説明した公知の視覚復号型暗号技術(視覚復号型秘密分散法)を用いたもので、これにより、秘匿データコードの暗号化データがこのような視覚復号型暗号技術により暗号化されている場合でも、復号して元の平文に戻すことができる。なお、このステップS333を実行する制御回路40等は、「復号手段」に相当し得るものである。
これに対して、ステップS331に当該復号キーが適合していると判断できない場合には(S331;No)、当該n番目の秘匿データコードを解読することなく、ステップS333をスキップしてステップS335に処理を移行する。これにより、QRコードリーダ20が有する復号キーが当該n番目の秘匿データコードを解読できる復号キーでない場合には、当該n番目の秘匿データコードは解読も復号されないので、不要な復号処理を抑制することができる。なお、このステップS331を実行する制御回路40等は、「鍵適合判断手段」に相当し得るものである。
ステップS335では、秘匿データコードを復号する処理が行われる。即ち、その前のステップS333により暗号化データを解読することができているか、または元から暗号化されていないので、平文相当の秘匿データコードを復号(デコード)する。
ステップS335による復号処理が終わると、ステップS337により、カウンタnが次のデータコードを指すように「n+1」をカウンタnに設定する処理が行われた後、続くステップS339により、n番目のデータコードを取得する処理が行われる。
そして、ステップS341により、ステップS339で取得したn番目のデータコードが埋め草コードであるか否かを判断する処理が行われる。これにより、もし当該n番目のデータコードが埋め草コードである場合には(S341;Yes)、これ以上、当該QRコードQには秘匿データコードが含まれていないことになるので、続くステップS343に処理を移行する。
これに対し、ステップS341により当該n番目のデータコードが埋め草コードであると判断されない場合には(S341;No)、当該n番目のデータコードは、秘匿データコードであるので、ステップS321に処理を移行して、再び(n+1)番目のデータコードをコード数jを取得することで、前述と同様の処理を行う。
このように、ステップS317,S321〜S327,S333,S335では、終端識別コードの後方に配置されて、本来はデコードされないデータコード(第2のデータコード、秘匿データコード)を取得してデコードする処理が行われる。このため、これらの各ステップを実行する制御回路40等は、「デコード手段」に相当し得る。
ステップS343では、カウンタCntの値が0(零)を超えているか否かを判断する処理が行われる。即ち、開示データコードの数をカウントしているカウンタCntの値が0(零)を超えている場合には(S343;Yes)、読み取ったQRコードには開示データコードが含まれていることになるので、ステップS311によりデコードした開示データを次ステップS345によって液晶表示器46に出力する。
これに対し、開示データコードの数をカウントしているカウンタCntの値が0(零)を超えていない場合、つまり0(零)である場合には(S343;No)、読み取ったQRコードには開示データコードが含まれていないので、続くステップS345による出力処理をスキップしてその次のステップS347に処理を移行する。
ステップS347では、ホストコンピュータHSTに開示データや秘匿データを出力する処理が行われる。即ち、読み取ったQRコードに開示データコードが含まれていた場合にはそれをデコードした開示データを、また読み取ったQRコードに秘匿データコードが含まれていた場合にはそれをデコードした秘匿データを、それぞれホストコンピュータHSTに出力する。なお、QRコードリーダ20にホストコンピュータHSTが接続されていない場合には、本ステップS347では出力処理を行うことなく、次のステップS349に処理を移行する。
続くステップS349では、ブザー44を鳴動させる処理およびLED43を点灯させる処理が行われる。即ち、当該QRコードリーダ20を操作する操作者に対して読み取ったQRコードに含まれる開示データコードや秘匿データコードをデコードした旨を告知する。なお、本実施形態では、ステップS331による判断処理によって、復号キーが適合していると判断できない場合であっても(S331;No)、QRコードリーダ20をデコードできた旨をブザー44やLED43により告知する。本ステップS349による処理が完了すると、本復号化処理を終了して図6に示すステップS300を終えるので、一連のデコード処理を終了する。
これにより、復号キーが復号できる鍵でない場合であっても、このように操作者には読み取りが完了した旨を知らせるので、当該QRコードに復号できない秘匿データが含まれていることを操作者に知られ難くすることができる。また、復号キーが合わないために、復号できないQRコードを何度も読み取るとった操作者による無駄な操作を防止することができる。したがって、当該操作者に当該QRコードの解読を試みようとする不用意な動機を与える可能性を低くすることからセキュリティの強度を高めることができ、また操作性も向上することができる。
以上説明したように、本構成に係るQRコードリーダ20によると、ステップS314により、終端識別コードよりも前に開示データコード(第1のデータコード)が配置されているか否かを判断し、ステップS319により、終端識別コードの後に秘匿データコード(第2のデータコード)が配置されているか否かを判断する。そして、ステップS314により開示データコードが配置されていないと判断し(S343;No)、かつ、ステップS319により秘匿データコードが配置されていると判断した場合(S319;Yes)、ステップS321〜S341により秘匿データコードをデコードする。
これにより、本来、データ領域に配置されているはずの開示データコードが存在せず、埋め草コードしか配置されない終端識別コードの後のコード領域(コード領域の空き部分)に秘匿データコードが配置されている場合には、この秘匿データコードをデコードすることができる。したがって、コード語を配置すべきコード領域の空き部分に存在するデータコードをデコードすることができる。つまり、コード領域の最初に終端識別コードが配置され、その終端識別コードの後に秘匿データコードが配置されているQRコードQでもデコードすることができる。
つまり、第1実施形態で説明したQRコードプリンタ10で印刷したQRコードQのように、コード領域の最初(コード領域に配置されるべきデータコードの先頭)に終端識別コードが配置され、その終端識別コードの後に秘匿データコードが配置されていても、このようなQRコードQをデコードすることができる。
なお、上述したデコード処理では、ステップS327によりn番目の復号キー検査データを取得するように構成したが、例えば、第1実施形態で図3(D) を参照して説明したように復号キーそのものが秘匿データコードに付加されている場合には、このステップS327に代えて、n番目の復号キーを取得するように構成しても良い。これにより、秘匿データコードの復号キー(復号できる鍵)を当該QRコードリーダ20が持っていなくても、当該秘匿データコードを復号して元の平文に戻すことができる。この場合、「n番目の復号キーを取得する」処理を実行する制御回路40等は、「鍵分離手段」に相当し得る。
また、各秘匿データコードごとに異なった暗号キーで暗号化されている場合であっても、各秘匿データコードについてそれぞれの復号キーが付加されているときには、ステップS327に代えて、n番目の復号キーを取得するように構成することで、秘匿データコードの復号キーを当該QRコードリーダ20が持っていなくても、それぞれの秘匿データコードを復号して元の平文に戻すことができる。
さらに、上述したデコード処理では、ステップS327によりn番目の復号キー検査データを取得するように構成したが、例えば、第1実施形態で図3(D) を参照して説明したように位置情報としての「開始桁」が秘匿データコードに付加されている場合には、このステップS329に代えて、秘匿データコードから「開始桁」を分離してこの分離された「開始桁」に基づいて秘匿データコードを復号(デコード)した秘匿データをコード化される前のデータレコード中の位置関係に配置するように構成しても良い。これにより、コード語としてコード化される前のデータレコード中の位置関係において前後して混在する場合であっても、デコードしたデータを、この位置情報に基づいてコード化前の位置関係に配置することができる。
また、上述したデコード処理では、ステップS314により開示データコードの有無を判断し、開示データが存在する場合には(S343;Yes)、ステップS315〜S341による秘匿データコードに関する各処理を行うことなく、デコードした開示データをステップS345により表示するように構成したが、このようなステップS314による判断処理を行うことなく、ステップS305から直接、ステップS315に処理を移行するように構成しても良い。これにより、開示データが存在する場合にも、ステップS315〜S341による秘匿データコードに関する各処理を行うため、開示データコードおよび秘匿データコードの双方も含むQRコードQであっても、これらのいずれもデコードすることができる。