(57)【要約】【課題】読み取られた二次元コードが、読み取りの際の条件に応じて二通りの異なるデコード結果が出力され得る特殊二次元コードであるか否かを判別することができる技術を提供する。【解決手段】撮像部によって撮像された二次元コードを表わすコード画像に基づいてデコードを行うデコード部と、第１のデコード結果が取得される場合に、特定のコードワードを特定する特定ステップと、特定のコードワードの値を特定の値に変更する変更ステップと、特定の値に変更された変更済みの特定のコードワードを含む複数個のコードワードを用いてデコードを行うデコードステップと、第１のデコード結果とは異なる第２のデコード結果が取得されるか否かを判断する判断ステップと、を含む検査処理を繰り返し実行する検査処理実行部と、を備える。【選択図】図４
2020160961.tif 000002
【特許請求の範囲】
【請求項１】
複数個の明色セルと複数個の暗色セルとを二次元のマトリックス上に配置して構成される二次元コードを撮像する撮像部と、
前記撮像部によって撮像された前記二次元コードを表わすコード画像に基づいて、前記二次元コードに記録された情報のデコードを行うデコード部と、
前記デコード部が前記デコードを行ったことによって第１のデコード結果が取得される第１の場合に、以下の検査処理を繰り返し実行する検査処理実行部であって、前記検査処理は、
（ａ）前記コード画像に基づいて抽出される複数個のコードワードのうちから、特定のコードワードを特定する特定ステップと、
（ｂ）前記特定のコードワードの値を特定の値に変更する変更ステップと、
（ｃ）前記特定の値に変更された変更済みの前記特定のコードワードを含む前記複数個のコードワードを用いて前記デコードを行うデコードステップと、
（ｄ）前記デコードステップにより、前記第１のデコード結果とは異なる第２のデコード結果が取得されるか否かを判断する判断ステップと、を含む、
前記検査処理実行部と、を備える、
二次元コード読取装置。
【請求項２】
前記デコード部が前記デコードを行ったことによって前記第１のデコード結果が取得された後、前記デコードの過程で誤り訂正処理が行われたか否かを判断する、第１の判断部をさらに備え、
前記検査処理実行部は、前記デコード部が前記デコードを行ったことによって前記第１のデコード結果が取得され、かつ、前記第１の判断部が、前記誤り訂正処理が行われたと判断した前記第１の場合に、前記検査処理を繰り返し実行し、
前記特定ステップでは、前記コード画像に基づいて抽出され、前記誤り訂正処理が行われる前の前記複数個のコードワードのうちから、前記特定のコードワードが特定される、請求項１に記載の二次元コード読取装置。
【請求項３】
前記特定ステップでは、前記複数個のコードワードのうち、前記第１のデコード結果が取得された際に前記誤り訂正処理が実行された１個以上の訂正対象コードワードを除いた１個以上の特定可能コードワードのうちから、前記特定のコードワードが特定される、請求項２に記載の二次元コード読取装置。
【請求項４】
前記第１の判断部は、前記デコード部が前記デコードを行ったことによって前記第１のデコード結果が取得される場合に、前記デコードの過程で、前記二次元コードに設定されている最大誤り訂正許容率の９０％以上のコードワードに対して、前記誤り訂正処理が行われたか否かを判断し、
前記検査処理実行部は、前記第１の判断部が、前記二次元コードに設定されている前記最大誤り訂正許容率の９０％以上のコードワードに対して前記誤り訂正処理が行われたと判断した前記第１の場合に、前記検査処理を繰り返し実行する、請求項２又は３に記載の二次元コード読取装置。
【請求項５】
前記特定ステップでは、１個の前記特定のコードワードが特定される、請求項１から４のいずれか一項に記載の二次元コード読取装置。
【請求項６】
端末装置と、前記端末装置と通信可能なサーバと、をさらに備え、
前記端末装置には、
前記撮像部と、
前記デコード部と、
前記第１の場合に、前記コード画像を前記サーバに送信する送信部と、が搭載され、
前記サーバには、前記検査処理実行部が搭載される、請求項１から５のいずれか一項に記載の二次元コード読取装置。
【請求項７】
前記検査処理実行部が前記検査処理を実行することによって前記第２のデコード結果が取得される場合に、前記第１のデコード結果の少なくとも一部、及び、前記第２のデコード結果の少なくとも一部を出力する、デコード結果出力部をさらに備える、請求項１から６のいずれか一項に記載の二次元コード読取装置。
【請求項８】
前記検査処理実行部が前記検査処理を実行することによって前記第２のデコード結果が取得される第２の場合に、前記コード画像に基づいて、前記二次元コードのうち、前記第１のデコード結果及び前記第２のデコード結果が取得される要因となった特定のセルブロックを強調した画像である強調コード画像を出力する、強調コード画像出力部をさらに備える、請求項１から７のいずれか一項に記載の二次元コード読取装置。
【請求項９】
前記検査処理実行部は、前記検査処理を実行する場合に、
前記判断ステップにおいて、前記第２のデコード結果が取得されたと判断された場合に、前記検査処理を終了する、請求項１から８のいずれか一項に記載の二次元コード読取装置。
【請求項１０】
前記検査処理実行部は、前記検査処理を実行する場合に、
前記特定ステップにおいて、前記複数個のコードワードのうち、誤り訂正符号に対応する１個以上のコードワードのうちから優先的に前記特定のコードワードを特定する、請求項９に記載の二次元コード読取装置。
【請求項１１】
前記検査処理実行部は、前記検査処理を実行する場合に、
前記判断ステップにおける判断結果に関わらず、前記複数個のコードワードのうち、前記特定のコードワードとして特定可能な特定可能コードワードをすべて特定し、特定されたすべての前記特定のコードワードについて、前記特定のコードワードの値を変更可能なすべての前記特定の値に変更し、変更されたすべての前記特定の値のそれぞれについて前記デコードステップを行う、請求項１から８のいずれか一項に記載の二次元コード読取装置。
【請求項１２】
前記変更ステップでは、前記特定のコードワードの値に基づいて、前記二次元コードのうち、前記特定のコードワードに対応する特定のセルブロックに含まれる８個のセルのうち、特定のセルの明暗を反転させた場合における前記特定のコードワードの値を特定することにより、前記特定のコードワードの値を前記特定の値に変更する、請求項１から１１のいずれか一項に記載の二次元コード読取装置。
【請求項１３】
二次元コード読取装置のためのコンピュータプログラムであって、
前記二次元コード読取装置は、
複数個の明色セルと複数個の暗色セルとを二次元のマトリックス上に配置して構成される二次元コードを撮像する撮像部と、
コンピュータと、を備え、
前記コンピュータプログラムは、前記コンピュータを、以下の各部、即ち、
前記撮像部によって撮像された前記二次元コードを表わすコード画像に基づいて、前記二次元コードに記録された情報のデコードを行うデコード部と、
前記デコード部が前記デコードを行ったことによって第１のデコード結果が取得される第１の場合に、以下の検査処理を繰り返し実行する検査処理実行部であって、前記検査処理は、
（ａ）前記コード画像に基づいて抽出される複数個のコードワードのうちから、特定のコードワードを特定する特定ステップと、
（ｂ）前記特定のコードワードの値を特定の値に変更する変更ステップと、
（ｃ）前記特定の値に変更された変更済みの前記特定のコードワードを含む前記複数個のコードワードを用いて前記デコードを行うデコードステップと、
（ｄ）前記デコードステップにより、前記第１のデコード結果とは異なる第２のデコード結果が取得されるか否かを判断する判断ステップと、を含む、
前記検査処理実行部、
として機能させる、コンピュータプログラム。
【請求項１４】
複数個の明色セルと複数個の暗色セルとを含む複数個のセルを二次元のマトリックス上に配置して構成される二次元コードであって、
二次元コード読取装置によってデコードが行われる場合に、
前記二次元コードを表わすコード画像に基づいて抽出される複数個のコードワードのうちの特定のコードワードの値が第１の値である場合には、第１のデコード結果が出力され、
前記特定のコードワードの値が前記第１の値とは異なる第２の値に変更された場合には、前記第１のデコード結果とは異なる第２のデコード結果が出力される、
二次元コード。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で開示する技術は、二次元コード読取装置、二次元コード読取装置のためのコンピュータプログラム、及び、二次元コードに関する。
【背景技術】
【０００２】
特許文献１に示すように、複数個の明色セルと複数個の暗色セルとを二次元のマトリックス上に配置して構成される二次元コードに記録された情報を読み取るための二次元コードが知られている。この種の二次元コードに記録された情報を読み取るために、二次元コード読取装置が用いられる。このような二次元コード読取装置は、通常、二次元コードを撮像する撮像部と、撮像部によって撮像された二次元コードを表わすコード画像に基づいて、二次元コードに記録された情報のデコードを行う制御部と、を備える。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第２９３８３３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１の技術では、読み取り対象である１個の二次元コードには、本来、一種類の情報のみが記録されることが予定されている。即ち、特許文献１の技術では、特定のセル構成を有する特定の二次元コードが二次元コード読取装置で読み取られる場合、読み取られた結果として出力されるデコード結果は、毎回、特定の二次元コードに予め記録された特定の情報であることが予定されている。
【０００５】
しかしながら、近年、１個の二次元コードを構成する複数個のセルのうちの１個のセルを、意図的に明色と暗色の中間色で表示したり、意図的に明色部と暗色部とに分割して表示したりする特殊セルとした特殊二次元コードが、例えば不正の目的等で使用される事態が確認されている。このような特殊二次元コードが二次元コード読取装置によって読み取られる場合、読み取りの際の諸条件（例えば、特殊二次元コードが撮像される際の光の加減等）に応じて、特殊セルが、暗色セルとして読み取られる場合と、明色セルとして読み取られる場合とがある。そして、特殊セルが暗色セルとして読み取られる場合と、明色セルとして読み取られる場合とによって、二通りの異なるデコード結果が出力されてしまうことがある。その結果、特殊二次元コードが読み取られた際、二次元コード読取装置の利用者が意図しないデコード結果（例えば、有害サイトのＵＲＬ等）が出力されてしまう等の不都合が発生する場合もある。
【０００６】
本明細書では、読み取られた二次元コードが、読み取りの際の条件に応じて二通りの異なるデコード結果が出力され得る特殊二次元コードであるか否かを判別することができる技術を提供する。
【０００７】
本明細書は、二次元コード読取装置を開示する。前記二次元コード読取装置は、複数個の明色セルと複数個の暗色セルとを二次元のマトリックス上に配置して構成される二次元コードを撮像する撮像部と、前記撮像部によって撮像された前記二次元コードを表わすコード画像に基づいて、前記二次元コードに記録された情報のデコードを行うデコード部と、前記デコード部が前記デコードを行ったことによって第１のデコード結果が取得される第１の場合に、以下の検査処理を繰り返し実行する検査処理実行部であって、前記検査処理は、（ａ）前記コード画像に基づいて抽出される複数個のコードワードのうちから、特定のコードワードを特定する特定ステップと、（ｂ）前記特定のコードワードの値を特定の値に変更する変更ステップと、（ｃ）前記特定の値に変更された変更済みの前記特定のコードワードを含む前記複数個のコードワードを用いて前記デコードを行うデコードステップと、（ｄ）前記デコードステップにより、前記第１のデコード結果とは異なる第２のデコード結果が取得されるか否かを判断する判断ステップと、を含む、前記検査処理実行部と、を備える。
【０００８】
上記の通り、近年、１個の二次元コードを構成する複数個のセルのうちの１個のセルを、読み取り時の条件によって暗色セルと明色セルの二通りに読み取られ得る特殊セルとした特殊二次元コードが、例えば不正の目的等で使用される事態が確認されている。例えば、特殊セルは、意図的に暗色と明色の中間色で表示されたり、意図的に暗色部と明色部とに分割して表示されたりする。
【０００９】
一方、そのような特殊セルを含まない通常の二次元コードにおいても、印字の際の不具合等により、上記の特殊セルと同様の表示態様のセルが偶発的に含まれる場合がある。また、二次元コードが汚れたり削れたりすることにより、二次元コードを構成する複数個のセルのうちの一部が、明色セル（又は暗色セル）に変わってしまう事態も起こり得る。ただし、通常であれば、二次元コード読取装置がそのような通常の二次元コードを読み取る場合、公知の誤り訂正処理が行われることにより、所定の最大誤り訂正許容率（例えば、７％、１５％、２５％、３０％等）以下の割合の誤り（汚損、損傷、欠け等）は訂正される。そのため、通常であれば、何らかの事情で二次元コードに所定割合までの特殊セルが含まれた場合であっても、二次元コード読取装置は、誤り訂正処理を行った上で、予め二次元コードに記録された情報をデコード結果として出力することができる。
【００１０】
ここで、「最大誤り訂正許容率」とは、二次元コードが汚損等している場合においても、情報をデコードし得る許容率の最大値のことである。例えば最大誤り訂正許容率が２５％である二次元コードの場合、二次元コードの情報記録領域に含まれる複数個のセルブロックのうちの２５％が損傷している場合であっても、読取装置は当該二次元コードからデータをデコード可能であることを意味する。ここで言う１個の「セルブロック」は、８個のセルを単位とするセル群によって構成されるセル群単位である。デコードの過程では、１個の「セルブロック」からは１個のコードワードが抽出される。１個のコードワードは、２桁の１６進数の英数字によって表わされる。そして、最大誤り訂正許容率のレベルは、二次元コード毎に予め設定されている。二次元コードは、最大誤り訂正許容率を示すデータも含んでいる。従って、最大誤り訂正許容率のレベルが高いほど、二次元コードに誤りを含むセルブロックが含まれる割合が高い場合であってもデータを正しくデコードすることが可能となる。
【００１１】
しかしながら、本件発明者等の分析の結果、近年確認されている上記の特殊二次元コードは、特殊セルが暗色セルとして読み取られる場合と、明色セルとして読み取られる場合と、のどちらの場合においても、特殊セルを含むセルブロック以外の部分において、最大誤り訂正許容率に対応する数のセルブロック（即ち、最大誤り訂正許容率の限界値のセルブロック）に対する誤り訂正処理が実行されるよう、緻密に設定されていることが判明した。その結果、特殊二次元コードが読み取られた際に、特殊セルを含むセルブロックが「誤り」として処理されることなく、特殊セルが暗色セル又は明色セルとして読み取られた状態でデコードが成功してしまう事態が発生する。その結果、特殊セルが暗色セルとして読み取られる場合と、明色セルとして読み取られる場合とによって、二通りの異なるデコード結果が出力されてしまう事態が起こる。その結果、特殊二次元コードが読み取られた際、二次元コード読取装置の利用者が意図しない読取結果（例えば、有害サイトのＵＲＬ等）がデコード結果として出力されてしまう等の不都合が発生する場合もある。
【００１２】
これに対し、上記の構成を有する本明細書の二次元コード読取装置によると、検査処理実行部は、二次元コードを表わすコード画像に基づいてデコードを行うことで第１のデコード結果が取得される第１の場合に、上記の検査処理を繰り返し実行する。検査処理では、検査処理実行部は、コード画像に基づいて抽出される複数個のコードワードのうちから、特定のコードワードを特定し、特定のコードワードの値を特定の値に変更し、特定の値に変更された変更済みの特定のコードワードを含む複数個のコードワードを用いてデコードを行い、第１のデコード結果と異なる第２のデコード結果が取得されるか否かを判断する。ここで言う「コードワード」は、上記の通り、二次元コードに含まれるセルブロック（即ち、８個のセルによって構成されるセル群）のデコード結果を表わす文字列（２桁の１６進数の英数字）である。「コードワードを変更」することは、当該コードワードに対応するセルブロック内の８個のセルの明色／暗色の組合せの少なくとも一部を変更することに対応する。また、ここで言う「複数個のコードワードのうちから、特定のコードワードを特定する」ことは、複数個のコードワードのうちから１個の特定のコードワードを特定することと、複数個のコードワードのうちから２個以上の特定のコードワードを特定することと、のどちらも含む。「複数個のコードワード」は、第１のデコード結果が取得される過程で誤り訂正処理が行われている場合には、コード画像に基づいて抽出され、かつ、誤り訂正処理が行われる前の複数個のコードワードを意味する。第１のデコード結果が取得される過程で誤り訂正処理が行われていない場合には、コード画像に基づいて抽出された複数個のコードワードを意味する。
【００１３】
そして、上記の検査処理を繰り返し行う過程で、特定の値に変更された変更済みの特定のコードワードを含む複数個のコードワードを用いてデコードを行う場合、以下の三通りの結果のうちのいずれかが得られる。
【００１４】
第１の結果は、デコード失敗（即ち、デコード結果が得られないこと）である。即ち、第１の結果が得られる場合とは、特定のコードワードの値を特定の値に変更したことで、誤ったセルブロックの数（即ち正しい値を示さないコードワードの数）が最大誤り訂正許容率の限界値を超え、その結果、誤り訂正処理を行ってもデコード結果の取得に失敗する場合である。
【００１５】
第２の結果は、既に取得済みの第１のデコード結果が得られることである。即ち、第２の結果が得られる場合とは、特定のコードワードの値を特定の値に変更したが、誤ったセルブロックの数（即ち正しい値を示さないコードワードの数）が最大誤り訂正許容率の限界値以下であるため、誤り訂正処理が行われることで、誤ったセルブロックに対応するコードワードの値が訂正され、第１のデコード結果が得られる場合である。
【００１６】
第３の結果は、第１のデコード結果とは異なる第２のデコード結果が得られることである。即ち、第３の結果が得られる場合とは、特定のコードワードの値を特定の値に変更したことで、第１のデコード結果が得られた場合とは異なるコードワードに対して誤り訂正処理が行われ、その結果、第１のデコード結果とは異なる第２のデコード結果が得られる場合である。
【００１７】
読み取られた二次元コードが通常の二次元コードである場合、検査処理を繰り返し実行する過程で、複数個のコードワードのうち、特定のコードワードとして特定可能な特定可能コードワードをすべて特定し、さらに、特定されたすべての特定のコードワードについて、特定のコードワードの値を変更可能なすべての特定の値に変更し、変更されたすべての特定の値のそれぞれについてデコードを行った場合であっても、上記の第１の結果と第２の結果のいずれかが得られるに過ぎない。
【００１８】
一方、読み取られた二次元コードが、上記の特殊二次元コードである場合、検査処理を繰り返し実行する過程で、二通りのデコード結果（第１のデコード結果及び第２のデコード結果）が得られ得る。即ち、検査処理を繰り返し実行したことで、上記の第３の結果が得られた場合、読み取られた二次元コードが特殊二次元コードであると言うことができる。
【００１９】
従って、上記の二次元コード読取装置によれば、読み取られた二次元コードが、読み取りの際の条件に応じて二通りの異なるデコード結果が出力され得る特殊二次元コードであるか否かを判別することができる。
【００２０】
前記二次元コード読取装置は、前記デコード部が前記デコードを行ったことによって前記第１のデコード結果が取得された後、前記デコードの過程で誤り訂正処理が行われたか否かを判断する、第１の判断部をさらに備えてもよい。前記検査処理実行部は、前記デコード部が前記デコードを行ったことによって前記第１のデコード結果が取得され、かつ、前記第１の判断部が、前記誤り訂正処理が行われたと判断した前記第１の場合に、前記検査処理を繰り返し実行してもよい。前記特定ステップでは、前記コード画像に基づいて抽出され、前記誤り訂正処理が行われる前の前記複数個のコードワードのうちから、前記特定のコードワードが特定されてもよい。
【００２１】
この構成によると、検査処理実行部は、第１のデコード結果が取得され、かつ、第１の判断部が、誤り訂正処理が行われたと判断した第１の場合に限り、検査処理を繰り返し実行することができる。上記の通り、読み取られた二次元コードが特殊二次元コードである場合には、第１のデコード結果が取得される過程で誤り訂正処理が行われている。即ち、第１のデコード結果が取得される過程で誤り訂正処理が行われていない場合、読み取られた二次元コードが特殊二次元コードである可能性は極めて低い。従って、上記の構成によると、二次元コードが特殊二次元コードである可能性が極めて低い場合に検査処理を実行させないことにより、どのような場合も検査処理を実行させる場合に比べて、検査処理実行部の処理負荷を軽減することができる。
【００２２】
前記特定ステップでは、前記複数個のコードワードのうち、前記第１のデコード結果が取得された際に前記誤り訂正処理が実行された１個以上の訂正対象コードワードを除いた１個以上の特定可能コードワードのうちから、前記特定のコードワードが特定されてもよい。
【００２３】
複数個のコードワードのうち、訂正対象コードワードの値を他の値に変えても、デコードの際にその値に対して誤り訂正処理が行われることで、同じ第１のデコード結果が出力されるように訂正されるに過ぎない。即ち、訂正対象コードワードの値を特定のコードワードとして特定し、値を変更したとしても、変わらず第１のデコード結果が出力されるに過ぎない。そのため、上記の構成によると、二次元コード読取装置は、訂正対象コードワードを特定のコードワードとして特定しないようにすることで、検査処理の実行回数を減少させ、検査処理実行部の処理負荷を少なくすることができる。
【００２４】
前記第１の判断部は、前記デコード部が前記デコードを行ったことによって前記第１のデコード結果が取得される場合に、前記デコードの過程で、前記二次元コードに設定されている最大誤り訂正許容率の９０％以上のコードワードに対して、前記誤り訂正処理が行われたか否かを判断してもよい。前記検査処理実行部は、前記第１の判断部が、前記二次元コードに設定されている前記最大誤り訂正許容率の９０％以上のコードワードに対して前記誤り訂正処理が行われたと判断した前記第１の場合に、前記検査処理を繰り返し実行してもよい。
【００２５】
第１のデコード結果が取得される場合に、最大誤り訂正許容率の９０％以上のコードワードに対して、既に誤り訂正処理が行われていれば、検査処理実行部は、特定ステップにおいて、残りの１０％以下のコードワードに対応する数のコードワードを特定のコードワードとして特定した上で、残りのステップを実行すればよい。そのため、最大誤り訂正許容率の９０％以上のコードワードに対して既に誤り訂正処理が行われていれば、検査処理の実行回数を比較的少なくし得る。そのため、二次元コード読取装置の全体としての処理速度を向上させ得る。
【００２６】
前記特定ステップでは、１個の前記特定のコードワードが特定されてもよい。
【００２７】
特定ステップにおいて、複数個の特定のコードワードが特定される場合、各特定のコードワードの変更後の値の組合せが多くなり、検査処理実行部の処理負荷が大きくなる。これに対し、上記の構成によると、１個の特定のコードワードが特定される場合、複数個の特定のコードワードが特定される場合に比べて各特定のコードワードの変更後の値の組合せが少なくなり、検査処理実行部の処理負荷を小さくすることができる。
【００２８】
二次元コード読取装置は、端末装置と、前記端末装置と通信可能なサーバと、をさらに備えてもよい。前記端末装置には、前記撮像部と、前記デコード部と、前記第１の場合に、前記コード画像を前記サーバに送信する送信部と、が搭載されてもよい。前記サーバには、前記検査処理実行部が搭載されてもよい。
【００２９】
検査処理を実行する検査処理実行部の処理負荷は、撮像部、及び、デコード部の処理負荷の合計よりも大きい場合がある。上記の構成によると、端末装置よりも処理能力の高いサーバを準備することにより、一つの装置で全ての処理を行う場合に比べ、二次元コード読取装置の全体としての処理速度を向上させ得る。
【００３０】
前記検査処理実行部が前記検査処理を実行することによって前記第２のデコード結果が取得される場合に、前記第１のデコード結果の少なくとも一部、及び、前記第２のデコード結果のうちの少なくとも一部を出力する、デコード結果出力部をさらに備えてもよい。
【００３１】
この構成によると、二次元コード読取装置は、第２のデコード結果が取得される場合に、第１のデコード結果の少なくとも一部と第２のデコード結果の少なくとも一部とを出力することができる。二次元コード読取装置の利用者は、出力された内容に基づいて、読み取られた二次元コードが特殊二次元コードであることを把握することができるとともに、二次元コードからデコードされ得る第１のデコード結果の少なくとも一部と第２のデコード結果の少なくとも一部とを確認することができる。
【００３２】
前記二次元コード読取装置は、前記検査処理実行部が前記検査処理を実行することによって前記第２のデコード結果が取得される第２の場合に、前記コード画像に基づいて、前記二次元コードのうち、前記第１のデコード結果及び前記第２のデコード結果が取得される要因となった特定のセルブロックを強調した画像である強調コード画像を出力する、強調コード画像出力部をさらに備えてもよい。
【００３３】
この構成によると、二次元コード読取装置の利用者は、出力された強調コード画像を見ることで、特定のセルブロックを要因として第１のデコード結果及び第２のデコード結果が取得されたことを把握することができる。特に、特定のセルブロック内に特殊セルが視認可能な態様で存在する場合、利用者が特殊セルを見て確認することができる。
【００３４】
前記検査処理実行部は、前記検査処理を実行する場合に、前記判断ステップにおいて、前記第２のデコード結果が取得されたと判断された場合に、前記検査処理を終了してもよい。
【００３５】
この構成によると、検査処理実行部は、第２のデコード結果が取得されたと判断された時点で、検査処理を繰り返し実行することを終了することができる。複数個のコードワードのうち、特定のコードワードとして特定可能な特定可能コードワードをすべて特定し、さらに、特定されたすべての特定のコードワードについて、特定のコードワードの値を変更可能なすべての特定の値に変更し、変更されたすべての特定の値のそれぞれについてデコードを行う場合に比べて、検査処理の実行回数を少なくすることができる。そのため、二次元コード読取装置の全体としての処理速度を向上させ得る。
【００３６】
前記検査処理実行部は、前記検査処理を実行する場合に、前記特定ステップにおいて、前記複数個のコードワードのうち、誤り訂正符号に対応する１個以上のコードワードのうちから優先的に前記特定のコードワードを特定してもよい。
【００３７】
１つの二次元コードにおける複数個のコードワード（即ち複数個のセルブロック）は、データキャラクタに対応する１個以上のコードワードと、誤り訂正符号に対応する１個以上のコードワードと、を含んでいる。そして、上記の特殊二次元コードは、その特性上、データキャラクタに対応するコードワードよりも、誤り訂正符号に対応するコードワードのほうに、誤りがより多く含まれる傾向がある。データキャラクタに対応するコードワードは、その値がデコード結果に直結するため、誤り訂正を前提とするコードワードを多く含ませられないという技術的な事情もある。そのため、検査処理の実行の際に、誤り訂正符号に対応する１個以上のコードワードのうちから優先的に特定のコードワードを特定することで、第２のデコード結果が比較的早期に取得され得る。検査処理の実行回数を少なくし得るため、二次元コード読取装置の全体としての処理速度を向上させ得る。
【００３８】
前記検査処理実行部は、前記検査処理を実行する場合に、前記判断ステップにおける判断結果に関わらず、前記複数個のコードワードのうち、前記特定のコードワードとして特定可能な特定可能コードワードをすべて特定し、特定されたすべての前記特定のコードワードについて、前記特定のコードワードの値を変更可能なすべての前記特定の値に変更し、変更されたすべての前記特定の値のそれぞれについて前記デコードステップを行うようにしてもよい。
【００３９】
この構成によると、二次元コード読取装置は、特定可能コードワードと特定の値とのすべての組み合わせについてデコードステップを行う。そのため、二次元コード読取装置は、二次元コードに基づいて行われ得るすべてのデコードの結果を把握することができる。
【００４０】
前記変更ステップでは、前記特定のコードワードの値に基づいて、前記二次元コードのうち、前記特定のコードワードに対応する特定のセルブロックに含まれる８個のセルのうち、特定のセルの明暗を反転させた場合における前記特定のコードワードの値を特定することにより、前記特定のコードワードの値を前記特定の値に変更するようにしてもよい。
【００４１】
上記の通り、１個のコードワードは、二次元コードに含まれる１個のセルブロック（即ち、８個のセルによって構成されるセル群）のデコード結果を表わす文字列（２桁の１６進数の英数字）である。そして、コードワードの値は、当該コードワードに対応するセルブロック内の８個のセルの明色／暗色の組合せに対応している。即ち、上記の構成によると、検査処理実行部は、特定のコードワードの値を特定の値に変更する際、特定のコードワードに対応する特定のセルブロックの８個のセルのうちの少なくとも１つの明暗を反転させた場合に対応する特定のコードワードの値を特定する。これにより、特定のコードワードに対応する特定のセルブロック８個のセルの明暗のすべての組合せに対応する特定の値を１つずつ特定する場合に比べ、特定の値のバリエーションが少なく済む。この結果、検査処理の実行回数を少なくし得るため、二次元コード読取装置の全体としての処理速度を向上させ得る。
【００４２】
なお、上記の二次元コード読取装置を実現するための制御方法、コンピュータプログラム、及び、当該コンピュータプログラムを記憶するコンピュータ読取可能記録媒体も、新規で有用である。
【００４３】
さらに、本明細書は、複数個の明色セルと複数個の暗色セルとを含む複数個のセルを二次元のマトリックス上に配置して構成される二次元コードを開示する。前記二次元コードは、二次元コード読取装置によってデコードが行われる場合に、前記二次元コードを表わすコード画像に基づいて抽出される複数個のコードワードのうちの特定のコードワードの値が第１の値である場合には、第１のデコード結果が出力され、前記特定のコードワードの値が前記第１の値とは異なる第２の値に変更された場合には、前記第１のデコード結果とは異なる第２のデコード結果が出力される。
【００４４】
この構成によると、二次元コードからは、特定のコードワードの値が第１の値である場合には、第１のデコード結果が出力され、特定のコードワードの値が第２の値に変更された場合には、第２のデコード結果が出力される。そのため、上記の二次元コードでは、例えば、第１のデコード結果を、汎用の二次元コード読取装置によってデコード可能な汎用情報として記録させ、第２のデコード結果を、特定のコードワードの値を第２の値に変更してデコードを行ない得る構成を有する二次元コード読取装置によってのみデコード可能な光セキュリティ情報として記録させることもできる。従って、上記の二次元コードによると、外見上、上記の特殊セルに相当するセル等を含まない構成を有していても、特定のコードワードの値が第１の値であるか第２の値であるかに応じて二通りのデコード結果を出力することができる。
【００４５】
なお、上記の二次元コードを生成するための制御方法、コンピュータプログラム、及び、当該コンピュータプログラムを記憶するコンピュータ読取可能記録媒体も、新規で有用である。また、上記の二次元コードを読み取るための制御方法、コンピュータプログラム、及び、当該コンピュータプログラムを記憶するコンピュータ読取可能記録媒体も、新規で有用である。
【図面の簡単な説明】
【００４６】
【図１】情報コード読取システムの概要を示す。
【図２】特殊二次元コードの一例を示す。
【図３】図２のコード画像において、特殊セルが明色セルとして読み取られた場合に得られるコードワードと暗色セルとして読み取られた場合に得られるコードワードを示す。
【図４】コード読取処理のフローチャートを示す。
【図５】コード検証処理のフローチャートを示す。
【図６】コード検証処理において第２のデコード結果が取得される過程の具体例を示す。
【図７】図４のＳ２２における出力内容の一例を示す。
【図８】第５実施例で特定のコードワードの値を変更する場合の処理の一例を示す。
【図９】第６実施例の特別な二次元コードの一例を示す。
【発明を実施するための形態】
【００４７】
（第１実施例）
（二次元コード読取システム２の構成；図１）
図１に示す本実施例の二次元コード読取システム２は、サーバ６と、二次元コード読取端末１０とを備える。二次元コード読取端末１０とサーバ６とは相互に通信を実行可能に構成されている。
【００４８】
サーバ６は、図示しない制御部およびメモリを備える管理装置である。サーバ６の制御部が実行する処理については、後述の第２実施例で詳しく説明する。
【００４９】
二次元コード読取端末１０は、例えば、端末機器のディスプレイや紙などに表示された二次元コード１００を読み取って、二次元コード１００に記録されたデータを取得するための装置である。図１の例では、読み取りの対象の二次元コード１００は、ＱＲコード（本件出願人の登録商標）である。二次元コード１００は、複数個の明色セルと複数個の暗色セルとを二次元のマトリックス上に配置して構成されている。他の例では、読み取りの対象の二次元コード１００は、他のマトリックス形式の二次元コードであってもよい。
【００５０】
本実施例の二次元コード読取端末１０は、例えば、利用者が所持するスマートフォン等の端末装置である。図１に示すように、二次元コード読取端末１０は、操作部１２と、表示部１４と、撮像部１６と、通信インターフェース１８と、制御部２０と、メモリ２２と、を備える。なお以下ではインターフェースのことを「Ｉ／Ｆ」と記載する。
【００５１】
操作部１２は、１個以上のキーを含む。利用者は、操作部１２を操作して、様々な指示を二次元コード読取端末１０に入力することができる。表示部１４は、読み取られた二次元コード１００のデコード結果を含む様々な情報を表示させるためのディスプレイである。また、操作部１２と表示部１４は、両者が一体に構成されたタッチパネルであってもよい。撮像部１６は、所定の撮影可能範囲内の画像を撮影可能なＣＣＤカメラである。撮像部１６が二次元コード１００を撮像することにより、二次元コード１００を表わすコード画像Ｃ（図１、図２等参照）が取得される。通信Ｉ／Ｆ１８は、外部の機器（例えばサーバ６）との間で通信（無線通信又は有線通信）を実行するためのＩ／Ｆである。
【００５２】
制御部２０は、メモリ２２に記憶されているプログラムに従って、後述のコード読取処理（図４参照）を含む様々な処理を実行する。本実施例では、制御部２０がコード読取処理を実行することにより、二次元コード１００に記録されたデータを取得し、出力することができる。メモリ２２は、ＲＯＭ（Read Only Memoryの略）、ＲＡＭ（Random Access Memoryの略）等によって構成される。上記の通り、メモリ２２は、ＯＳプログラム、上述のコード読取処理を実行するための読取アプリケーションプログラム等、様々なプログラムを記憶している。さらに、メモリ２２は、後述のコード読取処理の実行過程において生成される様々なデータを記憶するための一時記憶領域も有している。
【００５３】
（特殊二次元コードの構成及び仕組み；図２、図３）
上記の通り、二次元コード読取端末１０は二次元コード１００を読み取り対象とする。一方、近年、１個の二次元コードを構成する複数個のセルのうちの１個のセルを、条件によって暗色セルと明色セルの二通りに読み取られ得る特殊セルとした二次元コード（以下では「特殊二次元コード」と呼ぶ）が、例えば不正の目的で使用される事態が確認されている。ここで言う「特殊セル」は、意図的に暗色と明色の中間色で表示されたり、意図的に暗色部と明色部とに分割して表示されたりしている。このような特殊二次元コードが従来の二次元コード読取装置によって読み取られる場合、読み取りの際の諸条件（例えば、特殊二次元コードが撮像される際の光の加減等）に応じて、特殊セルが、明色セルとして読み取られる場合と、暗色セルとして読み取られる場合とが生じ得る。そして、特殊セルが明色セルとして読み取られる場合と、暗色セルとして読み取られる場合とによって、二通りの異なるデコード結果が出力されてしまうことがある。その結果、特殊二次元コードが読み取られた際、二次元コード読取装置の利用者が意図しない読取結果（例えば、有害サイトのＵＲＬ等）がデコード結果として出力されてしまう等の不都合が発生する場合もある。
【００５４】
以下、図２、図３を参照して、このような特殊二次元コードの構成と、特殊二次元コードが読み取られた際に二通りの異なるデコード結果が出力される仕組みと、について説明する。以下では、本実施例の二次元コード読取端末１０が、特殊二次元コードである二次元コード１００を読み取る場合を例として説明する。図２の（ａ）は、二次元コード読取端末１０の撮像部１６によって撮像される二次元コード１００（及びその二次元コード１００を表わすコード画像Ｃ）の例である。即ち、図２の（ａ）の二次元コード１００は、特殊二次元コードである。二次元コード１００は、暗色（具体的には黒色）のセル（以下「暗色セル」と呼ぶ）と、明色（具体的には白色）のセル（以下「明色セル」と呼ぶ）との組み合わせによって構成されている。二次元コード１００は、３箇所の角部に配置されたファインダパターン４０と、１個のアライメントパターン４２と、ファインダパターン４０及びアライメントパターン４２の中央に配置されたデータセル領域４４と、を含む。
【００５５】
ファインダパターン４０は、二次元コード１００の読み取りの際に最初に認識される部分であり、二次元コード１００の上下左右位置を特定するためのパターンである。ファインダパターン４０の位置、大きさ、形状等は予め定められている。二次元コード読取端末１０は、ファインダパターン４０を認識することで、二次元コード１００の向きに関わらず、どの方向からでも二次元コード１００に記録されたデータを読み取ることができるようになる。アライメントパターン４２は、歪みによって生じる各セルの位置ずれを補正するための部分である。
【００５６】
データセル領域４４は、二次元コード１００に記録されるデータを表現するための各種セルが含まれる領域である。データセル領域４４には、データキャラクタ、誤り訂正符号等が含まれる。
【００５７】
ここで、「データキャラクタ」は、二次元コード１００に記録されるデータを含む。データキャラクタによって表現されるデータには、デコード対象のデータ自身のほかに、最大誤り訂正許容率を示すデータも含まれる。最大誤り訂正許容率とは、二次元コード１００が汚損等している場合においても、データをデコードし得る許容率の最大値（例えば、７％、１５％、２５％、３０％等）を示す。例えば最大誤り訂正許容率が２０％である情報コードの場合、二次元コード１００のデータセル領域４４を構成する４４個のセルブロックＣＢ（後述の図２の（ｂ）参照。即ち、ファインダパターン４０及びアライメントパターン４２を除く部分）のうちの２０％（この場合は９個）が損傷している場合であっても、二次元コード読取端末１０は当該二次元コード１００からデータをデコード可能であることを意味する。そして、「誤り訂正符号」は、二次元コード１００を読み取った二次元コード読取端末１０が、読み取ったデータの誤りを検出し、訂正することを可能にするための情報である。二次元コード読取端末１０は、読み取ったデータと誤り訂正符号とを比較して、データに誤り（即ち、欠け等）があるか否かを判定することができるとともに、誤りがある場合に、誤り訂正符号に基づいて誤り部分を補完することができる。この機能は誤り訂正機能と呼ばれ、一般に知られている。また、この誤り訂正機能に基づいて誤り部分を補完する処理のことを以下では「誤り訂正処理」と呼ぶ場合がある。
【００５８】
さらに、本実施例では、データセル領域４４には、意図的に明色と暗色の中間色で表示させた１個の特殊セル５０が含まれる。即ち、特殊二次元コードである二次元コード１００は、１個の特殊セル５０を含む。特殊セル５０は、二次元コード読取端末１０によって読み取られる場合、読み取りの際の諸条件（例えば、特殊二次元コードが撮像される際の光の加減等）に応じて、特殊セル５０が、明色セルとして読み取られる場合と、暗色セルとして読み取られる場合がある。そして、特殊セル５０が明色セルとして読み取られる場合と、暗色セルとして読み取られる場合とによって、二通りの異なるデコード結果が出力されてしまうことがある。この例では、特殊セル５０が暗色セルとして読み取られる場合（パターンＡ）には、デコード結果「http://srv.prof.net/~lob」が出力される。一方、特殊セル５０が明色セルとして読み取られる場合（パターンＢ）には、デコード結果「http://srv.prof.net/~lab」が出力される。パターンＡのデコード結果と、パターンＢのデコード結果は、ともにウェブサイトのＵＲＬを示すが、ＵＲＬの一部が「a」と「o」とで異なっている。このように、特殊二次元コードである二次元コード１００が読み取られると、二通りの異なるデコード結果が出力される。その結果、特殊二次元コードが読み取られた際、利用者が意図しないデコード結果（例えば、有害サイトのＵＲＬ等）が出力される場合もある。
【００５９】
図２の（ｂ）に示すように、データセル領域４４に含まれる多数のセルは、８個のセルを単位とするセル群である複数個のセルブロックＣＢを構成している。図２の（ｂ）の例では、二次元コード１００内には、合計４４個のセルブロックＣＢ（図２の（ｂ）中のＤ１〜Ｄ２８、Ｅ１〜Ｅ１６）が設けられる。このうち、２８個のセルブロックＤ１〜Ｄ２８は、上述のデータキャラクタに対応するセルブロックである。セルブロックＤ１〜Ｄ２８のそれぞれは、１６進法で表される２桁の文字列であるコードワード（例えば図３の（ａ）の「４１」等）を表わしている。１６個のセルブロックＥ１〜Ｅ１６は、上述の誤り訂正符号に対応するセルブロックである。セルブロックＥ１〜Ｅ１６のそれぞれも、１６進法で表される２桁の文字列であるコードワード（例えば図３の（ａ）の「Ｅ６」等）を表わしている。
【００６０】
特殊二次元コードに基づいて二通りのデコード結果が出力される仕組みについて説明する前に、特殊セル５０を含まない通常の二次元コードにおいて、一部のセルに特殊が生じた場合であっても、予定された（即ち一通りの）デコード結果が正しく出力される仕組みについて説明しておく。通常の二次元コードにおいて、印字の際の不具合等により、上記の特殊セル５０と同様の表示態様を有するセルが偶発的に含まれる場合がある。また、二次元コードが汚れたり削れたりすることにより、二次元コードを構成する複数個のセルのうちの一部が、暗色セル（又は明色セル）に変わってしまう事態も起こり得る。ただし、通常であれば、二次元コード読取端末１０がそのような二次元コードを読み取る場合、上記の誤り訂正処理が行われることにより、所定の最大誤り訂正許容率（例えば、７％、１５％、２５％、３０％等）以下の割合の誤り（汚損、損傷、欠け等）が訂正される。そのため、通常であれば、何らかの事情で二次元コードに所定割合までの特殊セルが含まれた場合であっても、二次元コード読取端末１０は、誤り訂正処理を行った上で、予め二次元コードに記録されたデータ（一通りのデータ）をデコード結果として出力することができる。即ち、特定のセル構成を有する通常の二次元コードが二次元コード読取端末１０で読み取られる場合、読み取られた結果として出力されるデコード結果は、毎回、通常の二次元コードに予め記録された一種類のデータであることが予定されている。
【００６１】
これに対し、近年確認されている上記の特殊二次元コードは、データセル領域４４に含まれる特殊セル５０が暗色セルとして読み取られる場合（図３の（ａ）［パターンＡ］参照）と、明色セルとして読み取られる場合（図３の（ｂ）［パターンＢ］参照）と、のどちらの場合においても、特殊セル５０を含むセルブロック以外の部分において、最大誤り訂正許容率に対応する数のセルブロック（即ち、最大誤り訂正許容率の限界値のセルブロック）に対する誤り訂正処理が実行されるよう、故意かつ巧妙に設定されていることが判明している。その結果、特殊二次元コードが読み取られた際に、特殊セル５０を含むセルブロックが「誤り」として処理されることなく、特殊セル５０が暗色セル又は明色セルとして読み取られてしまう事態が発生する。その結果、特殊セル５０が暗色セルとして読み取られる場合と、明色セルとして読み取られる場合とによって、二通りの異なるデコード結果が出力されてしまう事態が起こる（図３の（ａ）（ｂ）参照）。
【００６２】
図３の（ａ）、（ｂ）を参照して、このことをより詳細に説明する。図３の（ａ）は、特殊二次元コードである二次元コード１００（図２参照）の特殊セル５０が暗色セルとして読み取られる場合（パターンＡ）の具体例を示す。パターンＡでは、デコードの過程で誤り訂正処理が実行されることにより、各セルブロックに対応する訂正後の４４個のコードワードが取得される。図３の（ｂ）は、同様の状況において、特殊セル５０が明色セルとして読み取られる場合（パターンＢ）の具体例を示す。パターンＢでは、誤り訂正処理が実行されることにより、各セルブロックに対応する訂正後の４４個のコードワード（即ち、パターンＡの場合とは部分的に異なる４４個の訂正後のコードワード）が取得される。いずれもパターンでも、特殊二次元コードである二次元コード１００に設定された最大誤り訂正許容率は２０％である。即ち、デコードの際、４４個のセルブロックＣＢのうち、最大９個のセルブロックまでの誤りを訂正可能である。
【００６３】
（パターンＡ；図３の（ａ））
特殊二次元コードである二次元コード１００（図２参照）の特殊セル５０が暗色セルとして読み取られると、誤り訂正処理が行われる前において、図３の（ａ）の上段に示すような４４個のコードワードが取得される。４４個のコードワードのうち、前半の２８個のコードワード（「４１」から「Ｆ７」まで）は、セルブロックＤ１〜Ｄ２８（即ちデータキャラクタに対応するセルブロック）に対応するコードワードである。このうち、網掛け表示で示されている「９６」とその隣の「Ｃ６」が、英文字「o」に相当するコードワードである。そして、４４個のコードワードのうち、後半の１６個のコードワード（「Ｅ６」から「Ｃ６」まで）は、セルブロックＥ１〜Ｅ１６（即ち誤り訂正符号に対応するセルブロック）に対応するコードワードである。このうち、斜線ハッチング表示で示されている「７１」が、特殊セル５０が暗色セルとして読み取られたことで得られたコードワードである。
【００６４】
上記の通り、二次元コード１００に設定された最大誤り訂正許容率は２０％である。そして、特殊二次元コードである二次元コード１００は、特殊セル５０が暗色セルとして読み取られる場合と明色セルとして読み取られる場合のどちらの場合も、最大誤り訂正許容率に対応するセルブロックのコードワードに対する誤り訂正処理が実行されるように故意かつ巧妙に設定される。そのため、二次元コード読取端末１０は、４４個のセルブロックＣＢに対応するコードワードのうち、９個のセルブロックに対応するコードワードの誤りを訂正する。図３の（ａ）の例では、下線を付した９個のコードワードが訂正される。パターンＡでは、誤り訂正処理の対象の９個のコードワードは、いずれも、セルブロックＥ１〜Ｅ１６に対応するコードワードである。
【００６５】
誤り訂正処理が行われたことにより、図３の（ａ）の下段に示すような４４個のコードワードが取得される。図中の４４個のコードワードのうち、訂正処理が行われたコードワード（以下では「訂正ワード」と呼ぶ場合がある）には、下線を付している。誤り訂正処理後においても、網掛け表示で示されている「９６」とその隣の「Ｃ６」は、誤り訂正処理前と変わらず維持されている。即ち、「９６」と「Ｃ６」は、誤り訂正処理前と変わらず英文字「o」を表わしている。この結果、二次元コード読取端末１０は、誤り訂正処理後の４４個のコードワードのうち、前半の２８個のコードワード（「４１」から「Ｆ７」まで）に基づいて、デコード結果「http://srv.prof.net/~lob」を出力することができる。
【００６６】
（パターンＢ；図３の（ｂ））
特殊二次元コードである二次元コード１００（図２参照）の特殊セル５０が明色セルとして読み取られると、誤り訂正処理が行われる前において、図３の（ｂ）の上段に示すような４４個のコードワードが取得される。この場合も、前半の２８個のコードワード（「４１」から「Ｆ７」まで）は、セルブロックＤ１〜Ｄ２８（即ちデータキャラクタに対応するセルブロック）に対応するコードワードである。このうち、網掛け表示で示されている「９６」とその隣の「Ｃ６」が、英文字「o」に相当するコードワードである。そして、４４個のコードワードのうち、後半の１６個のコードワード（「Ｅ６」から「Ｃ６」まで）は、セルブロックＥ１〜Ｅ１６（即ち誤り訂正符号に対応するセルブロック）に対応するコードワードである。このうち、斜線ハッチング表示で示されている「Ｆ１」が、特殊セル５０が明色セルとして読み取られたことで得られたコードワードである。このように、特殊セル５０が明色セルとして読み取られた場合に得られるコードワード（「７１」）とは異なっている。
【００６７】
この場合も、二次元コード１００に設定された最大誤り訂正許容率（２０％）に応じた数（９個）のコードワードの誤りが訂正される。具体的には、図３の（ｂ）のうち、下線を付した９個のコードワードが訂正される。パターンＢで誤り訂正処理の対象となるコードワードは、パターンＡの場合とは異なる。図３の（ｂ）に示すように、パターンＢでは、セルブロックＥ１〜Ｅ１６に対応する（誤り訂正符号に対応する）コードワードに対して誤り訂正処理が行われる他、セルブロックＤ１〜Ｄ２８に対応する（データキャラクタに対応する）コードワードのうち、英文字「o」を構成する部分である「Ｃ６」に対しても誤り訂正処理が行われる。
【００６８】
誤り訂正処理が行われたことにより、図３の（ｂ）の下段に示すような４４個のコードワードが取得される。図中の４４個のコードワードのうちの訂正ワードには、下線を付している。パターンＢでは、網掛け表示で示されている「９６」の隣の「Ｃ６」が「１６」に訂正されている。「９６」と「１６」は、英文字「a」を表わす。この結果、二次元コード読取端末１０は、誤り訂正処理後の４４個のコードワードのうち、前半の２８個のコードワード（「４１」から「Ｆ７」まで）に基づいて、デコード結果「http://srv.prof.net/~lab」を出力することができる。このように、パターンＡのデコード結果と、パターンＢのデコード結果は、ともにウェブサイトのＵＲＬを示すが、ＵＲＬの一部が「a」と「o」とで異なっている。
【００６９】
特殊二次元コードである二次元コード１００が読み取られる（即ちデコードされる）場合、二次元コード読取端末１０が上記のような処理を行うことにより、二通りのデコード結果が出力される。
【００７０】
（コード読取処理；図４）
本実施例では、二次元コード読取端末１０の制御部２０は、図４のコード読取処理を実行することで、読み取られた二次元コード１００が上記のような特殊二次元コードであるのか否かを判別することができる。さらに、本実施例では、制御部２０は、読み取られた二次元コード１００が特殊二次元コードである場合、特殊二次元コードに記録された二通りのデコード結果を両方とも取得することもできる。以下、図４を参照して、本実施例の二次元コード読取端末１０の制御部２０が実行するコード読取処理について説明する。利用者は、二次元コードを読み取るための読取アプリケーションプログラムが起動された二次元コード読取端末１０の操作部１２に、所定の読取指示を入力することができる。読取指示が入力される場合、制御部２０は、図４のコード読取処理を開始する。
【００７１】
Ｓ１０では、制御部２０は、二次元コード１００を表わすコード画像Ｃが撮像されることを監視する。コード読取処理が開始されると、制御部２０は、撮像部１６を起動させ、撮像範囲内の画像の撮像を開始する。この際、利用者が、撮像部１６の撮像範囲内に二次元コード１００が含まれるように二次元コード読取端末１０の位置及び角度を変化させることで、撮像部１６に二次元コード１００を撮像させることができる。これにより、撮像部１６によって二次元コード１００を表わす画像が撮像される。そして、制御部２０は、撮像された画像内に、二次元コード１００を表わす特徴（例えば、ファインダパターン４０等）が存在するか否かを判断し、二次元コード１００を表わす特徴が存在すると判断される場合に、コード画像Ｃが撮像されたと判断（即ちＳ１０でＹＥＳと判断）し、Ｓ１２に進む。
【００７２】
Ｓ１２では、制御部２０は、Ｓ１０で撮像されたコード画像Ｃに基づいてデコードを試行する。即ち、制御部２０は、公知のデコード手法に従って、コード画像Ｃが表す二次元コード１００に記録されたデータのデコードを行う。その際、上記の通り、制御部２０は、必要に応じて誤り訂正処理も行う（図２、図３参照）。
【００７３】
Ｓ１４では、制御部２０は、Ｓ１２で試行されたデコードの結果、第１のデコード結果が取得されたか否かを判断する。具体的には、制御部２０は、Ｓ１２のデコードの結果、何らかのデコード結果（即ち第１のデコード結果）が取得されていれば、Ｓ１４でＹＥＳと判断し、Ｓ１６に進む。一方、何らかの事情（例えば、コード画像Ｃが表わす二次元コード１００の破損度が、最大誤り訂正許容率を超えていた場合等）でデコード結果の取得に失敗していた場合、制御部２０は、Ｓ１４でＮＯと判断し、コード読取処理をエラー終了する。
【００７４】
Ｓ１６では、制御部２０は、デコードの過程で、最大誤り許容率の９５％以上に相当する数のコードワードに対して誤り訂正処理が実行されたか否かを判断する。例えば、図２、図３の例のように、二次元コード１００のセルブロックＣＢの数（即ちコードワードの数）が全部で４４個であり、最大誤り許容率が２０％である場合、最大で９個のコードワードの誤りを訂正することが可能である。そして、その最大数である９個の９５％は８．５５［個］であり、概ね９個と言える。そのため、この場合Ｓ１６では、制御部２０は、デコードの過程で９個のコードワード（即ち最大誤り許容率の９５％以上に相当する数のコードワード）に対して誤り訂正処理が実行されたか否かを判断する。この例の場合、デコードの過程で９個のコードワードに対して誤り訂正処理が実行されていれば、制御部２０は、Ｓ１６でＹＥＳと判断し、Ｓ１８に進む。一方、デコードの過程で８個以下のコードワードに対してしか誤り訂正処理が実行されていなければ、制御部２０は、Ｓ１６でＮＯと判断し、Ｓ２４に進む。Ｓ１６では、制御部２０は上記のような判断を行う。他の例では、Ｓ１６において、制御部２０は、訂正可能なコードワードの最大数よりも少ない数のコードワードに対して誤り訂正処理が実行されたか否かを判断する場合もある。なお、変形例では、Ｓ１６において、制御部２０は、デコードの過程で、最大誤り許容率の９０％以上に相当する数のコードワードに対して誤り訂正処理が実行されたか否かを判断してもよいし、最大誤り許容率の８５％以上に相当する数のコードワードに対して誤り訂正処理が実行されたか否かを判断してもよい。
【００７５】
（コード検証処理；図４のＳ１８、図５、図６）
Ｓ１８では、制御部２０は、コード検証処理（図５参照）を実行する。コード検証処理は、読み取られた二次元コード１００から、既に取得済みの第１のデコード結果とは異なる第２のデコード結果が取得されるか否か（即ち二次元コード１００が特殊二次元コードであるか否か）を判断するための処理である。以下、図５を参照して、コード検証処理について説明する。
【００７６】
Ｓ４０では、制御部２０は、第１のデコード結果がデコードされた際に二次元コード１００に基づいて抽出された複数個のコードワードであって、誤り訂正処理が行われる前の複数個のコードワード（以下では「訂正前コードワード」と呼ぶ場合がある）の中から、第１のデコード結果が取得された際に誤り訂正処理が実行された１個以上の訂正対象コードワードと、それ以外のコードワードである１個以上の特定可能コードワードと、を特定する。特定可能コードワードは、訂正前コードワードのうち、第１のデコード結果が取得された際に訂正処理が実行されなかった１個以上のコードワード、と言い換えてもよい。例えば、図６の（ａ）に示す例では、第１のデコード結果が取得された時点の４４個の訂正前コードワードが示されている。このうち、下線が付された９個のコードワードが「訂正対象コードワード」に対応し、下線が付されていない残りの３５個のコードワードが「特定可能コードワード」に対応する。
【００７７】
続くＳ４２では、制御部２０は、一度に特定する特定のコードワードの数であるＮ（Ｎは１以上の整数）の値を特定する。ここで、制御部２０が特定するＮの値は「あとＮ個のコードワードが誤っていた場合、デコード結果の出力に失敗する値」である。Ｎの値は、読み取られた二次元コード１００における最大誤り訂正率に対応する最大訂正可能コードワード数（即ち、デコード結果を出力し得る最大の（限界の）誤りコードワード数）と、訂正対象コードワード（即ち、実際に誤り訂正処理が行われたワードコード）の数と、を用いて特定される。例えば、読み取られた二次元コード１００の最大訂正可能コードワード数が９個であり、実際の訂正対象コードワードの数も９個であった場合、Ｓ４２では、制御部２０はＮの値として「１」を特定する。また、例えば、読み取られた二次元コード１００の最大訂正可能コードワード数が９個であり、実際の訂正対象コードワードの数が８個であった場合、Ｓ４２では、制御部２０はＮの値として「２」を特定する。なお、この時点では、第１デコード結果のデコードの過程で、既に最大誤り許容率の９５％以上に相当する数のコードワードに対して誤り訂正処理が実行されているため（図４のＳ１６でＹＥＳ）、Ｓ４２で特定されるＮの値は、多くの場合、「１」若しくは「２」である。
【００７８】
続くＳ４４では、制御部２０は、特定可能コードワードのうちから、Ｎ個の特定のコードワードを特定する。Ｓ４２で特定されたＮの値が「１」であった場合、Ｓ４４では、制御部２０は、特定可能コードワードのうちから１個の特定のコードワードを特定する。同様に、Ｎの値が「２」であった場合、Ｓ４４では、制御部２０は、特定可能コードワードのうちから２個の特定のコードワードを特定する。
【００７９】
続くＳ４６では、制御部２０は、Ｓ４４で特定されたＮ個の特定のコードワードの値を変更する。初回のＳ４６では、Ｓ４４で特定されたＮ個の特定のコードワードの値を「００」に特定する。２回目以降のＳ４６では、制御部２０は、Ｎ個の特定のコードワードの値を、１６進数に従って「０１」「０２」・・・「ＦＦ」の順に特定する。例えば、図６の（ｂ）に示す例では、左上の１個のコードワード（即ち特定のコードワード）の値が「００」に変更されている様子が示されている。このうち、下線が付された９個のコードワードが「訂正対象コードワード」に対応し、下線が付されていない残りの３５個のコードワードが「特定可能コードワード」に対応する。
【００８０】
Ｓ４８では、制御部２０は、値を変更された変更済みの特定のコードワードを含む訂正前コードワードに基づいて、デコードを試行する。この際、制御部２０は、必要に応じて誤り訂正処理も行う。
【００８１】
Ｓ５０では、制御部２０は、Ｓ４８で試行されたデコードの結果、第１のデコード結果とは異なる第２のデコード結果が取得されたか否かを判断する。値を変更された変更済みの特定のコードワードを含む訂正前コードワードに基づいてデコードが行われる場合（Ｓ４８）、以下の三通りの結果のうちのいずれかが得られる。
【００８２】
第１の結果は、デコード失敗（即ち、デコード結果が得られないこと）である。即ち、第１の結果が得られる場合とは、特定のコードワードの値を変更したことで、誤ったセルブロックの数（即ち正しい値を示さないコードワードの数）が最大誤り訂正許容率の限界値を超え、その結果、誤り訂正処理を行ったとしてもデコード結果の取得に失敗する場合である（図６の（ｂ）も参照）。この場合、制御部２０は、Ｓ５０でＮＯと判断し、Ｓ５２に進む。
【００８３】
第２の結果は、既に取得済みの第１のデコード結果が得られることである。即ち、第２の結果が得られる場合とは、特定のコードワードの値を値に変更したが、誤ったセルブロックの数（即ち正しい値を示さないコードワードの数）が最大誤り訂正許容率の限界値以下であるため、誤り訂正処理が行われることで、誤ったセルブロックに対応するコードワードの値が訂正され、第１のデコード結果が得られる場合である。この場合も、制御部２０は、Ｓ５０でＮＯと判断し、Ｓ５２に進む。
【００８４】
第３の結果は、第１のデコード結果とは異なる第２のデコード結果が得られることである。即ち、この第３の結果が得られる場合とは、特定のコードワードの値を変更したことで、第１のデコード結果が得られた場合とは異なるコードワードに対して誤り訂正処理が行われ、その結果、第１のデコード結果とは異なる第２のデコード結果が得られる場合である。第３の結果が得られる場合とは、特定のコードワードの値を変更したことにより、訂正前コードワードのうちの訂正対象コードワードが変化し、その結果として第２のデコード結果が得られる場合と言い換えてもよい（図６の（ｃ）（ｄ）参照）。この場合、制御部２０は、Ｓ５０でＹＥＳと判断し、図５のコード検証処理をこの時点で終了する。
【００８５】
Ｓ５２では、制御部２０は、この時点で、現在特定されているＮ個の特定のコードワードについて、可能性のある全ての値（及び組合せ）を用いてデコードを試行（Ｓ４８）したか否かを判断する。即ち、Ｓ５２では、制御部２０は、特定のコードワードの値を「００」から「ＦＦ」までの全ての値に変更した上でデコードを行ったか否かを判断する。また、２個の特定のコードワードが特定されている場合には、Ｓ５２では、制御部２０は、２個の特定のコードワードの値を「００」から「ＦＦ」まで変化させた上で、全ての組合せについてデコードを行ったか否かを判断する。この時点で、現在特定されているＮ個の特定のコードワードについて、可能性のある全ての値（Ｓ４２で特定されたＮの値が２以上の場合は可能性のある全ての値の組合せ）を用いてデコードを試行（Ｓ４８）済みである場合、制御部２０は、Ｓ５２でＹＥＳと判断し、Ｓ５４に進む。一方、この時点で、現在特定されているＮ個の特定のコードワードについて、まだ変更されていない値（又は組合せ）が存在する場合、制御部２０は、Ｓ５２でＮＯと判断し、Ｓ４６に戻る。戻った先のＳ４６では、制御部２０は、Ｎ個の特定のコードワードの値を別の値（又は別の組合せ）に変更し、再びＳ４８、Ｓ５０の処理を実行する。
【００８６】
Ｓ５４では、制御部２０は、この時点で、すべての特定可能コードワード（Ｓ４２で特定されたＮの値が２以上の場合は可能性のある全ての組合せ）を、特定のコードワードとして特定済みであるか否かを判断する。この時点で、すべての特定可能コードワード（又は組合せ）を、特定のコードワードとして特定済みであれば、制御部２０は、Ｓ５４でＹＥＳと判断し、図５のコード検証処理を終了する。一方、特定可能コードワードの中に、特定のコードワードとして未特定のコードワード（又は組合せ）が存在する場合、制御部２０は、Ｓ５４でＮＯと判断し、Ｓ４４に戻る。戻った先のＳ４４では、制御部２０は、異なるＮ個の特定のコードワードを新たに特定し、Ｓ４６以降の各処理を再び実行する。
【００８７】
（具体例；図６）
以上、図５のコード検証処理について説明した。続いて、図６を参照して、コード検証処理が実行される過程で、第２のデコード結果が取得される場合の具体例を説明する。図６の（ａ）では、第１のデコード結果が取得された時点の４４個の訂正前コードワードが示されている。図６の（ａ）で示される４４個の訂正前コードワードは、図３の（ａ）に示す訂正前コードワードと同じものである。即ち、図６の例で示される４４個の訂正前コードワードは、図２の二次元コード１００を読み取る過程で抽出されるコードワードである。上記の通り、図５のＳ４０においては、制御部２０は、下線が付された９個のコードワード、下線が付されていない残りの３５個のコードワードを、それぞれ、「訂正対象コードワード」、「特定可能コードワード」として特定する。また、図６の（ａ）で示される４４個の訂正前コードワードに基づいてデコードが実行された結果、すでに、第１のデコード結果「http://srv.prof.net/~lob」が取得されている（図４のＳ１４でＹＥＳ）。
【００８８】
そして、図６の（ａ）の例では、第１のデコード結果が取得された際に９個のコードワードに対して誤り訂正処理が行われている。この訂正対象コードワードの数「９個」は、最大誤り訂正許容率に相当する数である。そのため、この例では、図５のＳ４２において、制御部２０はＮの値「１」を特定する。
【００８９】
図６の（ｂ）では、制御部２０が、３５個の特定可能コードワードのうちから、左上の１個のコードワード（太線部分参照）を特定のコードワードとして特定した様子が示されている（図５のＳ４４）。そして、制御部２０は、特定のコードワードの値を「００」に変化させている（Ｓ４６）。そして、制御部２０は、特定のコードワードの値を「００」に変化させた訂正前コードワードに基づいてデコードを実行する（Ｓ４８）。しかしながら、この時点では、デコードは失敗するか、又は第１のデコード結果が出力されるに過ぎず、第２のデコード結果は得られない（Ｓ５０でＮＯ）。その後、制御部２０は、特定のコードワードの値を「ＦＦ」まで順に変更しながらデコードを実行するが、まだ第２のデコード結果は得られない（Ｓ５０でＮＯ、Ｓ５２でＹＥＳ、Ｓ５４でＮＯ）。次に、制御部２０は、別のコードワードを特定し、同様の処理を繰り返す。
【００９０】
その後、図６の（ｃ）に示すように、制御部２０が、特定のコードワード（太線部分参照）の値を「１６」に変更した上でデコードを実行した場合、図６の（ｄ）に示すように、第１のデコード結果が得られた場合とは異なるコードワードに対して誤り訂正処理が行われる（図６（ｄ）の下線部参照）。なお、この際、特殊セル５０を含むセルブロックに対応するコードワード（斜線ハッチング表示参照）も、誤り訂正処理によって「Ｆ１」に値が変更されている。この結果、制御部２０は、第１のデコード結果とは異なる第２のデコード結果「http://srv.prof.net/~lab」を取得する（Ｓ５０でＹＥＳ）。
【００９１】
（コード読取処理の続き；図４のＳ２０以降）
図５のコード検証処理を終了すると、図４のＳ２０において、制御部２０は、コード検証処理の結果、第２のデコード結果が取得されたか否かを判断する。第２のデコード結果が取得されている場合、制御部２０は、Ｓ２０でＹＥＳと判断し、Ｓ２２に進む。
【００９２】
Ｓ２２では、制御部２０は、第１のデコード結果と、第２のデコード結果と、強調コード画像と、を出力する。例えば、Ｓ２２では、制御部２０は、表示部１４に第１のデコード結果と、第２のデコード結果と、強調コード画像とを表示させる。ここで、強調コード画像とは、二次元コード１００のうち、第１のデコード結果及び第２のデコード結果が取得される要因となった特定のセルブロック（例えば、特殊セル５０を含むセルブロック）を強調した画像である。Ｓ２２を終えると、制御部２０は、図４のコード読取処理を終了する。
【００９３】
図７を参照して、Ｓ２２における出力内容の一例を説明する。図７の例では、強調コード画像ＥＣと、第１のデコード結果「http://srv.prof.net/~lob」と、第２のデコード結果「http://srv.prof.net/~lab」と、が出力されている。強調コード画像ＥＣは、基本的には、二次元コード１００の撮像画像であるコード画像Ｃ（図２の（ａ）参照）と同様であるが、特殊セル５０を含む特定のセルブロックを強調するための枠７０が表示されている点が異なる。特定のセルブロックの強調方法はこれには限られず、特定のセルブロックの表示色を変更する、強調のための矢印等を付加する、等してもよい。また、図７の例では、二次元コード１００に基づいて２種類のデコード結果が取得されたこと、及び、利用者に、二次元コード１００をよく確認するように注意を喚起するためのメッセージも併せて出力されている。
【００９４】
一方、Ｓ２４では、制御部２０は、この時点で取得されている第１のデコード結果のみを出力する。Ｓ２４を終えると、制御部２０は、図４のコード読取処理を終了する。
【００９５】
以上、本実施例の二次元コード読取システム２について説明した。上記の通り、本実施例では、二次元コード読取端末１０の制御部２０は、二次元コードを表わすコード画像に基づいてデコードを行うことで第１のデコード結果が取得される場合（図４のＳ１４でＹＥＳ）に、デコードの過程で、最大誤り許容率の９５％以上に相当する数のコードワードに対して誤り訂正処理が実行されたか否かを判断する（Ｓ１６）。そして、制御部２０は、最大誤り許容率の９５％以上に相当する数のコードワードに対して誤り訂正処理が実行されたと判断する場合（Ｓ１６でＹＥＳ）に、図５のコード検証処理を実行する。コード検証処理では、制御部２０は、第２のデコード結果が取得されるか（Ｓ５０でＹＥＳ）、全ての特定可能コードワードを特定のコードワードとして特定し、全てのコードワードの値についてデコードを試行し終える（Ｓ５４でＹＥＳ）まで、Ｓ４４〜Ｓ５４の処理を繰り返し実行する。Ｓ４４〜Ｓ５４の処理を繰り返し行う過程では、上記の三通り（即ち第１〜第３の結果）の結果のいずれかが得られる。
【００９６】
読み取られた二次元コード１００が通常の二次元コードであった場合、図５のＳ５４でＹＥＳと判断されるまで、Ｓ４４〜Ｓ５４の処理を繰り返し実行した場合であっても、上記の第１の結果（即ちデコード失敗）と第２の結果（即ち第１のデコード結果の再取得）のいずれかが得られるに過ぎない。一方、読み取られた二次元コード１００が、上記の特殊二次元コードである場合、Ｓ４４〜Ｓ５４の処理を繰り返し実行する過程で、二通りのデコード結果（第１のデコード結果及び第２のデコード結果）が得られ得る。即ち、Ｓ４４〜Ｓ５４の処理を繰り返し実行したことで、上記の第３の結果（即ち第２のデコード結果の取得）が得られた場合、読み取られた二次元コード１００が特殊二次元コードであると言うことができる。
【００９７】
従って、本実施例によると、二次元コード読取端末１０は、Ｓ４４〜Ｓ５４の処理を実行することによって、読み取られた二次元コード１００が、読み取りの際の条件に応じて二通りの異なるデコード結果が出力され得る特殊二次元コードであるか否かを判別することができる。
【００９８】
上記の通り、本実施例では、制御部２０は、最大誤り許容率の９５％以上に相当する数のコードワードに対して誤り訂正処理が実行されたと判断する場合（Ｓ１６でＹＥＳ）に、図５のコード検証処理を実行する。上記の通り、読み取られた二次元コード１００が特殊二次元コードである場合には、第１のデコード結果が取得される過程で誤り訂正処理が行われている。即ち、第１のデコード結果が取得される過程で誤り訂正処理が行われていない場合、読み取られた二次元コード１００が特殊二次元コードである可能性は極めて低い。従って、本実施例では、二次元コード１００が特殊二次元コードである可能性が極めて低い場合に図５のコード検証処理を実行させないことにより、どのような場合もコード検証処理を実行させる場合に比べて、制御部２０の処理負荷を軽減することができる。
【００９９】
本実施例では、図５のＳ４４において、制御部２０は、訂正前コードワードのうち、１個以上の訂正対象コードワードを除いた１個以上の特定可能コードワードのうちから、Ｎ個の特定のコードワードを特定する。訂正前コードワードのうち、訂正対象コードワードの値を他の値に変えても、デコードの際にその値の誤り訂正処理が行われることで、同じ第１のデコード結果が出力されるように訂正されるに過ぎない。即ち、訂正対象コードワードの値を特定のコードワードとして特定し、値を変更したとしても、変わらず第１のデコード結果が出力されるに過ぎない。そのため、二次元コード読取端末１０は、訂正対象コードワードを特定のコードワードとして特定しないようにすることで、図５のＳ４４〜Ｓ５４の処理の実行回数（繰り返し回数）を減少させ、制御部２０の処理負荷を少なくすることができる。
【０１００】
本実施例では、図５のＳ４２において、Ｎの値として「１」が特定される場合、Ｓ４４では、制御部２０は１個の特定のコードワードを特定し、以降のＳ４６〜Ｓ５４の各処理を行う。１個の特定のコードワードが特定される場合、複数個の特定のコードワードが特定される場合に比べて各特定のコードワードの変更後の値の組合せが少なくなり、制御部２０の処理負荷を小さくすることができる。
【０１０１】
本実施例では、制御部２０は、コード検証処理の結果として第２のデコード結果が取得されている場合（図４のＳ２０でＹＥＳ）、Ｓ２２において、第１のデコード結果と、第２のデコード結果と、強調コード画像（図７参照）とを出力する。そのため、本実施例では、二次元コード読取端末１０の利用者は、出力された内容に基づいて、読み取られた二次元コード１００が特殊二次元コードであることを把握することができるとともに、二次元コード１００からデコードされた第１のデコード結果と第２のデコード結果とを確認することができる。また、強調コード画像が出力されることで、利用者は、特定のセルブロックが要因となって第１のデコード結果及び第２のデコード結果が取得されたことを把握することができる。特に、特定のセルブロック内に特殊セル５０が視認可能な態様で存在する場合、利用者が特殊セルを直接見て確認することができる。
【０１０２】
また、本実施例では、制御部２０は、第２のデコード結果が取得された場合に（図５のＳ５０でＹＥＳ）、コード検証処理を終了する。即ち、制御部２０は、特定可能コードワードをすべて特定し、さらに、特定されたすべての特定のコードワードについて、特定のコードワードの値を変更可能なすべての値に変更し、変更されたすべての値のそれぞれについてデコードを行う場合に比べて、Ｓ４４〜Ｓ５４の処理の実行回数を少なくすることができる。そのため、二次元コード読取端末１０の全体としての処理速度を向上させ得る。
【０１０３】
また、上記の通り、本実施例では、制御部２０は、第１のデコード結果が取得される場合（図４のＳ１４でＹＥＳ）に、デコードの過程で、最大誤り許容率の９５％以上に相当する数のコードワードに対して誤り訂正処理が実行されたと判断される場合（Ｓ１６でＹＥＳ）に、図５のコード検証処理を実行する。第１のデコード結果が取得される場合に、最大誤り訂正許容率の９５％以上の数のコードワードに対して、既に誤り訂正処理が行われていれば、制御部２０は、図５のＳ４４において、残りの５％以下のコードワードに対応する数のコードワードを特定のコードワードとして特定した上で、Ｓ４６以降の各処理を実行すればよい。そのため、最大誤り訂正許容率の９５％以上のコードワードに対して既に誤り訂正処理が行われていれば、Ｓ４４〜Ｓ５４の処理の実行回数を比較的少なくし得る。そのため、二次元コード読取端末１０の全体としての処理速度を向上させることができる。
【０１０４】
本実施例と請求項の対応関係を説明しておく。二次元コード読取端末１０が「二次元コード読取装置」の一例である。図４のＳ１２が「デコード部」によって実行される処理の一例である。Ｓ１６が「第１の判断部」によって実行される処理の一例である。Ｓ１６でＹＥＳと判断される場合が「第１の場合」の一例である。図５のＳ４４〜Ｓ５４が「検査処理」の一例である。このうち、Ｓ４４、Ｓ４６、Ｓ４８、Ｓ５０が、それぞれ、「特定ステップ」、「変更ステップ」、「デコードステップ」、「判断ステップ」の一例である。訂正前コードワードが「複数個のコードワード」の一例である。メモリ２２に記憶された読取アプリケーションプログラムが「コンピュータプログラム」の一例である。図４のＳ２２が「デコード結果出力部」及び「強調コード画像出力部」が実行する処理の一例である。
【０１０５】
（第２実施例）
第２実施例の二次元コード読取システム２について、第１実施例と異なる点を中心に説明する。本実施例の二次元コード読取システム２も、その基本的な構成は第１実施例と共通する。ただし、本実施例では、図５のコード検証処理をサーバ６の制御部に実行させる点が第１実施例とは異なる。
【０１０６】
本実施例では、二次元コード読取端末１０の制御部２０は、図４のＳ１６でＹＥＳと判断すると、通信Ｉ／Ｆ１８（図１）を介して、コード画像Ｃ、第１のデコード結果を含むデコード関係情報をサーバ６に送信する。サーバ６の制御部は、二次元コード読取端末１０からデコード関係情報を受信すると、受信されたデコード関係情報に基づいて、図５のコード検証処理を実行する。コード検証処理の内容自体は第１実施例と共通する。サーバ６の制御部は、コード検証処理が終了すると、コード検証処理の結果（即ち、第２のデコード結果が取得できたか否か等）を含む結果情報を二次元コード読取端末１０に送信する。
【０１０７】
二次元コード読取端末１０の制御部２０は、サーバ６から、通信Ｉ／Ｆ１８（図１）を介して、結果情報を受信すると、結果情報に基づいて、第２のデコード結果を取得済みか否かの判断（図４のＳ２０の判断）を実行する。その後のＳ２２、Ｓ２４の処理の内容も第１実施例と共通するため詳しい説明は省略する。
【０１０８】
以上の通り、本実施例では、制御部２０は、図４のＳ１６でＹＥＳと判断すると、通信Ｉ／Ｆ１８（図１）を介して、コード画像Ｃ、第１のデコード結果を含むデコード関係情報をサーバ６に送信する。サーバ６の制御部は、二次元コード読取端末１０からデコード関係情報を受信すると、受信されたデコード関係情報に基づいて、図５のコード検証処理を実行する。図５のコード検証処理の処理負荷は、図４のＳ１０〜Ｓ１６、Ｓ２０〜Ｓ２４の各処理の処理負荷の合計よりも大きい場合がある。本実施例によると、二次元コード読取端末１０よりも処理能力の高いサーバ６を予め準備しておくことで、二次元コード読取端末１０が全ての処理を実行する場合に比べ、二次元コード読取システム２の全体としての処理速度を向上させ得る。本実施例では、二次元コード読取システム２が「二次元コード読取装置」の一例である。
【０１０９】
（第３実施例）
続いて、第３実施例について、第１実施例と異なる点を中心に説明する。本実施例の二次元コード読取システム２も、その基本的な構成は第１実施例と共通する。ただし、本実施例では、図５のコード検証処理の内容の一部が第１実施例とは異なる。本実施例では、制御部２０は、第２のデコード結果が取得されたか否かに関わらず、特定可能コードワードをすべて特定し、さらに、特定されたすべての特定のコードワードについて、特定のコードワードの値を変更可能なすべての値に変更し、変更されたすべての値のそれぞれについてデコードを行う点が第１実施例とは異なる。即ち、本実施例では、図５のＳ４８でデコードが試行された後、Ｓ５０の判断を行わず（即ちＳ５０を省略して）、第２のデコード結果が取得されたか否かに関わらず、Ｓ５２の判断に進む。
【０１１０】
即ち、本実施例では、二次元コード読取端末１０の制御部２０は、特定可能コードワードと特定の値とのすべての組合せについてデコードを試行する（図５のＳ４８）。そのため、二次元コード読取端末１０は、二次元コード１００に基づいて行われ得るすべてのデコードの結果を把握することができる。
【０１１１】
（第４実施例）
続いて、第４実施例について、第１実施例と異なる点を中心に説明する。本実施例の二次元コード読取システム２も、その基本的な構成は第１実施例と共通する。ただし、本実施例でも、図５のコード検証処理の内容の一部が第１実施例とは異なる。本実施例では、図５のＳ４４において、制御部２０がＮ個の特定のコードワードを特定する際に、特定可能コードワードのうち、誤り訂正符号に対応する１個以上のコードワード（例えば、図３中のＥ１〜Ｅ１６に対応するコードワードに含まれる特定可能コードワード）のうちから優先的に前記特定のコードワードを特定する点において、第１実施例とは異なる。
【０１１２】
上記の通り、１つの二次元コード１００における複数個のコードワード（即ち複数個のセルブロック）は、データキャラクタに対応する１個以上のコードワード（図３中のＤ１〜Ｄ２８に対応するコードワード）と、誤り訂正符号に対応する１個以上のコードワード（図３中のＥ１〜Ｅ１６に対応するコードワード）と、を含んでいる。そして、本明細書で説明する「特殊二次元コード」は、その特性上、データキャラクタに対応するコードワードよりも、誤り訂正符号に対応するコードワードのほうに、誤りがより多く含まれる傾向がある。データキャラクタに対応するコードワードは、その値がデコード結果（ＵＲＬ等の文字列の内容）に直結するため、誤り訂正を前提とするコードワードを多く含ませられないという技術的な事情もある。そのため、図５のＳ４４〜Ｓ５４の処理の実行の際に、誤り訂正符号に対応する１個以上のコードワードのうちから優先的に特定のコードワードを特定することで、第２のデコード結果が比較的早期に取得され得る。Ｓ４４〜Ｓ５４の処理の実行回数を少なくし得るため、二次元コード読取端末１０の全体としての処理速度を向上させ得る。
【０１１３】
（第５実施例）
続いて、第５実施例について、第１実施例と異なる点を中心に説明する。本実施例の二次元コード読取システム２も、その基本的な構成は第１実施例と共通する。ただし、本実施例では、図５のコード検証処理のＳ４６において、制御部２０が特定のコードワードの値を変更する際の手法が第１実施例とは異なる。本実施例では、Ｓ４６において、制御部２０は、二次元コード１００のうち、Ｎ個の特定のコードワードに対応するＮ個の特定のセルブロックに含まれる８個のセルのうち、特定のセルの明暗を反転させた場合における特定のコードワードの値を特定することにより、特定のコードワードの値を変更する。
【０１１４】
即ち、１個のコードワードは、二次元コード１００に含まれる１個のセルブロック（即ち、８個のセルによって構成されるセル群）のデコード結果を２桁の１６進数の英数字で表した文字列である。そして、コードワードの値は、当該コードワードに対応するセルブロック内の８個のセルの明色／暗色の組合せに対応している。即ち、１個のコードワードの値と、対応するセルブロック内の８個のセルの明暗の組合せとは、一対一に対応している。本実施例では、このことを利用して、制御部２０は特定のコードワードの値を変更する。
【０１１５】
図８を参照して、このことを具体的に説明する。図８は、１個の特定コードワードに対応する１個の特定のセルブロックＳＣＢを示している。図８の特定のセルブロックＳＣＢは、撮像部１６に撮像されたコード画像Ｃに含まれる１個の特定のセルブロックである。特定のセルブロックＳＣＢは、８個のセルＣｅ１〜Ｃｅ８を含む。第１のデコード結果が取得された際のデコードにおいて、セルＣｅ１、Ｃｅ３、Ｃｅ７は暗色セルとして読み取られ、セルＣｅ２、Ｃｅ４、Ｃｅ５、Ｃｅ６、Ｃｅ８は明色セルとして読み取られている。第１のデコード結果が取得された際のデコードでは、この特定のセルブロックＳＣＢに基づいて、特定のコードワード「ＸＸ」（即ち２桁の１６進数の文字列）が抽出されている。
【０１１６】
そして、Ｓ４６において、制御部２０は、特定のコードワードの値を「ＸＸ」から「ＹＹ」に変更する。特定のコードワード「ＹＹ」は、特定のセルブロックＳＣＢにおいて、セルＣｅ１を暗色セルではなく明色セルとして読み取った場合に抽出される値である。
【０１１７】
このように、本実施例では、Ｓ４６では、制御部２０は、特定のコードワードの値を変更させる際、特定のセルブロックＳＣＢ内の特定のセルの明暗を反転させた場合に対応する特定のコードワードの値に変更する。
【０１１８】
そのため、例えば、二度目以降のＳ４６では、制御部２０は、特定のコードワードの値を「ＸＸ」から「ＺＺ」に変更する（図示省略）。その際の特定のコードワードの値「ＺＺ」は、図８に示す特定のセルブロックＳＣＢにおいて、セルＣｅ２を明色セルではなく暗色セルとして読み取った場合に抽出される値である。
【０１１９】
このように、制御部２０は、特定のコードワードの値を変更する際、セルＣｅ１からセルＣｅ８までの明暗を順に反転させた場合に対応する特定のコードワードの値に順に変更する。セルＣｅ１からセルＣｅ８までの明暗を順に反転させる場合、８通り（即ち、８Ｃ１）の特定のコードワードの値が得られる。制御部２０は、８通りの特定のコードワードの値を用いてデコードを試行（Ｓ４８）することができる。
【０１２０】
８通りの特定のコードワードの値を用いてデコードを試行（Ｓ４８）した結果、第２のデコード結果が取得できなかった場合、次回以降のＳ４６では、制御部２０は、セルＣｅ１からセルＣｅ８のうちの２個のセルの明暗を反転させた場合に対応する特定のコードワードの値に順に変更する。この場合、２８通り（即ち、８Ｃ２）の特定のコードワードの値が得られる。
【０１２１】
このように、本実施例の特定のコードワードの値の変更手法によると、制御部２０は、特定のコードワードの値を変更する際、特定のコードワードに対応する特定のセルブロック８個のセルのうちの少なくとも１つの明暗を反転させた場合に対応する特定のコードワードの値を特定する。これにより、特定のコードワードに対応する特定のセルブロック８個のセルの明暗のすべての組合せに対応する値を１つずつ特定する場合に比べ、特定のコードワードの値のバリエーションが少なく済む。具体的に言うと、例えば、制御部２０は、特定のセルブロック８個のセルがすべて暗色セルである場合や、すべて明色セルである場合のような現実的でない場合等に対応するコードワードの値に基づいてデコード（Ｓ４８）が行われることを抑制することができる。その結果、Ｓ４４〜Ｓ５４の処理の実行回数を少なくし得るため、二次元コード読取端末１０の全体としての処理速度を向上させ得る。
【０１２２】
（第６実施例）
第６実施例は、上記の第１〜第５実施例の変形例である。上記の第１〜第５実施例では、読み取り対象であった特殊二次元コードは、（例えば図２の二次元コード１００）は、明色と暗色の中間色で表示したり、意図的に明色部と暗色部とに分割して表示したりした１個の特殊セル５０を含む。これに対し、図９に示すように、本実施例で開示する特別な二次元コード３００は、上記のような特殊セルを含まない特定のセルブロックを有している。
【０１２３】
本実施例の特別な二次元コード３００は、デコードの際に、特定のセルブロックＳＣＢに対応する特定のコードワードの値として「Ｆ１」が抽出される場合には、第１のデコード結果「http://srv.prof.net/~lob」が取得され、特定のコードワードの値を変更する等して、特定のコードワードの値として「７１」が抽出される場合には、第２のデコード結果「http://srv.prof.net/~lab」が取得される。本実施例でも、特定のコードワードの値として「Ｆ１」が抽出される場合に誤り訂正の対象となるコードワードと、特定のコードワードの値として「７１」が抽出される場合に誤り訂正の対象となるコードワードと、は異なる。即ち、本実施例の特別な二次元コード３００は、特定のセルブロックＳＣＢに対応する特定のコードワードの値に応じて異なるコードワードに対して誤り訂正処理が行われることにより、第１のデコード結果と、第１のデコード結果とは異なる第２のデコード結果と、の二通りのデコード結果を出力させることができる二次元コードである。
【０１２４】
本実施例の二次元コード３００を読み取って、第１のデコード結果と第２のデコード結果を両方とも出力するためには、上記の第１〜第５実施例で説明した二次元コード読取システム２を用いてコード読取処理（図４参照）を実行すればよい。
【０１２５】
本実施例によると、特別な二次元コード３００からは、特定のコードワードの値が第１の値である場合には、第１のデコード結果が出力され、特定のコードワードの値が第２の値に変更された場合には、第２のデコード結果が出力される。そのため、本実施例の特別な二次元コード３００では、例えば、第１のデコード結果を、汎用の二次元コード読取装置によってデコード可能な汎用情報として記録させ、第２のデコード結果を、特定のコードワードの値を第２の値に変更してデコードを行ない得る構成を有する二次元コード読取装置によってのみデコード可能な光セキュリティ情報として記録させておくこともできる。従って、本実施例の特別な二次元コード３００によると、外見上、上記の特殊セルに相当するセル等を含まない構成を有していても、特定のコードワードの値が第１の値であるか第２の値であるかに応じて二通りのデコード結果を出力することができる。
【０１２６】
以上、本発明の各実施例について詳細に説明したが、これらは例示に過ぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。例えば、以下の変形例を採用してもよい。
【０１２７】
（変形例１）上記の各実施例では、図４のコード読取処理のＳ１６では、制御部２０は、デコードの過程で、最大誤り許容率の９５％以上に相当する数のコードワードに対して誤り訂正処理が実行されたか否かを判断し、Ｓ１６でＹＥＳと判断される場合に、図５のコード検証処理を実行している（又はサーバ６に実行させている）。これに限られず、Ｓ１６において、制御部２０は、デコードの過程で、訂正対象コードワードの数に関わらず、誤り訂正処理が実行されたか否かを判断してもよい。制御部２０は、訂正対象コードワードの数に関わらず、誤り訂正処理が実行されていれば、Ｓ１６でＹＥＳと判断し、図５のコード検証処理を実行する（又はサーバ６に実行させる）ようにしてもよい。
【０１２８】
（変形例２）他の変形例では、図４のＳ１６の処理が省略されてもよい。即ち、制御部２０は、第１のデコード結果が取得された場合、誤り訂正処理が実行されたか否かに関わらず、図５のコード検証処理を実行する（又はサーバ６に実行させる）ようにしてもよい。
【０１２９】
（変形例３）図４のＳ２２における出力内容は、第１のデコード結果の一部（例えばＵＲＬの一部等）及び第２のデコード結果の一部（例えばＵＲＬの一部等）を含むようにしてもよい。また、図４のＳ２２における出力内容が、強調コード画像を含んでいなくてもよい。
【０１３０】
（変形例４）上記の第１〜第５実施例における特殊二次元コード、及び、第６実施例における特別な二次元コード３００は、読み取りの際の条件によって二通りのデコード結果が出力され得るコードとして説明されている。これに限られず、特殊二次元コード及び特別な二次元コードは、読み取りの際の条件によって三通り以上のデコード結果が出力され得るコードであってもよい。また、特殊二次元コードは、そのような複数個のデコード結果の出力を可能にするために、２個以上の特殊セルを含んでいてもよい。同様に、特別な二次元コードは、そのような複数個のデコード結果の出力を可能にするために、２個以上の特定のセルブロックを含んでいてもよい。
【０１３１】
本明細書または図面に説明した技術要素は、単独であるいは各種の組み合わせによって技術的有用性を発揮するものであり、出願時請求項記載の組み合わせに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【符号の説明】
【０１３２】
２：二次元コード読取システム
６：サーバ
１０：二次元コード読取端末
１２：操作部
１４：表示部
１６：撮像部
１８：通信Ｉ／Ｆ
２０：制御部
２２：メモリ
４０：ファインダパターン
４２：アライメントパターン
４４：データセル領域
５０：特殊セル
７０：枠
１００：二次元コード
３００：特別な二次元コード
Ｃ：コード画像
ＣＢ：セルブロック
ＥＣ：強調コード画像
ＳＣＢ：特定のセルブロック
Ｃｅ１〜Ｃｅ８：セル
Ｄ１〜Ｄ２６：データキャラクタに対応するセルブロック
Ｅ１〜Ｅ１６：誤り訂正符号に対応するセルブロック
【図１】
2020160961.tif 000003
【図２】
2020160961.tif 000004
【図３】
2020160961.tif 000005
【図４】
2020160961.tif 000006
【図５】
2020160961.tif 000007
【図６】
2020160961.tif 000008
【図７】
2020160961.tif 000009
【図８】
2020160961.tif 000010
【図９】
2020160961.tif 000011