(57)【要約】【課題】対象バーコードの規格を特定するまでの時間を短くし、対象バーコードのデコードに要する時間を短くすることができる技術を提供する。【解決手段】バーコード読取装置は、対象バーコードをデコードする場合、まず、ＥＡＮ−１３デコード処理を実行する。さらに、ＥＡＮ−１３デコード処理では、バーコード読取装置は、対象バーコードのうち、データキャラクタが含まれない複数の非キャラクタ部分に対応する部分を、データキャラクタが含まれるキャラクタ部分に対応する部分よりも先にデコードする。非キャラクタ部分は、ＥＡＮ−１３規格のバーコードに特有の構成（左右のマージン、左右のガードバー、及び、センターバー）を含んでいる。【選択図】図６
2015072617.tif 000002
【特許請求の範囲】
【請求項１】
規格化された複数種類のバーコードを読取可能なバーコード読取装置であって、
読取対象の対象バーコードからの反射光を受光する受光部と、
対象バーコードを複数種類のうちの第１種類のバーコードとして反射光に基づいて対象バーコードが表すデータをデコードする場合に、対象バーコードのうち、第１種類のバーコードのデータキャラクタが含まれない非キャラクタ部分に対応する複数の第１部分を、第１種類のバーコードのデータキャラクタが含まれるキャラクタ部分に対応する第２部分よりも先にデコードする第１種のデコード処理を実行する制御部と、を備えるバーコード読取装置。
【請求項２】
第１種のデコード処理において、制御部は、
第１部分のデコード結果が第１種類のバーコードの規格に適合すると判断されるときは、対象バーコードの第２部分をデコードし、
第１部分のデコード結果が第１種類のバーコードの規格に適合しないと判断されるときは、対象バーコードの第１種類のバーコードとしてのデコードに失敗したとして対象バーコードの第２部分のデコードの実行を中止する、請求項１に記載のバーコード読取装置。
【請求項３】
制御部は、第１種のデコード処理の結果、対象バーコードに対応するデータのデコードに失敗する場合に、対象バーコードを第１種類のバーコードとは異なる第２種類のバーコードとしてデコードする第２種のデコード処理を実行し、
第２種のデコード処理では、対象バーコードのうち、第２種類のバーコードのデータキャラクタが含まれない非キャラクタ部分に対応する複数の第３部分を、第２種のバーコードのデータキャラクタが含まれるキャラクタ部分に対応する第４部分よりも先にデコードする、請求項２に記載のバーコード読取装置。
【請求項４】
第１種類のバーコードの非キャラクタ部分には、第１種類のバーコードの両端に設けられたマージン部分が含まれており、
制御部は、第１種のデコード処理を実行する場合であって、最初に、対象バーコードの両端のマージン部分を特定し、次いで、特定されたマージン部分が第１種類のバーコードの規格に適合すると判断されるときは、特定されたマージン部分の間の部分が表すデータをデコードする、請求項１から３のいずれか一項に記載のバーコード読取装置。
【請求項５】
制御部は、対象バーコードの両端のマージン部分を特定する場合、
一端側のマージン部分を特定し、
第１種類のバーコードの規格化された構成に従って、一端側のマージン部分から第１の本数分だけ離れたモジュールの位置を特定し、
特定された位置がマージン部分であるか否かを判断し、
特定された位置がマージン部分であると判断される場合に、一端側のマージン部分から第１の本数分だけ離れたモジュールの位置が他端側のマージン部分であると特定し、
特定された位置がマージン部分でないと判断される場合に、一端側のマージン部分から第２の本数分だけ離れたモジュールの位置を新たに特定し、新たに特定された位置がマージン部分であるか否かを判断し、
第２の本数は、第１の本数に、第１種類のバーコードにおける１文字分のデータに対応するモジュールの本数を加えた本数である、請求項４に記載のバーコード読取装置。
【請求項６】
制御部は、対象バーコードの両端のマージン部分を特定した後に、第１種類のバーコードに特有の特有データを表す部分に相当する特定の部分が表すデータをデコードし、特定の部分が表すデータのデコード結果が固有データと一致しない場合に、特定されたマージン部分の間の部分が表すデータのデコードに失敗したと判断する、請求項４又は５に記載のバーコード読取装置。
【請求項７】
制御部は、
特定されたマージン部分の間の部分が表すデータのデコードに失敗する場合、
一端側のマージンの位置を他端側に所定量移動させた上で、対象バーコードの両端のマージン部分を新たに特定し、
新たに特定された両端のマージン部分の間に存在するモジュール数が、第１種類のバーコードを構成するための最小モジュール数以上である場合、当該新たに特定された両端のマージン部分の間の部分が表すデータをデコードし、
新たに特定された両端のマージン部分の間に存在するモジュール数が、第１種類のバーコードを構成するための最小モジュール数より少ない場合、第１種のデコード処理が失敗したと判断する、請求項５又は６に記載のバーコード読取装置。
【請求項８】
第１種類のバーコードは、ＰＯＳコードである、請求項１から７のいずれか一項に記載のバーコード読取装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で開示する技術は、規格化された複数種類のバーコードを読取可能なバーコード読取装置に関する。
【背景技術】
【０００２】
現在、規格化された複数種類のバーコードが存在している。各規格のバーコードは、複数本のモジュールから構成され、各モジュールは１本のバー（黒バー）又は１本のスペース（白バー）で構成される。バーコードは、通常、バーコードの種類を表す非キャラクタ部分（データキャラクタが含まれない部分）と、そのバーコードに特有のキャラクタ部分（データキャラクタが含まれる部分）とを有している。非キャラクタ部分とキャラクタ部分のそれぞれは複数本のモジュールで構成されている。キャラクタ部分では、予め定められた本数（ｍ本）のモジュールで１文字分のデータが構成される。１つのキャラクタ部分は、複数文字分（ｎ文字分）のモジュール（ｍ×ｎ本）によって構成される。規格化されたバーコードでは、その種類毎に、非キャラクタ部分とキャラクタ部分の順序と、非キャラクタ部分のモジュール数と、各モジュールの幅の値が設定されている。このため、バーコード読取装置では、読み取った対象バーコードが複数種類の規格のどれに一致するかを判定し、一致した規格に従って対象バーコードからデータをデコードする。
【０００３】
例えば、特許文献１のバーコード読取装置は、複数種類の規格の中から１種類のバーコードの規格を選択し、選択された種類のバーコードの規格に従って、読み取った対象バーコードの左側から順にデコードを行う。例えば、選択された種類がＮＷ−７である場合、左マージンのチェック、スタートキャラクタのデコード、データキャラクタのデコード、ストップキャラクタのデコード、右マージンのチェック、チェックデジットの判定を順に行う。なお、ＮＷ−７のバーコードでは、左マージン、スタートキャラクタ、ストップキャラクタ、及び、右マージンが非キャラクタ部分であり、データキャラクタ及びチェックデジットがキャラクタ部分である。より詳細には、バーコード読取装置は、選択された種類のバーコードの規格に従って、読み取った対象バーコードを左側から順に、非キャラクタ部分かキャラクタ部分かを区別する。非キャラクタ部分については、当該非キャラクタ部分をチェックし、あるいは、当該非キャラクタ部分を構成するモジュールが規格に一致するか否かを判定する。一方、キャラクタ部分については、左から順に所定本数のモジュール群（１文字分のデータを表すモジュール群）を抽出し、その抽出したモジュール群が規格に一致するか否かを判断する。一致している場合は、モジュール群の抽出と、その抽出したモジュール群が規格に一致するか否かの判定を繰り返し行う。これによって、読み取った対象バーコードが選択された種類のバーコードであるか否かを判定する。選択されたバーコードの種類が間違っている場合、再度、他の種類の規格を選択し、その選択された種類のバーコードの規格が正しいか否かを判定する。このような処理によって、読み取った対象バーコードの種類（規格）が特定され、複数種類のバーコードが１台の読取装置によって読み取られる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平７−３３４６０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１の技術では、読み取った対象バーコードを左側から順にデコードし、デコードする毎に選択した規格に一致するか否かを判定する。このため、キャラクタ部分をデコードする際は、１文字分ずつモジュール群を抽出し、その抽出したモジュール群が選択した種類の規格に適合するか否かの判定を行うこととなる。そのため、対象バーコードが選択した種類の規格に適合するか否かが判明するまでに、相当程度デコード処理を進めなければならない場合がある。そのため、対象バーコードの規格を特定するまでに長時間を要し、結果的に対象バーコードのデコードに長時間を要する場合がある。本明細書では、対象バーコードの規格を特定するまでの時間を短くし、対象バーコードのデコードに要する時間を短くすることができる技術を提供する。
【課題を解決するための手段】
【０００６】
本明細書では、規格化された複数種類のバーコードを読取可能なバーコード読取装置を開示する。バーコード読取装置は、読取対象の対象バーコードからの反射光を受光する受光部と、対象バーコードを複数種類のうちの第１種類のバーコードとして反射光に基づいて対象バーコードが表すデータをデコードする場合に、対象バーコードのうち、第１種類のバーコードのデータキャラクタが含まれない非キャラクタ部分に対応する複数の第１部分を、第１種類のバーコードのデータキャラクタが含まれるキャラクタ部分に対応する第２部分よりも先にデコードする第１種のデコード処理を実行する制御部とを備える。
【０００７】
上記のバーコード読取装置は、対象バーコードをデコードする場合に、対象バーコードのうち、データキャラクタが含まれない非キャラクタ部分に対応する複数の第１部分を、データキャラクタが含まれるキャラクタ部分に対応する第２部分よりも先にデコードする。非キャラクタ部分は、第１種類のバーコードの規格に特有の構成（例えば、スタートキャラクタ、ストップキャラクタ、ガードバー、センターバー等）を含んでいる。そのため、上記のバーコード読取装置は、対象バーコードの一端側から順にデコードする従来の構成と比べて、対象バーコードが第１種類のバーコードの規格に適合するか否かを早期に判別することができる。その結果、上記のバーコード読取装置によると、対象バーコードの規格を特定するまでの時間を短くでき、対象バーコードが表すデータのデコードに要する時間を短くすることができる。
【図面の簡単な説明】
【０００８】
【図１】実施例のバーコード読取装置の構成を示すブロック図。
【図２】ＥＡＮ−１３規格のバーコードの構成を模式的に示す図。
【図３】ＣＯＤＥ−３９規格のバーコードの構成を模式的に示す図。
【図４】ＣＯＤＥ−１２８規格のバーコードの構成を模式的に示す図。
【図５】デコード処理を示すフローチャート。
【図６】ＥＡＮ−１３デコード処理を示すフローチャート。
【図７】ＣＯＤＥ−３９デコード処理を示すフローチャート。
【図８】マージン特定処理を示すフローチャート。
【図９】ＣＯＤＥ−１２８デコード処理を示すフローチャート。
【発明を実施するための形態】
【０００９】
以下に説明する実施例の主要な特徴を列記しておく。なお、以下に示す技術要素は、それぞれ独立した技術要素であって、単独であるいは各種の組み合わせによって技術的有用性を発揮するものであり、出願時請求項記載の組み合わせに限定されるものではない。
【００１０】
（特徴１）第１種のデコード処理において、制御部は、第１部分のデコード結果が第１種類のバーコードの規格に適合すると判断されるときは、対象バーコードの第２部分をデコードし、第１部分のデコード結果が第１種類のバーコードの規格に適合しないと判断されるときは、対象バーコードの第１種類のバーコードとしてのデコードに失敗したとして対象バーコードの第２部分のデコードの実行を中止してもよい。
【００１１】
この構成によると、バーコード読取装置は、第１部分のデコード結果が第１種類のバーコードの規格に適合するか否かに応じて、対象バーコードの第１種類のバーコードとしてのデコードを継続するか否かを変えることができる。そのため、バーコード読取装置は、対象バーコードの第１部分のデコード結果が第１種類のバーコードの規格に適合しない場合に、無駄に第２部分のデコードを行わないようにすることができる。
【００１２】
（特徴２）制御部は、第１種のデコード処理の結果、対象バーコードに対応するデータのデコードに失敗する場合に、対象バーコードを第１種類のバーコードとは異なる第２種類のバーコードとしてデコードする第２種のデコード処理を実行してもよい。制御部は、第２種のデコード処理では、対象バーコードのうち、第２種類のバーコードのデータキャラクタが含まれない非キャラクタ部分に対応する複数の第３部分を、第２種のバーコードのデータキャラクタが含まれるキャラクタ部分に対応する第４部分よりも先にデコードしてもよい。
【００１３】
第１種のデコード処理の結果、対象バーコードに対応するデータのデコードに失敗する場合は、対象バーコードが第１種類のバーコードの規格ではないことを意味する。上記の構成によると、バーコード読取装置は、対象バーコードが第１種類のバーコードの規格ではない場合に、対象バーコードが第２種類のバーコードの規格であるか否かを続いて判別することができる。そのため、バーコード読取装置は、対象バーコードの規格を特定するまでの時間をより短くすることができる。
【００１４】
（特徴３）第１種類のバーコードの非キャラクタ部分には、第１種類のバーコードの両端に設けられたマージン部分が含まれていてもよい。制御部は、第１種のデコード処理を実行する場合であって、最初に、対象バーコードの両端のマージン部分を特定し、次いで、特定されたマージン部分が第１種類のバーコードの規格に適合すると判断されるときは、特定されたマージン部分の間の部分が表すデータをデコードしてもよい。
【００１５】
この構成によると、最初に対象バーコードの両端のマージン部分を特定することにより、デコード対象となる部分を明確にすることができる。
【００１６】
（特徴４）制御部は、対象バーコードの両端のマージン部分を特定する場合、一端側のマージン部分を特定し、第１種類のバーコードの規格化された構成に従って、一端側のマージン部分から第１の本数分だけ離れたモジュールの位置を特定し、特定された位置がマージン部分であるか否かを判断し、特定された位置がマージン部分であると判断される場合に、一端側のマージン部分から第１の本数分だけ離れたモジュールの位置が他端側のマージン部分であると特定し、特定された位置がマージン部分でないと判断される場合に、一端側のマージン部分から第２の本数分だけ離れたモジュールの位置を新たに特定し、新たに特定された位置がマージン部分であるか否かを判断してもよい。第２の本数は、第１の本数に、第１種類のバーコードにおける１文字分のデータに対応するモジュールの本数を加えた本数であってもよい。
【００１７】
この構成によると、対象バーコードの両端のマージン部分を適切に特定することができる。
【００１８】
（特徴５）制御部は、対象バーコードの両端のマージン部分を特定した後に、第１種類のバーコードに特有の特有データを表す部分に相当する特定の部分が表すデータをデコードし、特定の部分が表すデータのデコード結果が固有データと一致しない場合に、特定されたマージン部分の間の部分が表すデータのデコードに失敗したと判断してもよい。
【００１９】
ここで、「第１種類のバーコードに特有の特有データを表す部分」は、スタートキャラクタ、ストップキャラクタ、ガードバー、センターバー等、第１種類のバーコードに特有の構成を含む。上記の構成によると、バーコード読取装置は、特定されたマージン部分の間の部分が表すデータのデコードに失敗したことを早期に判断することができる。
【００２０】
（特徴６）制御部は、特定されたマージン部分の間の部分が表すデータのデコードに失敗する場合、一端側のマージンの位置を他端側に所定量移動させた上で、対象バーコードの両端のマージン部分を新たに特定し、新たに特定された両端のマージン部分の間に存在するモジュール数が、第１種類のバーコードを構成するための最小モジュール数以上である場合、当該新たに特定された両端のマージン部分の間の部分が表すデータをデコードし、新たに特定された両端のマージン部分の間に存在するモジュール数が、第１種類のバーコードを構成するための最小モジュール数より少ない場合、第１種のデコード処理が失敗したと判断してもよい。
【００２１】
新たに特定された両端のマージン部分の間に存在するモジュール数が、第１種類のバーコードを構成するための最小モジュール数より少ない場合、対象バーコードは第１種類のバーコードの規格に適合しないことを意味する。従って、上記の構成によると、バーコード読取装置は、第１種のデコード処理が失敗したことを比較的早期に判断することができる。
【００２２】
（特徴７）第１種類のバーコードは、ＰＯＳコードであってもよい。
【００２３】
いわゆるＰＯＳコードは、両端にガードバーを有し、中央にセンターバーを有するコードであり、一般的に利用される可能性の高いコードである。バーコード読取装置は、対象バーコードがＰＯＳコードであるか否かを早期に判断することができる。
【実施例】
【００２４】
（バーコード読取装置２の構成；図１）
図１に示すバーコード読取装置２は、規格化された複数種類のバーコードを読取可能な装置である。バーコード読取装置２は、制御部１０と、発光部１２と、受光部１４と、メモリ１６と、操作部１８と、表示部２０とを有する。制御部１０は、メモリ１６内のプログラムに従って様々な処理を実行する。制御部１０が実行する処理の内容は後で詳しく説明する。発光部１２は、バーコードに光を照射する。受光部１４は、バーコードからの反射光を受光する。メモリ１６は、様々なプログラムを記憶している。また、メモリ１６は、様々な情報（例えば、各規格のバーコードの構成など）を記憶する領域も有している。操作部１８は、複数個のキーを有する。作業者は、操作部１８を操作して、バーコード読取装置２に様々な指示を入力することができる。表示部２０は、様々な情報を表示する。
【００２５】
本実施例のバーコード読取装置２は、ＥＡＮ（European Article Number）−１３、ＣＯＤＥ−３９、及び、ＣＯＤＥ−１２８の各規格のバーコードを読取可能である。各規格のバーコードについて、図２、図３、図４を参照して説明する。
【００２６】
（ＥＡＮ−１３規格のバーコードの構成；図２）
図２は、ＥＡＮ−１３規格のバーコードの構成を模式的に示す。ＥＡＮ−１３規格のバーコードは、いわゆるＰＯＳ（Point Of Sales）コードの一種である。ＰＯＳコードは、市場において利用される頻度が比較的高い種類のコードである。ＥＡＮ−１３規格のバーコードは、左から順に、左マージン、左ガードバー、左側の６文字分のデータキャラクタ、センターバー、右側の６文字分のデータキャラクタ、右ガードバー、右マージンを備えている。ＥＡＮ−１３規格のバーコードのうち、左マージン、左ガードバー、センターバー、右ガードバー、及び、右マージンは、非キャラクタ部分の一例である。また、左右それぞれの６文字分のデータキャラクタは、キャラクタ部分の一例である。ＥＡＮ−１３規格のバーコードでは、データキャラクタは合計１２文字分（チェックデジットキャラクタ含む）に定められている。
【００２７】
左マージン及び右マージンは、それぞれ、バーコードの端に設けられた空白部分である。左マージン、及び、右マージンのそれぞれは、少なくとも、最も幅の小さいモジュール（バー又はスペース）１０本分程度のスペースによって構成されている。以下、本明細書では、最も幅の小さいモジュールのことを「単位モジュール」と呼び、最も幅の小さいモジュール１本分の幅のことを「単位モジュール１本分の幅」と呼ぶ場合がある。
【００２８】
左ガードバー及び右ガードバーは、それぞれ、左マージン及び右マージンの隣に配置されている。各ガードバーは、２本のバー及び１本のスペースで構成されている。２本のバーと１本のスペースは、それぞれ、単位モジュール１本分の幅を有している。左ガードバーと右ガードバーのそれぞれをデコードすると、予め決められた情報がデコードされる。
【００２９】
センターバーは、バーコードの中央部に配置されている。センターバーは、２本のバー及び３本のスペースで構成されている。２本のバーと３本のスペースは、それぞれ、単位モジュール１本分の幅を有している。センターバーをデコードすると、予め決められた情報が読み取られる。
【００３０】
左側の６文字分のデータキャラクタは、左ガードバーとセンターバーの間に配置されている。また、右側の６文字分のデータキャラクタは、センターバーと右ガードバーの間に配置されている。１文字分のデータキャラクタは、単位モジュール７本分の幅を有している。１文字分のデータキャラクタは、２本のバーと２本のスペースとで構成されている。２本のバーと２本のスペースは、それぞれ、単位モジュール１本分、２本分、３本分、４本分のいずれかの幅を有しており、２本のバーと２本のスペースの合計の幅が、単位モジュール７本分の幅になるように構成されている。各データキャラクタをデコードすると、各バー及び各スペースの位置と幅に応じて、いずれかの数字（０〜９）が読み取られる。
【００３１】
右側の６文字分のデータキャラクタのうち、右端の１文字分のデータキャラクタは、チェックデジットキャラクタである。チェックデジットキャラクタをデコードすると、１つの数値が読み取られる。この数値は、各データキャラクタのデコード結果を用いて所定の計算を行った場合に得られる数値と一致する。
【００３２】
（ＣＯＤＥ−３９規格のバーコードの構成；図３）
図３は、ＣＯＤＥ−３９規格のバーコードの構成を模式的に示す。ＣＯＤＥ−３９規格のバーコードは、左から順に、左マージン、スタートキャラクタ、Ｎ文字分のデータキャラクタ、ストップキャラクタ、右マージンを備えている。なお、スタートキャラクタと１文字目のデータキャラクタの間、各データキャラクタの間、及び、Ｎ文字目のデータキャラクタとストップキャラクタの間には、それぞれ、単位モジュール１本分の幅のスペース（以下では、「キャラクタ間ギャップ」と呼ぶ）が備えられている。ＣＯＤＥ−３９規格のバーコードのうち、左マージン、スタートキャラクタ、ストップキャラクタ、及び、右マージンは、非キャラクタ部分の一例である。また、Ｎ文字分のデータキャラクタ及び各キャラクタ間ギャップは、キャラクタ部分の一例である。
【００３３】
左マージン及び右マージンは、それぞれ、バーコードの端に設けられた空白部分である。左マージン、及び、右マージンのそれぞれは、少なくとも単位モジュール１０本分程度のスペースによって構成されている。
【００３４】
スタートキャラクタ、ストップキャラクタ、及び、各データキャラクタは、いずれも、５本のバーと４本のスペースを交互に備えている。５本のバーと４本のスペースのうちの３本が幅広（ワイド）に形成されており、残りの６本が通常の幅（ナロー）に形成されている。通常の幅のバー（ナローバー）及び通常の幅のスペース（ナロースペース）は、単位モジュール１本分の幅を有している。幅広のバー（ワイドバー）及び幅広のスペース（ワイドスペース）は、ナローバー及びナロースペースの２〜３倍の幅を有している。ＣＯＤＥ−３９規格のバーコードは、ＣＯＤＥ−３９規格の複数の異なるバーコードの間で、ワイドバー（スペース）とナローバー（スペース）との幅の比率にバラツキ（２〜３倍）が出ることが許容されている。そのため、ＣＯＤＥ−３９規格では、１文字分のキャラクタに相当する幅も、バーコード毎に異なる場合がある。
【００３５】
スタートキャラクタは、左マージンの右側に配置されている。また、ストップキャラクタは、右マージンの左側に配置されている。スタートキャラクタとストップキャラクタは同じ構成を有している。図３に示すように、スタートキャラクタ及びストップキャラクタでは、左から１番目のスペースと、３番目のバーと、４番目のバーが、ワイドに形成されている。スタートキャラクタ及びストップキャラクタをデコードすると、「＊（アスタリスク）」がデコードされる。ＣＯＤＥ−３９規格では、「＊」がデコードされる場合、スタートキャラクタ及びストップキャラクタを表すことが定められている。
【００３６】
Ｎ文字分のデータキャラクタは、スタートキャラクタとストップキャラクタの間に配置されている。ＣＯＤＥ−３９規格のバーコードは、データキャラクタを任意の文字数（Ｎ）分だけ備えることができる。上記の通り、各データキャラクタは、５本のバーと４本のスペースのうちの３本が幅広（ワイド）に形成されており、残りの６本が通常の幅（ナロー）に形成されている。各データキャラクタをデコードすると、ワイドに形成されているバー及び／又はスペースの位置に応じて、数字（０〜９）、アルファベット（Ａ〜Ｚ）、記号（％、＄など）のいずれかがデコードされる。
【００３７】
（ＣＯＤＥ−１２８規格のバーコードの構成；図４）
図４は、ＣＯＤＥ−１２８規格のバーコードの構成を模式的に示す。ＣＯＤＥ−１２８規格のバーコードは、左から順に、左マージン、スタートキャラクタ、Ｎ文字分のデータキャラクタ、チェックデジットキャラクタ、ストップキャラクタ、右マージンを備えている。ＣＯＤＥ−１２８規格のバーコードのうち、左マージン、スタートキャラクタ、ストップキャラクタ、及び、右マージンは、非キャラクタ部分の一例である。また、Ｎ文字分のデータキャラクタ及びチェックデジットキャラクタは、キャラクタ部分の一例である。
【００３８】
ＣＯＤＥ−１２８規格は、各データキャラクタが表す情報（文字、数字、記号等）に対応するモジュール群のパターン（以下、「コードセット」と呼ぶ）が、Ａ、Ｂ、Ｃの３種類定められていることを特徴とする。スタートキャラクタの内容によって、使用されるコードセットが決定される。また、データキャラクタ内に、所定の特殊キャラクタを配置することにより、バーコードの途中で、使用するコードセットを変更することもできる。ＣＯＤＥ−１２８規格のバーコードは、３種類のコードセットを使用することにより、他の規格に比べて多様な情報を表すことができることを特徴とする。
【００３９】
左マージン及び右マージンは、それぞれ、バーコードの端に設けられた空白部分である。左マージン及び右マージンのそれぞれは、少なくとも単位モジュール１０本分程度のスペースによって構成されている。
【００４０】
スタートキャラクタ、チェックデジットキャラクタ、及び、各データキャラクタは、いずれも、単位モジュール１１本分の幅を有している。スタートキャラクタ及び各データキャラクタは、３本のバーと３本のスペースを交互に備えている。３本のバーと３本のスペースは、それぞれ、単位モジュール１本分、２本分、３本分、４本分のいずれかの幅を有しており、３本のバーと３本のスペースの合計の幅が、単位モジュール１１本分の幅になるように構成されている。ただし、３本のバーの合計の幅が、単位モジュール偶数本分の幅であり、３本のスペースの合計の幅が、単位モジュール奇数本分の幅であるように定められている。
【００４１】
スタートキャラクタは、左マージンの右側に配置されている。上記の通り、スタートキャラクタは、３本のバーと３本のスペースを有している。スタートキャラクタを構成する各バー及びスペースの幅は、当該バーコードにおいて使用されるコードセット（Ａ、Ｂ、Ｃのいずれか）毎に、予め決められている。従って、スタートキャラクタをデコードすると、コードセット毎に予め決められた情報がデコードされる。
【００４２】
Ｎ文字分のデータキャラクタは、スタートキャラクタの右側に配置されている。ＣＯＤＥ−１２８規格のバーコードも、データキャラクタを任意の文字数（Ｎ）分だけ備えることができる。上記の通り、各データキャラクタも、３本のバーと３本のスペースを有している。各データキャラクタをデコードすると、各バー及びスペースの幅と、使用されているコードセットに応じて、数字（２桁の数字も含む）、アルファベット、記号、所定の特殊キャラクタのうちのいずれかがデコードされる。
【００４３】
チェックデジットキャラクタは、Ｎ番目のデータキャラクタと、ストップキャラクタの間に配置されている。上記の通り、チェックデジットキャラクタも、３本のバーと３本のスペースを有している。チェックデジットキャラクタをデコードすると、１つの数値がデコードされる。この数値は、各データキャラクタのデコード結果を用いて所定の計算を行った場合に得られる数値と一致する。
【００４４】
ストップキャラクタは、上記のスタートキャラクタ等とは異なり、単位モジュール１３本分の幅を有している。ストップキャラクタは、４本のバーと３本のスペースを交互に有している。ストップキャラクタは、使用されているコードセットに関わらず１種類に定められている。従って、図４に示すように、各バー及びスペースの幅は、左から順に「２：３：３：１：１：１：２」に定められている。
【００４５】
（デコード処理；図５〜図９）
続いて、図５〜図９を参照して、制御部１０が実行するデコード処理について説明する。作業者の操作に従って、発光部１２は、読取対象のバーコード（以下、「対象バーコード」と呼ぶ）に光を照射する。それとともに、受光部１４は、対象バーコードからの反射光を受光する。受光部１４が対象バーコードからの反射光を受光すると、制御部１０は、受光した反射光に基づいて、対象バーコードに関する情報を取得する。取得される情報には、対象バーコードに含まれるモジュールの本数、各モジュール（バー及びスペース）の順番及び幅の値等が含まれる。対象バーコードに関する情報を取得すると、制御部１０は、図５の各処理を開始する。
【００４６】
図５のＳ１０では、制御部１０は、まず、対象バーコードをＥＡＮ−１３規格のバーコードであるとしてデコードを行うＥＡＮ−１３デコード処理（図６参照）を実行する。ＥＡＮ−１３デコード処理の内容については、後で詳しく説明する。Ｓ１０でＥＡＮ−１３デコード処理が終了（成功終了又は失敗終了）すると、制御部１０は、Ｓ１２に進み、ＥＡＮ−１３デコード処理の結果、対象バーコードのデコードに成功したか否かを判断する。ＥＡＮ−１３デコード処理が成功終了していた場合、制御部１０は、Ｓ１２でＹＥＳと判断し、図５のデコード処理を終了する。一方、ＥＡＮ−１３デコード処理が失敗終了していた場合、制御部１０は、Ｓ１２でＮＯと判断し、Ｓ１４に進む。
【００４７】
Ｓ１４では、制御部１０は、対象バーコードをＣＯＤＥ−３９規格のバーコードであるとしてデコードを行うＣＯＤＥ−３９デコード処理（図７参照）を実行する。ＣＯＤＥ−３９デコード処理の内容については、後で詳しく説明する。Ｓ１４でＣＯＤＥ−３９デコード処理が終了（成功終了又は失敗終了）すると、制御部１０は、Ｓ１６に進み、ＣＯＤＥ−３９デコード処理の結果、対象バーコードのデコードに成功したか否かを判断する。ＣＯＤＥ−３９デコード処理が成功終了していた場合、制御部１０は、Ｓ１６でＹＥＳと判断し、図５のデコード処理を終了する。一方、ＣＯＤＥ−３９デコード処理が失敗終了していた場合、制御部１０は、Ｓ１６でＮＯと判断し、Ｓ１８に進む。
【００４８】
Ｓ１８では、制御部１０は、対象バーコードをＣＯＤＥ−１２８規格のバーコードであるとしてデコードを行うＣＯＤＥ−１２８デコード処理（図９参照）を実行する。ＣＯＤＥ−１２８デコード処理の内容については、後で詳しく説明する。Ｓ１８でＣＯＤＥ−１２８デコード処理が終了（成功終了又は失敗終了）すると、制御部１０は、Ｓ２０に進み、ＣＯＤＥ−１２８デコード処理の結果、対象バーコードのデコードに成功したか否かを判断する。ＣＯＤＥ−１２８デコード処理が成功終了していた場合、制御部１０は、Ｓ２０でＹＥＳと判断し、図５のデコード処理を終了する。一方、ＣＯＤＥ−１２８デコード処理が失敗終了していた場合、制御部１０は、Ｓ２０でＮＯと判断し、デコード処理を終了する。この場合、対象バーコードのデコードに失敗したことになる。
【００４９】
（ＥＡＮ−１３デコード処理；図６）
上記の通り、図５のデコード処理では、制御部１０は、最初にＥＡＮ−１３デコード処理（図６）を実行する。図６のＳ３０では、制御部１０は、対象バーコードの左端を示すチェックポイント（最初のＳ３０では、図２の左マージンの右端部分に相当する部分）から順に、対象バーコードの右端（右マージン）まで数えた場合のモジュール本数（以下では、このモジュール本数のことを「残りモジュール本数」と呼ぶ場合がある）が６１本以上であるか否かを判断する。一般に、ＥＡＮ−１３規格のバーコードは、左マージン及び右マージンも１本のモジュールとして含めてカウントする場合、左マージンから右マージンまでの間に６１本のモジュールを有している。即ち、残りモジュール本数が６１本を下回っている場合には、対象バーコードはＥＡＮ−１３規格のバーコードではないことを意味する。
【００５０】
残りモジュール本数が６１本以上である場合、制御部１０は、Ｓ３０でＹＥＳと判断し、Ｓ３２に進む。一方、残りモジュール本数が６１本を下回る場合、制御部１０は、Ｓ３０でＮＯと判断し、図６のＥＡＮ−１３デコード処理を失敗終了する。この場合、対象バーコードがＥＡＮ−１３規格のバーコードであるとして行ったデコードが失敗したことを意味する。これにより、本実施例のバーコード読取装置２は、ＥＡＮ−１３デコード処理が失敗したことを比較的早期に判断することができる。
【００５１】
Ｓ３２では、制御部１０は、対象バーコードの左右のマージンをチェックする。具体的には、Ｓ３２では、まず、制御部１０は、対象バーコードの左端を示すチェックポイントの位置を左マージンとして特定する。次いで、制御部１０は、チェックポイントからモジュール６０本分右側に移動した位置を特定する。
【００５２】
次いで、Ｓ３４では、制御部１０は、左右のマージンのチェックが成功したか否かを判断する。具体的には、Ｓ３４では、制御部１０は、チェックポイントからモジュール６０本分右側に移動した位置が右マージンであるか否かを判断する。チェックポイントからモジュール６０本分右側に移動した位置よりも右側にバーが存在せず、かつ、チェックポイントからモジュール６０本分右側に移動した位置の左隣に右ガードバーの右端のバー（図２参照）が存在していれば、制御部１０は、チェックポイントからモジュール６０本分右側に移動した位置が右マージンであると判断する。この場合、制御部１０は、Ｓ３４でＹＥＳと判断し、Ｓ３６に進む。このように、本実施例のバーコード読取装置２は、最初に対象バーコードの両端のマージン部分を特定することにより、デコード対象となる部分を早期に明確にすることができる。一方、チェックポイントからモジュール６０本分右側に移動した位置よりも右側にバーが存在する場合は、制御部１０は、チェックポイントからモジュール６０本分右側に移動した位置が右マージンではないと判断する。また、チェックポイントからモジュール６０本分右側に移動した位置よりも右側にはバーが存在しないものの、チェックポイントからモジュール６０本分右側に移動した位置の左隣に右ガードバーの右端のバーが存在していない場合も、制御部１０は、チェックポイントからモジュール６０本分右側に移動した位置が右マージンではないと判断する。これらの場合、制御部１０は、Ｓ３４でＮＯと判断し、Ｓ５２に進む。本実施例のバーコード読取装置２は、対象バーコードがＥＡＮ−１３規格に適合しないことを早期に判別することができる。
【００５３】
Ｓ３６では、制御部１０は、対象バーコードの左右のガードバーをチェックする。具体的には、Ｓ３６では、左マージンの右側に隣接する２本のバーと１本のスペース（即ち、左ガードバーに相当する範囲のモジュール群）をデコードするとともに、右マージンの左側に隣接する２本のバーと１本のスペース（即ち、右ガードバーに相当する範囲のモジュール群）をデコードする。
【００５４】
次いで、Ｓ３８では、制御部１０は、左右のガードバーのチェックが成功したか否かを判断する。具体的には、Ｓ３８では、左ガードバーに相当する範囲のモジュール群のデコード結果と、右ガードバーに相当する範囲のモジュール群のデコード結果が、それぞれ、予め決められた情報と一致するか否かを判断する。デコード結果が予め決められた情報と一致する場合、制御部１０は、Ｓ３８でＹＥＳと判断し、Ｓ４０に進む。一方、デコード結果が予め決められた情報と一致しない場合、制御部１０は、Ｓ３８でＮＯと判断し、Ｓ５２に進む。
【００５５】
Ｓ４０では、制御部１０は、センターバーのチェックが成功したか否かを判断する。具体的には、Ｓ４０では、左マージンから数えて２７本分右側に存在する３本のスペースと２本のバー（即ち、センターバーに相当する範囲のモジュール群）をデコードする。
【００５６】
次いで、Ｓ４２では、制御部１０は、センターバーのチェックが成功したか否かを判断する。具体的には、Ｓ４２では、センターバーに相当する範囲のモジュール群のデコード結果が、予め決められた情報と一致するか否かを判断する。デコード結果が予め決められた情報と一致する場合、制御部１０は、Ｓ４２でＹＥＳと判断し、Ｓ４４に進む。一方、デコード結果が予め決められた情報と一致しない場合、制御部１０は、Ｓ４２でＮＯと判断し、Ｓ５２に進む。
【００５７】
Ｓ４４では、制御部１０は、左側の６文字分のデータキャラクタと、右側の５文字分のデータキャラクタをデコードする。具体的には、Ｓ４４では、制御部１０は、１文字分ずつ、データキャラクタに相当する範囲のモジュール群をデコードする。制御部１０は、１文字分のデータキャラクタに相当する範囲のモジュール群のデコードを行う毎に、デコードが成功したか否かを判断する。
【００５８】
続くＳ４６では、制御部１０は、データキャラクタのデコードが成功したか否かを判断する。全てのデータキャラクタのデコードが成功すれば、制御部１０は、Ｓ４６でＹＥＳと判断し、Ｓ４８に進む。一方、１１文字のうち、いずれか１文字のデータキャラクタのデコードに失敗すれば、制御部１０は、その時点で、Ｓ４６でＮＯと判断し、Ｓ５２に進む。
【００５９】
Ｓ４８では、制御部１０は、チェックデジットチェックを行う。具体的には、制御部１０は、まず、チェックデジットキャラクタに相当する範囲（即ち、１２文字目のデータキャラクタに相当する範囲）のモジュール群をデコードして１つの数値を読み取る。次いで、制御部１０は、各データキャラクタのデコード結果を用いて所定の計算を行う。次いで、制御部１０は、チェックデジットキャラクタに相当する範囲のモジュール群から得られた数値と、各データキャラクタのデコード結果を用いて所定の計算を行って得られた数値を比較する。
【００６０】
続くＳ５０では、制御部１０は、チェックデジットのチェックが成功したか否かを判断する。具体的には、Ｓ５０では、チェックデジットキャラクタに相当する範囲のモジュール群から得られた数値と、各データキャラクタのデコード結果を用いて所定の計算を行って得られた数値とが一致するか否かを判断する。２つの数値が一致する場合、制御部１０は、Ｓ５０でＹＥＳと判断し、図６のＥＡＮ−１３デコード処理を成功終了する。即ち、対象バーコードがＥＡＮ−１３規格のバーコードであるとしてデコードを行った結果、対象バーコードのデコードに成功したことを意味する。一方、２つの数値が一致しない場合、制御部１０は、Ｓ５０でＮＯと判断し、Ｓ５２に進む。
【００６１】
上述の通り、Ｓ５２に処理が進む場合は、Ｓ３４、Ｓ３８、Ｓ４２、Ｓ４６、Ｓ５０のいずれかでＮＯと判断された場合である。Ｓ５２では、制御部１０は、対象バーコードの左端を示すチェックポイント（最初のＳ３０では、図２の左マージンの右端部分に相当する部分）を、バー１本分右側に移動させる。即ち、最初のＳ３０で左マージンの右端部分に相当する部分をチェックポイントに指定していた場合、Ｓ５２では、制御部１０は、左端から１本目のバーの右側のスペースを新たにチェックポイントに指定する。Ｓ５２で新たにチェックポイントを指定した後は、Ｓ３０に戻り、再度処理を実行する。バーコードの周囲に汚れ等が存在する場合、最初のＳ３０で、左マージンの右端部分ではない部分を誤ってチェックポイントとして指定してデコード（Ｓ３０以降の各処理）を行ってしまう場合がある。Ｓ５２でチェックポイントの位置を移動させた上で再度デコードを行うことにより、正確な左マージンの位置を特定してデコードが行われ、結果的にデコードが成功する場合がある。なお、Ｓ３０からの処理を繰り返し実行することで、チェックポイントが右側に順次移動して残りモジュール本数が６１本未満となると、Ｓ３０でＮＯと判断され、デコード処理が失敗したとしてＥＡＮ−１３デコード処理が失敗終了する。ＥＡＮ−１３デコード処理が失敗終了すると、特定されていたチェックポイントの位置は、対象バーコードの左端を示す位置に戻る。
【００６２】
（ＣＯＤＥ−３９デコード処理；図７）
上記の通り、図５のデコード処理では、制御部１０は、ＥＡＮ−１３デコード処理が失敗する場合（図５のＳ１２でＮＯの場合）に、ＣＯＤＥ−３９デコード処理（図７）を実行する。図７のＳ６０では、制御部１０は、対象バーコードの左端を示すチェックポイント（最初のＳ６０では、図３の左マージンの右端部分に相当する部分）から順に、対象バーコードの右端（右マージン）まで数えた場合の残りモジュール本数が３１本以上であるか否かを判断する。一般に、ＣＯＤＥ−３９規格のバーコードは、左マージン及び右マージンも１本のモジュールとして含めてカウントする場合、左マージンから右マージンまでの間に少なくとも３１本のモジュールを有している。即ち、少なくとも、残りモジュール本数が３１本を下回っている場合には、対象バーコードはＣＯＤＥ−３９規格のバーコードではないことを意味する。
【００６３】
残りモジュール本数が３１本以上である場合、制御部１０は、Ｓ６０でＹＥＳと判断し、Ｓ６２に進む。一方、残りモジュール本数が３１本を下回る場合、制御部１０は、Ｓ６０でＮＯと判断し、図７のＣＯＤＥ−３９デコード処理を失敗終了する。この場合、対象バーコードがＣＯＤＥ−３９規格のバーコードであるとして行ったデコードが失敗したことを意味する。これにより、本実施例のバーコード読取装置２は、ＣＯＤＥ−３９デコード処理が失敗したことを比較的早期に判断することができる。
【００６４】
Ｓ６２では、制御部１０は、対象バーコードの左右のマージンを特定するためのマージン特定処理（図８）を実行する。本実施例のバーコード読取装置２は、最初に対象バーコードの両端のマージン部分を特定することにより、デコード対象となる部分を早期に明確にすることができる。
【００６５】
（マージン特定処理；図８）
マージン特定処理の内容について、図８を参照して説明する。まず、Ｓ９０では、制御部１０は、左マージンを特定する。具体的には、左マージン処理は、Ｓ９０の時点で、チェックポイントとして指定されている位置を左マージンとして特定する。
【００６６】
次いで、Ｓ９２では、制御部１０は、対象バーコードに含まれるデータキャラクタが表す文字数Ｎを１に決定する。
【００６７】
次いで、Ｓ９４では、制御部１０は、右マージンをチェックする。具体的には、例えば、ＣＯＤＥ−３９規格のバーコードにおいて、データキャラクタの文字数Ｎが１の場合、制御部１０は、左マージンからモジュール３０本分右側に移動した位置を特定する。なお、図８のマージン特定処理は、後で説明する図９のＣＯＤＥ−１２８デコード処理においても実行される。ＣＯＤＥ−１２８規格のバーコードの場合、データキャラクタの文字数Ｎが１の場合、左マージンからモジュール２６本分右側に移動した位置を特定する。
【００６８】
次いで、Ｓ９６では、制御部１０は、右マージンのチェックが成功したか否かを判断する。具体的には、Ｓ９６では、制御部１０は、Ｓ９４で特定された位置（例えば、左マージンからモジュール３０本分右側に移動した位置）が右マージンであるか否かを判断する。Ｓ９４で特定された位置よりも右側にバーが存在せず、かつ、Ｓ９４で特定された位置の左隣にストップキャラクタの右端のバー（図３、図４参照）が存在していれば、制御部１０は、Ｓ９４で特定された位置が右マージンであると判断する。この場合、制御部は、Ｓ９６でＹＥＳと判断し、図８のマージン特定処理を成功終了する。この場合、Ｓ９０、Ｓ９４でそれぞれ特定された位置が左右のマージンの位置として特定される。このように、本実施例のバーコード読取装置２は、対象バーコードの両端のマージンを適切に特定することができる。一方、Ｓ９４で特定された位置よりも右側にバーが存在する場合、制御部１０は、Ｓ９４で特定された位置が右マージンではないと判断する。また、Ｓ９４で特定された位置よりも右側にはバーが存在しないものの、Ｓ９４で特定された位置の左隣にストップキャラクタの右端のバーが存在していない場合も、制御部１０は、Ｓ９４で特定された位置が右マージンではないと判断する。これらの場合、制御部１０は、Ｓ９６でＮＯと判断し、Ｓ９８に進む。
【００６９】
Ｓ９８では、制御部１０は、対象バーコードに含まれるデータキャラクタが表す文字数Ｎの値を１インクリメントする。
【００７０】
次いで、Ｓ１００では、制御部１０は、残りモジュール数からＸ×（Ｎ−１）本を減算する。Ｓ１００の時点ではＮの値は２以上である。残りモジュール数は、現在のチェックポイントより右側に存在するモジュールの本数である。Ｘの値は、バーコードの規格毎に異なる。ＣＯＤＥ−３９規格の場合、Ｘの値は１０（本）である（データキャラクタ１文字分（９本）及びキャラクタ間ギャップ１本）。ＣＯＤＥ−１２８規格の場合、Ｘの値は６（本）（データキャラクタ１文字分）である。
【００７１】
次いで、Ｓ１０２では、制御部１０は、Ｓ１００で算出された値がＹ本以上であるか否かを判断する。Ｙの値は、バーコードの規格毎に異なる。Ｙの値は、当該規格のバーコードのうちのデータキャラクタ以外の部分のモジュールの合計本数である。ＣＯＤＥ−３９規格の場合、Ｙの値は２１（本）である。また、ＣＯＤＥ−１２８規格の場合も、Ｙの値は２１（本）である。Ｓ１００で算出された値がＹ本以上である場合、制御部１０は、Ｓ１０２でＹＥＳと判断し、Ｓ１０４に進む。一方、Ｓ１００で算出された値がＹ本を下回る場合、制御部１０は、後述のＳ１０４において、右マージンの左端の位置（ストップキャラクタの右隣の位置）を正しく特定できていない。この場合、制御部１０は、Ｓ１０２でＮＯと判断し、図８のマージン特定処理を失敗終了する。この場合、対象バーコードの左右のマージンの特定に失敗したことを意味する。
【００７２】
Ｓ１０４では、右マージンのチェック位置をＸ本右側へ移動する。上記の通り、Ｘの値は、ＣＯＤＥ−３９規格の場合は１０（本）であり、ＣＯＤＥ−１２８規格の場合は６（本）である。Ｓ１０４で右マージンのチェック位置を移動すると、制御部１０は、Ｓ９６に戻り、右マージンのチェックが成功したか否かを再度判断する。制御部１０がＳ９６からの処理を再実行することで、右マージンの位置が特定されるまで処理が繰返し実行され、あるいは、読取ったバーコードから得られた残りモジュール本数からＸ×（Ｎ−１）本（Ｎは文字数）を減算した値が２１本以下となるまで処理が繰り返し実行される。
【００７３】
（ＣＯＤＥ−３９デコード処理のつづき；図７のＳ６４以降）
図７のＳ６２のマージン特定処理（図８参照）が終了すると、Ｓ６４では、制御部１０は、マージンの特定が成功したか否かを判断する。Ｓ６２のマージン特定処理が成功終了した場合、制御部１０は、Ｓ６４でＹＥＳと判断し、Ｓ６６に進む。一方、マージン特定処理が失敗終了した場合、制御部１０は、Ｓ６４でＮＯと判断し、Ｓ７８に進む。この場合、本実施例のバーコード読取装置２は、対象バーコードがＣＯＤＥ−３９規格に適合しないことを早期に判別することができる。
【００７４】
Ｓ６６では、制御部１０は、スタートキャラクタをチェックする。具体的には、Ｓ６６では、左マージンの右側に隣接する５本のバーと４本のスペース（即ち、スタートキャラクタに相当する範囲のモジュール群）をデコードする。
【００７５】
次いで、Ｓ６８では、制御部１０は、スタートキャラクタのチェックが成功したか否かを判断する。具体的には、Ｓ６８では、スタートキャラクタに相当する範囲のモジュール群のデコード結果が、「＊」であるか否かを判断する。デコード結果が「＊」であった場合、制御部１０は、Ｓ６８でＹＥＳと判断し、Ｓ７０に進む。一方、デコード結果が「＊」でなかった場合、制御部１０は、Ｓ６８でＮＯと判断し、Ｓ７８に進む。
【００７６】
Ｓ７０では、制御部１０は、ストップキャラクタをチェックする。具体的には、Ｓ７０では、制御部１０は、右マージンの左側に隣接する５本のバーと４本のスペース（即ち、ストップキャラクタに相当する範囲のモジュール群）をデコードする。
【００７７】
次いで、Ｓ７２では、制御部１０は、ストップキャラクタのチェックが成功したか否かを判断する。具体的には、Ｓ７２では、ストップキャラクタに相当する範囲のモジュール群のデコード結果が、「＊」であるか否かを判断する。デコード結果が「＊」であった場合、制御部１０は、Ｓ７２でＹＥＳと判断し、Ｓ７４に進む。一方、デコード結果が「＊」でなかった場合、制御部１０は、Ｓ７２でＮＯと判断し、Ｓ７８に進む。
【００７８】
Ｓ７４では、制御部１０は、Ｎ文字分のデータキャラクタをデコードする。ここで、Ｎの値は、Ｓ６２のマージン特定処理が成功終了した時点で特定されていたＮの値である（図８参照）。Ｓ７４では、制御部１０は、１文字分ずつ、データキャラクタに相当する範囲のモジュール群をデコードする。制御部１０は、１文字分のデータキャラクタに相当する範囲のモジュール群のデコードを行う毎に、デコードが成功したか否かを判断する。
【００７９】
続くＳ７６では、制御部１０は、データキャラクタのデコードが成功したか否かを判断する。全てのデータキャラクタのデコードが成功すれば、制御部１０は、Ｓ７６でＹＥＳと判断し、図７のＣＯＤＥ−３９デコード処理を成功終了する。即ち、対象バーコードがＣＯＤＥ−３９規格のバーコードであるとしてデコードを行った結果、対象バーコードのデコードに成功したことを意味する。一方、Ｎ文字のうちのいずれか１文字のデータキャラクタのデコードに失敗すれば、制御部１０は、その時点で、Ｓ７６でＮＯと判断し、Ｓ７８に進む。
【００８０】
上述の通り、Ｓ７８に処理が進む場合は、Ｓ６４、Ｓ６８、Ｓ７２、Ｓ７６のいずれかでＮＯと判断された場合である。Ｓ７８では、制御部１０は、対象バーコードの左端を示すチェックポイント（最初のＳ６０では、図３の左マージンの右側部分に相当する部分）を、バー１本分右側に移動させる。Ｓ７８で新たにチェックポイントを指定した後は、Ｓ６０に戻り、再度処理を実行する。上記のＥＡＮ−１３規格の場合と同様に、Ｓ７８でチェックポイントの位置を移動させた上で再度デコードを行うことにより、デコードが成功する場合がある。なお、Ｓ６０からの処理を繰り返し実行することで、チェックポイントが右側に移動して残りモジュール本数が３１本未満となると、Ｓ６０でＮＯと判断され、デコード処理が失敗したとしてＣＯＤＥ−３９デコード処理が失敗終了する。ＣＯＤＥ−３９デコード処理が失敗終了すると、特定されていたチェックポイントの位置は、対象バーコードの左端を示す位置に戻る。
【００８１】
（ＣＯＤＥ−１２８デコード処理；図９）
上記の通り、図５のデコード処理では、制御部１０は、ＣＯＤＥ−３９デコード処理が失敗する場合（図５のＳ１６でＮＯの場合）に、ＣＯＤＥ−１２８デコード処理（図９）を実行する。図９のＳ１１０では、制御部１０は、対象バーコードの左端を示すチェックポイント（最初のＳ１１０では、図４の左マージンの右端部分に相当する部分）から順に、右端（右マージン）まで数えた場合の残りモジュール本数が２７本以上であるか否かを判断する。一般に、ＣＯＤＥ−１２８規格のバーコードは、左マージン及び右マージンも１本のモジュールとして含めてカウントする場合、左マージンから右マージンまでの間に少なくとも２７本のモジュールを有している。即ち、少なくとも、残りモジュール本数が２７本を下回っている場合には、対象バーコードはＣＯＤＥ−１２８規格のバーコードではないことを意味する。
【００８２】
残りモジュール本数が２７本以上である場合、制御部１０は、Ｓ１１０でＹＥＳと判断し、Ｓ１１２に進む。一方、残りモジュール本数が２７本を下回る場合、制御部１０は、Ｓ１１０でＮＯと判断し、図９のＣＯＤＥ−１２８デコード処理を失敗終了する。これにより、本実施例のバーコード読取装置２は、ＣＯＤＥ−１２８デコード処理が失敗したことを比較的早期に判断することができる。
【００８３】
Ｓ１１２では、制御部１０は、対象バーコードの左右のマージンを特定するためにマージン特定処理（図８）を実行する。マージン特定処理の内容は上述の通りであるため、このでは詳しい説明を省略する。本実施例のバーコード読取装置２は、最初に対象バーコードの両端のマージン部分を特定することにより、デコード対象となる部分を早期に明確にすることができる。
【００８４】
Ｓ１１２のマージン特定処理が終了すると、Ｓ１１４では、制御部１０は、マージンの特定が成功したか否かを判断する。Ｓ１１２のマージン特定処理が成功終了した場合、制御部１０は、Ｓ１１４でＹＥＳと判断し、Ｓ１１６に進む。一方、マージン特定処理が失敗終了した場合、制御部１０は、Ｓ１１４でＮＯと判断し、Ｓ１３２に進む。従って、本実施例のバーコード読取装置２は、対象バーコードがＣＯＤＥ−１２８規格に適合しないことを早期に判別することができる。
【００８５】
Ｓ１１６では、制御部１０は、スタートキャラクタをチェックする。具体的には、Ｓ１１６では、左マージンの右側に隣接する３本のバーと３本のスペース（即ち、スタートキャラクタに相当する範囲のモジュール群）をデコードする。
【００８６】
次いで、Ｓ１１８では、制御部１０は、スタートキャラクタのチェックが成功したか否かを判断する。具体的には、Ｓ１１８では、スタートキャラクタに相当する範囲のモジュール群のデコード結果が予め決められた情報と一致するか否かを判断する。デコード結果が、コードセット毎に予め決められた情報のいずれかと一致する場合、制御部１０は、Ｓ１１８でＹＥＳと判断し、Ｓ１２０に進む。一方、デコード結果が、予め決められた情報のいずれとも一致しない場合、制御部１０は、Ｓ１１８でＮＯと判断し、Ｓ１３２に進む。
【００８７】
Ｓ１２０では、制御部１０は、ストップキャラクタをチェックする。具体的には、Ｓ１２０では、制御部１０は、右マージンの左側に隣接する４本のバーと３本のスペース（即ち、ストップキャラクタに相当する範囲のモジュール群）をデコードする。
【００８８】
次いで、Ｓ１２２では、制御部１０は、ストップキャラクタのチェックが成功したか否かを判断する。具体的には、Ｓ１２２では、ストップキャラクタに相当する範囲のモジュール群のデコード結果が、予め決められた情報と一致するか否かを判断する。デコード結果が予め決められた情報と一致する場合、制御部１０は、Ｓ１２２でＹＥＳと判断し、Ｓ１２４に進む。一方、デコード結果が、予め決められた情報と一致しない場合、制御部１０は、Ｓ１２２でＮＯと判断し、Ｓ１３２に進む。
【００８９】
Ｓ１２４では、制御部１０は、Ｎ文字分のデータキャラクタをデコードする。ここで、Ｎの値は、Ｓ１１２のマージン特定処理が成功終了した時点で特定されていたＮの値である（図８参照）。Ｓ１２４では、制御部１０は、１文字分ずつ、データキャラクタに相当する範囲のモジュール群をデコードする。制御部１０は、１文字分のデータキャラクタに相当する範囲のモジュール群のデコードを行う毎に、デコードが成功したか否かを判断する。
【００９０】
続くＳ１２６では、制御部１０は、データキャラクタのデコードが成功したか否かを判断する。全てのデータキャラクタのデコードが成功すれば、制御部１０は、Ｓ１２６でＹＥＳと判断し、図９のＣＯＤＥ−１２８デコード処理を成功終了する。即ち、対象バーコードがＣＯＤＥ−１２８規格のバーコードであるとしてデコードを行った結果、対象バーコードのデコードに成功したことを意味する。一方、Ｎ文字のうちのいずれか１文字のデータキャラクタのデコードに失敗すれば、制御部１０は、その時点で、Ｓ１２６でＮＯと判断し、Ｓ１２８に進む。
【００９１】
Ｓ１２８では、制御部１０は、チェックデジットチェックを行う。具体的には、Ｓ１２８では、制御部１０は、チェックデジットキャラクタに相当する範囲のモジュール群をデコードして１つの数値を読み取る。次いで、制御部１０は、各データキャラクタのデコード結果を用いて所定の計算を行う。次いで、制御部１０は、チェックデジットキャラクタに相当する範囲のモジュール群から得られた数値と、各データキャラクタのデコード結果を用いて処理の計算を行って得られた数値を比較する。
【００９２】
続くＳ１３０では、制御部１０は、チェックデジットのチェックが成功したか否かを判断する。具体的には、Ｓ１３０では、チェックデジットキャラクタに相当する範囲のモジュール群から得られた数値と、各データキャラクタのデコード結果を用いて所定の計算を行って得られた数値とが一致するか否かを判断する。２つの数値が一致する場合、制御部１０は、Ｓ１３０でＹＥＳと判断し、図９のＣＯＤＥ−１２８デコード処理を成功終了する。即ち、対象バーコードがＣＯＤＥ−１２８規格のバーコードであることを想定してデコードを行った結果、対象バーコードのデコードに成功したことを意味する。一方、２つの数値が一致しない場合、制御部１０は、Ｓ１３０でＮＯと判断し、Ｓ１３２に進む。
【００９３】
上述の通り、Ｓ１３２に処理が進む場合は、Ｓ１１４、Ｓ１１８、Ｓ１２２、Ｓ１２６、Ｓ１３０のいずれかでＮＯと判断された場合である。Ｓ１３２では、制御部１０は、対象バーコードの左端を示すチェックポイント（最初のＳ１１０では、図４の左マージンの右端部分に相当する部分）を、バー１本分右側に移動させる。Ｓ１３２で新たにチェックポイントを指定した後は、Ｓ１１０に戻り、再度処理を実行する。Ｓ１３２でチェックポイントの位置を移動させた上で再度デコードを行うことにより、デコードが成功する場合がある。なお、Ｓ１１０からの処理を繰り返し実行することで、チェックポイントが右側に移動して残りモジュール本数が２７本未満となると、Ｓ１１０でＮＯと判断され、デコード処理が失敗したとしてＣＯＤＥ−１２８デコード処理が失敗終了する。
【００９４】
以上、本実施例のバーコード読取装置２について説明した。本実施例のバーコード読取装置２は、図５に示すように、対象バーコードをデコードする場合、まず、ＥＡＮ−１３デコード処理（図６）を実行する。さらに、図６に示すように、ＥＡＮ−１３デコード処理では、バーコード読取装置２は、対象バーコードのうち、データキャラクタが含まれない複数の非キャラクタ部分に対応する部分を、データキャラクタが含まれるキャラクタ部分に対応する部分よりも先にデコードする。非キャラクタ部分は、ＥＡＮ−１３規格のバーコードに特有の構成（左右のマージン、左右のガードバー、及び、センターバー）を含んでいる。そのため、本実施例のバーコード読取装置２は、対象バーコードの左側から順にデコードする従来のバーコード装置と比較して、対象バーコードがＥＡＮ−１３規格に適合するか否かを早期に判別することができる。また、本実施例のバーコード読取装置２は、複数の非キャラクタ部分に対応する部分のデコード結果がＥＡＮ−１３規格に適合しない場合には（図６のＳ３４、Ｓ３８、Ｓ４２のいずれかでＮＯ）、無駄にキャラクタ部分のデコードを行わないようにすることができる。同様に、本実施例のバーコード読取装置２は、図７、図９に示すように、ＣＯＤＥ−３９デコード処理及びＣＯＤＥ−１２８デコード処理においても、対象バーコードのうち、データキャラクタが含まれない複数の非キャラクタ部分に対応する部分を、データキャラクタが含まれるキャラクタ部分に対応する部分よりも先にデコードする。そのため、本実施例のバーコード読取装置２は、対象バーコードがＣＯＤＥ−３９規格及びＣＯＤＥ−１２８規格に適合するか否かを早期に判別することもできる。本実施例のバーコード読取装置２は、複数の非キャラクタ部分に対応する部分のデコード結果がＣＯＤＥ−３９規格及びＣＯＤＥ−１２８規格に適合しない場合にも（図７のＳ６４、Ｓ６８、Ｓ７０のいずれかでＮＯ、及び、図９のＳ１１４、Ｓ１１８、Ｓ１２２のいずれかでＮＯ）、無駄にキャラクタ部分のデコードを行わないようにすることができる。従って、本実施例のバーコード読取装置２によると、対象バーコードの規格を特定するまでの時間を短くでき、対象バーコードが表すデータのデコードに要する時間を短くすることができる。
【００９５】
図５に示すように、バーコード読取装置２は、ＥＡＮ−１３デコード処理（図６）が失敗終了した場合に（図５のＳ１２でＮＯ）、続いてＣＯＤＥ−３９デコード処理（図５のＳ１４、図７）を行う。バーコード読取装置２は、対象バーコードがＥＡＮ−１３規格に適合しない場合、対象バーコードがＣＯＤＥ−３９規格であるか否かを続いて判別することができる。さらに、バーコード読取装置２は、ＣＯＤＥ−３９デコード処理（図７）が失敗終了した場合に（図５のＳ１６でＮＯ）、続いてＣＯＤＥ―１２８デコード処理（図５のＳ１８、図９）を行う。そのため、バーコード読取装置２は、対象バーコードがＣＯＤＥ−３９規格にも適合しない場合、対象バーコードがＣＯＤＥ−１２８規格であるか否かを続いて判別することができる。従って、本実施例のバーコード読取装置２は、対象バーコードの規格を特定するまでの時間をより短くすることができる。
【００９６】
本実施例の構成と請求項の記載との対応関係を記載しておく。ＥＡＮ−１３規格のバーコード、ＣＯＤＥ−３９規格のバーコード、及び、ＣＯＤＥ−１２８規格のバーコードが「規格化された複数種類のバーコード」の一例である。ＥＡＮ−１３規格のバーコード及びＣＯＤＥ−３９規格のバーコードが「第１種類のバーコード」の一例である。対象バーコードのうち、ＥＡＮ−１３規格のバーコードにおける左右のマージン、左右のガードバー、センターバーに対応する部分、及び、対象バーコードのうち、ＣＯＤＥ−３９規格のバーコードにおける左右のマージン、スタートキャラクタ、ストップキャラクタに対応する部分が「第１部分」の一例である。対象バーコードのうち、ＥＡＮ−１３規格のバーコードにおけるデータキャラクタに対応する部分、及び、対象バーコードのうち、ＣＯＤＥ−３９規格のバーコードにおけるデータキャラクタに対応する部分が「第２部分」の一例である。ＥＡＮ−１３デコード処理（図６）及びＣＯＤＥ−３９デコード処理（図７）が「第１種のデコード処理」の一例である。対象バーコードのうち、ＥＡＮ−１３規格のバーコードにおける左右のガードバー及びセンターバーに対応する部分、及び、対象バーコードのうち、ＣＯＤＥ−３９規格のバーコードにおけるスタートキャラクタ及びストップキャラクタに対応する部分が「特定の部分」の一例である。
【００９７】
ＣＯＤＥ−３９規格のバーコード及びＣＯＤＥ−１２８規格のバーコードが「第２種類のバーコード」の一例である。対象バーコードのうち、ＣＯＤＥ−３９規格のバーコードにおける左右のマージン、スタートキャラクタ、ストップキャラクタに対応する部分、及び、対象バーコードのうち、ＣＯＤＥ−１２８規格のバーコードにおける左右のマージン、スタートキャラクタ、ストップキャラクタに対応する部分が「第３部分」の一例である。対象バーコードのうち、ＣＯＤＥ−３９規格のバーコードにおけるデータキャラクタに対応する部分、及び、対象バーコードのうち、ＣＯＤＥ−１２８規格のバーコードにおけるデータキャラクタとチェックデジットキャラクタに対応する部分が「第４部分」の一例である。ＣＯＤＥ−３９デコード処理（図７）及びＣＯＤＥ−１２８デコード処理（図９）が「第２種のデコード処理」の一例である。
【００９８】
図８のＳ９４における、左マージンからモジュール３０本（ＣＯＤＥ−３９規格の場合）が「第１の本数」の一例である。図８のＳ１０４において、右マージンのチェック位置を１０本（ＣＯＤＥ−３９規格の場合）右側に移動させた後の、左マージンとチェック位置の間のモジュール本数（例えば、４０本（３０本＋１０本））が「第２の本数」の一例である。
【００９９】
以上、本発明の実施例について詳細に説明したが、これらは例示に過ぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。例えば、以下の変形例を含んでもよい。
【０１００】
（変形例１）  上記実施例では、図５に示すように、制御部１０は、対象バーコードのデコードを、ＥＡＮ−１３デコード処理、ＣＯＤＥ−３９デコード処理、ＣＯＤＥ−１２８デコード処理の順で行っている。しかしながら、制御部１０は、各デコード処理を任意の順で行ってもよい。
【０１０１】
（変形例２）  上記実施例では、制御部１０は、ＥＡＮ−１３規格、ＣＯＤＥ−３９規格、ＣＯＤＥ−１２８規格の３種類の規格のバーコードのデコードを行うことができる。これに限らず、制御部１０は、上記の３種類の規格に加えて、ＥＡＮ−８規格、ＵＰＣ−Ａ規格、ＵＰＣ−Ｅ規格、ＮＷ−７規格、ＩＴＦ−１４規格、インターリーブド２ｏｆ５規格等、他の規格のバーコードのデコードを実行可能であってもよい。制御部１０は、上記の各規格のうち、少なくとも２種類の規格のバーコードのデコードを実行可能であればよい。
【０１０２】
（変形例３）  上記実施例では、図３に示すように、ＣＯＤＥ−３９規格のバーコードは、チェックデジットキャラクタを含んでいないが、これに限られず、ＣＯＤＥ−３９規格のバーコードがチェックデジットキャラクタを含むものであってもよい。その場合、ＣＯＤＥ−３９デコード処理において、制御部１０は、各データキャラクタのデコードの後に、チェックデジットチェックを実行してもよい。
【０１０３】
本明細書または図面に説明した技術要素は、単独であるいは各種の組み合わせによって技術的有用性を発揮するものであり、出願時請求項記載の組み合わせに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【符号の説明】
【０１０４】
２：バーコード読取装置
１０：制御部
１２：発光部
１４：受光部
１６：メモリ
１８：操作部
２０：表示部
【図１】
2015072617.tif 000003
【図２】
2015072617.tif 000004
【図３】
2015072617.tif 000005
【図４】
2015072617.tif 000006
【図５】
2015072617.tif 000007
【図６】
2015072617.tif 000008
【図７】
2015072617.tif 000009
【図８】
2015072617.tif 000010
【図９】
2015072617.tif 000011