(57)【特許請求の範囲】
【請求項１】
固定パターンを夫々有する３本の識別バー及び各識別バーに挟まれた２ブロックのデータキャラクタから構成されるバーコードであって、左ブロックは奇数パリティと偶数パリティのデータキャラクタを含み、右ブロックは偶数パリティのデータキャラクタを含むバーコードを走査して、その走査軌跡における明暗パターンを検出するとともに、この明暗パターンに基づいて前記バーコードにコード化されているデータを復調するバーコード読取装置であって、
前記３本の識別バーのうち少なくとも１本を通過する各走査軌跡における明暗パターンを夫々復調することによって複数の復調データを得る復調手段と、
前記復調手段が夫々復調することによって得られた複数の復調データを合成して、前記バーコード全体に対応する復調データを再現する復調データ合成手段と、
何れか一方の前記ブロックを夫々通過する各走査軌跡における明暗パターンを前記復調手段が夫々復調することによって得られた複数の復調データが、前記右ブロックにおいて少なくとも部分的に重複しているか否かを判定する重複判定手段と、前記重複判定手段によって重複していると判定された前記複数の復調データにおける重複部分が、互いに一致しているか否かを判定する一致判定手段と、前記一致判定手段によって前記重複部分が互いに一致していると判定された場合にのみ、前記復調データ合成手段によって再現された復調データを有効化する復調データ有効化手段とを備えたことを特徴とするバーコード読取装置。
【請求項２】
前記バーコードはＵＰＣコード，ＪＡＮコード又はＥＡＮコードであり、前記各識別バーは夫々スタートガードバー，センターバー及びエンドガードバーであることを特徴とする請求項１記載のバーコード読取装置。
【請求項３】
前記何れか一方のブロックは、前記センターバー及びエンドガードバーに挟まれているブロックであることを特徴とする請求項２記載のバーコード読取装置。
【請求項４】
前記重複判定手段は、前記復調データ合成手段が前記復調データを合成した後で前記復調手段が得た復調データ，及び、前記復調データ合成手段によって合成された何れかの復調データが、前記何れか一方のブロック内において少なくとも部分的に重複しているか否かを判定することを特徴とする請求項１記載のバーコード読取装置。
【請求項５】
前記重複判定手段は、前記復調データ合成手段によって合成された複数の復調データが、前記何れか一方のブロック内において少なくとも部分的に重複しているか否かを判定することを特徴とする請求項１記載のバーコード読取装置。
【請求項６】
前記重複判定手段は、前記複数の復調データが３キャラクタ以上重複している場合に、重複しているものとして判定することを特徴とする請求項１記載のバーコード読取装置。
【請求項７】
固定パターンを夫々有する３本の識別バー及び各識別バーに挟まれた２ブロックのデータキャラクタから構成されるバーコードであって、左ブロックは奇数パリティと偶数パリティのデータキャラクタを含み、右ブロックは偶数パリティのデータキャラクタを含むバーコードを走査して、その走査軌跡における明暗パターンを検出するとともに、この明暗パターンに基づいて前記バーコードにコード化されているデータ群を復調するバーコード読取方法であって、前記３本の識別バーのうち少なくとも１本の識別バーを通過する各走査軌跡における明暗パターンを夫々復調し、前記明暗パターンを復調することによって得られた複数の復調データを合成して、前記バーコード全体に対応する復調データを再現し、何れか一方の前記ブロックを夫々通過する各走査軌跡における明暗パターンを復調することによって得られた複数の復調データが前記右ブロックにおいて少なくとも部分的に重複しているとともに、各復調データにおける重複部分が互いに一致している場合に限り、前記バーコード全体に対応する復調データを有効化することを特徴とするバーコード読取方法。
【請求項８】
固定パターンを夫々有する３本の識別バー及び各識別バーに挟まれた２ブロックのデータキャラクタから構成されるバーコードであって、左ブロックは奇数パリティと偶数パリティのデータキャラクタを含み、右ブロックは偶数パリティのデータキャラクタを含むバーコードを走査することによって得られた明暗パターンデータが入力されるコンピュータに対して、前記３本の識別バーのうち少なくとも１本の識別バーを通過する各走査軌跡における明暗パターンデータを夫々復調させ、前記明暗パターンを復調することによって得られた複数の復調データを合成して、前記バーコード全体に対応する復調データを再現させ、何れか一方の前記ブロックを夫々通過する各走査軌跡における明暗パターンを復調することによって得られた複数の復調データが前記右ブロックにおいて少なくとも部分的に重複しているか否かを判定させ、前記複数の復調データが前記ブロック内において少なくとも部分的に重複していると判定された場合に、その重複部分が互いに一致しているか否かを判定させ、  前記重複部分が互いに一致していると判定された場合にのみ、前記バーコード全体に対応する復調データを有効化させるプログラムを格納したコンピュータ可読媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＵＰＣコード，ＥＡＮコード，ＪＡＮコードのように、両端及び中央に識別バーが配置されるとともに、各識別バーの間に２ブロックのデータキャラクタが挟まれてなるバーコードを読み取る読取装置及び読取方法，並びに、そのような読取のためのプログラムを格納するコンピュータ可読媒体に関し、特に、バーコードを部分的に読み取って得られた複数の復調データを合成してバーコード全体による復調データを再現することができる読取装置及び読取方法，並びに、そのような読取のためのプログラムを格納するコンピュータ可読媒体に関する。
【０００２】
【従来の技術】
近年、流通業等におけるＰＯＳシステムに代表されるように、商品等の管理をバーコードによって行うことが一般化している。例えば、商店のＰＯＳシステムでは、商品の種類や販売価格等の情報をバーコードのフォーマットにコード化して商品に印刷しておく。そして、レジにてこのバーコードを読み取ることによって、精算を行うとともに、商品の売り上げ数をリアルタイムで集計し、在庫管理や仕入れ管理に役立てるようにしている。
【０００３】
このようなバーコードは、ＪＡＮコード，ＵＰＣコード，ＥＡＮコード等の固定長コードと、可変長のセカンドコードに大別される。この固定長コードは、左端に付加されるスタートガードバー（ＳＧＢ），中間部に挿入されるセンターバー（ＣＢ），及び、右端に付加されるエンドガードバー（ＥＧＢ）を有し、スタートガードバーとセンターバーとの間に６キャラクタ又は４キャラクタのデータキャラクタからなる左データブロックを格納し、センターバーとエンドガードバーとの間に６キャラクタ又は４キャラクタのデータキャラクタからなる右データブロックを格納している。これら各ガードバー及びセンターバーは、予め規格によってそのパターンが定められているので、バーコードの読取装置は、これらガードバー及びセンターバーを検知することができる。
【０００４】
また、バーコード読取装置は、これらガードバー及びセンターバーを手掛かりに、バーコードのデータキャラクタ（コード化した数値又は記号の最小単位）を読み取ることができる。この読み取りの方式としては、連続読み取り，ブロック読み取り，及び、分割読み取りの３通りの方式がある。この連続読み取りとは、一回のバーコード走査によって両ガードバー及びセンターバーを検出した場合に、各バーに挟まれたデータキャラクタを、バーコードとして認識して復調する方式である。また、ブロック読み取りとは、一方のガードバーとセンターバーに囲まれたデータキャラクタのブロックのみをバーコードとして認識し、２つのブロックを夫々別個に復調した後でこれら各ブロックの復調データを合成（結合）し、一個のバーコードに対応する復調データとして再現する方式である。また、分割読み取りとは、最小限１個のガードバー又はセンターバーに連接するデータキャラクタ列であってもバーコードとして認識し、夫々別個に読み出したこれらデータキャラクタの復調データの断片を合成し、一個のバーコード全体に対応する復調データを再現する方式である。
【０００５】
上記したブロック読み取りは、バーコードの各ガードバーとセンターバーとに挟まれたデータキャラクタのみを有効とみなして周囲のデータから抽出するので、バーコード以外の部分に基づくデータ等のノイズは効率よく除去される。よって、ブロックデータの誤読の可能性が少なく、それ故、バーコード復調処理時間も短くて済む。従って、従来、ソースマーキングが困難な生鮮食料品等に対して小売店等内で付されるインストアマーキングのバーコードに関しては、誤読防止のために、連続読み取り又はブロック読み取りに基づいて同一の復調データが２回以上再現された場合にのみ、データ復調が完了したものと取り扱っていた。
【０００６】
【発明が解決しようとする課題】
しなしながら、インストアマーキングは、バーコードを印刷した紙製ラベルを商品の表面又は商品の包装に貼り付けることによって行われるので、バーコード読み取り時において商品又は商品の包装の皺等に因りバーコードが歪んでしまう場合が多い。従って、１度のバーコード走査でブロックデータを復調できる可能性は少ない。その結果、ブロック読み取りに基づいて同一の復調データが２回以上再現され終わるまでには、長時間を要してしまっていた。
【０００７】
この問題を解決するために、単純に、ブロック読み取りによってバーコード全体に対応する復調データが１回再現された場合に直ちにデータ復調が完了したものと取り扱うことも、考えられる。しかしながら、そのような解決方法では、以下に説明するような右ブロックの逆読みに因る誤読を排除できない。
【０００８】
つまり、上述の固定長コードでは、図１５に示すように、センターバー（ＣＢ）が白黒白黒白の５モジュールで構成される一方、エンドガードバー（ＥＧＢ）は黒白黒の３モジュールで構成される。そのため、図１５に示すように、エンドマージンが１モジュール分しか無い場合に、走査ビームが左ブロックの第６キャラクタ（Ｃ６）に掛かることなくセンターバー（ＣＢ）からバーコードを走査し始める（若しくは、センターバー（ＣＢ）にてバーコードを走査し終わる）と、エンドマージン〔白〕＋エンドガードバー〔黒白黒〕＋第１２キャラクタの７モジュール目（白）がセンターバー〔白黒白黒白〕と同じパターンとなり、センターバーの２モジュール目乃至４モジュール目〔黒白黒〕がエンドガードバー〔黒白黒〕と同じパターンとなってしまう。しかも、図１６又は図１７に示す場合のように、第７モジュールが１モジュールのみで白バーを構成する様なデータキャラクタ（Ｅ−０，Ｅ−１，Ｅ−５）のみから右ブロックが構成されている場合には、各データキャラクタ間の境を６モジュール目と７モジュール目との間にずらして逆から読んでも、見かけ上、１ブロック分のデータキャラクタ列を構成してしまう（但し、Ｅ−０とＥ−５とが互いに入れ替わってしまう）。従って、復調装置は、バー幅データの外見に基づいて走査のなされた方向を区別することができないので、ある方向に走査がなされたことによって生じたバー幅データ群を、その走査がなされた方向とは逆の方向に走査がなされたことによって生じたバー幅データとして復調してしまう可能性がある。この場合、上述したように、Ｅ−０とＥ−５とが入れ替わるので、復調された復調データは本来のものとは全く違ったものとなってしまう。これが、右ブロックの逆読みに因る誤読である。なお、センターバー（ＣＢ）とガードバー（ＳＧＢ）との入れ替わりは左ブロックでも生じうるが、左ブロックにおいては、右ブロックが偶数パリティのデータキャラクタから構成されているのと異なり、奇数パリティのデータキャラクタも含まれ、しかも、偶数パリティのデータキャラクタと奇数パリティのデータキャラクタとの配列が規約により所定の配列に制限されているので、逆読みに因る誤読は生じない。
【０００９】
本発明は、以上のような問題に鑑みてなされたものであり、一旦ブロック読み取り又は分割読み取りによって得られた復調データに基づいてバーコード全体に対応する復調データが再現された際には、右ブロックについてのみ、複数の復調データが重複しているかどうかをチェックすることにより、右ブロックの逆読みに因る誤読を生じることなく短時間で復調を完了させることができるバーコード読取装置及びバーコード読取方法，並びに、そのような読取のためのプログラムを格納するコンピュータ可読媒体の提供を、課題とする。
【００１０】
【課題を解決するための手段】
本発明は、上記課題を解決するため、下記の手段を採用した。
即ち、請求項１記載の発明は、図１の原理図に示した通り、固定パターンを夫々有する３本の識別バー及び各識別バーに挟まれた２ブロックのデータキャラクタから構成されるバーコードＢを走査して、その走査軌跡における明暗パターンを検出するとともに、この明暗パターンに基づいて前記バーコードＢにコード化されているデータを復調するバーコード読取装置であって、前記３本の識別バーのうち少なくとも１本を通過する各走査軌跡における明暗パターンを夫々復調することによって複数の復調データを得る復調手段１００と、前記復調手段１００によって得られた複数の復調データを合成して、前記バーコードＢ全体に対応する復調データを再現する復調データ合成手段１０１と、何れか一方の前記ブロックを夫々通過する各走査軌跡における明暗パターンを前記復調手段１００が夫々復調することによって得られた複数の復調データが、そのブロック内において少なくとも部分的に重複しているか否かを判定する重複判定手段１０３と、前記重複判定手段１０３によって重複していると判定された前記複数の復調データにおける重複部分が、互いに一致しているか否かを判定する一致判定手段１０４と、前記一致判定手段１０４によって前記重複部分が互いに一致していると判定された場合にのみ、前記復調データ合成手段１０１によって再現された復調データを有効化する復調データ有効化手段１０２とを備えたことを特徴とする。
【００１１】
以上のように構成されると、復調手段は、前記３本の識別バーのうち少なくとも１本を通過する各走査軌跡における明暗パターンを夫々復調することによって、複数の復調データを得る。復調データ合成手段は、これら複数の復調データを合成することによって、前記バーコード全体に対応する復調データを再現する。一方、重複判定手段は、何れか一方の前記ブロックを夫々通過する各走査軌跡における明暗パターンに基づいて得られた複数の復調データが、そのブロック内において少なくとも部分的に重複しているか否かを、判定する。この判定の結果、互いに重複していると判定された場合には、一致判定手段は、各復調データにおける重複部分が互いに一致しているか否かを、判定する。この判定の結果、各復調データにおける復調部分が互いに一致していると判定された場合にのみ、復調データ有効化手段は、復調データ合成手段によって再現された復調データを有効化する。このようにバーコード全体に対応する復調データが複数回にわたって再現されなくても、特定のブロックを読み取って得られた複数の復調データが少なくとも部分的に互いに一致していさえすれば、一旦合成された復調データが有効化される。従って、バーコード全体に対応する復調データの再現が、再現結果の信頼度を落とすことなく、短時間で完了する。
【００１２】
本発明のバーコード読取装置によって読み取られるバーコードとしては、例えば、ＵＰＣコード，ＪＡＮコード，ＥＡＮコード，等の固定長コードが、例示される。
【００１３】
重複判定手段は、復調データ合成手段がバーコード全体に対応する復調データを再現するために合成した複数の復調データに関して、前記ブロック内において重複しているかどうかの判定を行っても良いし、復調データ合成手段がバーコード全体に対応する復調データを再現するために合成した復調データの何れか一つ，及び、その合成後に得られた復調データに関して、前記ブロック内において重複しているかどうかの判定を行っても良い。また、重複判定手段は、重複部分が１キャラクタ以上あった全ての場合において重複しているとの判定を行っても良いし、重複部分が複数個あった場合のみ重複しているとの判定を行っても良い。
【００１４】
請求項２記載の発明は、請求項１のバーコードがＵＰＣコード，ＪＡＮコード又はＥＡＮコードであり、前記各識別バーが夫々スタートガードバー，センターバー及びエンドガードバーであることで、特定したものである。
【００１５】
請求項３記載の発明は、請求項２における何れか一方のブロックが、前記センターバー及びエンドガードバーに挟まれているブロックであることで、特定したものである。
【００１６】
請求項４記載の発明は、請求項１の重複判定手段が、前記復調データ合成手段が前記復調データを合成した後において前記復調手段が得た復調データ，及び、前記復調データ合成手段によって合成された何れかの復調データが前記何れか一方のブロック内において少なくとも部分的に重複しているか否かを判定することで、特定したものである。
【００１７】
請求項５記載の発明は、請求項１の重複判定手段が、前記復調データ合成手段によって合成された複数の復調データが、前記何れか一方のブロック内において少なくとも部分的に重複しているか否かを判定することで、特定したものである。
【００１８】
請求項６記載の発明は、請求項１の重複判定手段が、前記複数の復調データが３キャラクタ以上重複している場合に、重複しているものとして判定することで、特定したものである。
【００１９】
請求項７記載の発明は、固定パターンを夫々有する３本の識別バー及び各識別バーに挟まれた２ブロックのデータキャラクタから構成されるバーコードを走査して、その走査軌跡における明暗パターンを検出するとともに、この明暗パターンに基づいて前記バーコードにコード化されているデータ群を復調するバーコード読取方法であって、前記３本の識別バーのうち少なくとも１本の識別バーを通過する各走査軌跡における明暗パターンを夫々復調し、前記明暗パターンを復調することによって得られた複数の復調データを合成して、前記バーコード全体に対応する復調データを再現し、何れか一方の前記ブロックを夫々通過する各走査軌跡における明暗パターンを復調することによって得られた複数の復調データがそのブロック内において少なくとも部分的に重複しているとともに、各復調データにおける重複部分が互いに一致している場合に限り、前記バーコード全体に対応する復調データを有効化することを特徴とする。
【００２０】
請求項８記載の発明は、固定パターンを夫々有する３本の識別バー及び各識別バーに挟まれた２ブロックのデータキャラクタから構成されるバーコードを走査することによって得られた明暗パターンデータが入力されるコンピュータに対して、前記３本の識別バーのうち少なくとも１本の識別バーを通過する各走査軌跡における明暗パターンデータを夫々復調させ、前記明暗パターンを復調することによって得られた複数の復調データを合成して、前記バーコード全体に対応する復調データを再現させ、何れか一方の前記ブロックを夫々通過する各走査軌跡における明暗パターンを復調することによって得られた複数の復調データがそのブロック内において少なくとも部分的に重複しているか否かを判定させ、前記複数の復調データが前記ブロック内において少なくとも部分的に重複していると判定された場合に、その重複部分が互いに一致しているか否かを判定させ、前記重複部分が互いに一致していると判定された場合にのみ、前記バーコード全体に対応する復調データを有効化させるプログラムを格納したコンピュータ可読媒体である。
【００２１】
【発明の実施の形態】
以下、図面に基づいて、本発明の実施の態様の説明を行う。
図２は、本発明によるバーコード読取装置の実施の形態の概略構成を示すブロック図である。本実施形態によるバーコード読取装置は、ＵＰＣコードのフォーマットに従って商品２０に関するデータをコード化したバーコード２１（即ち、固定パターンを夫々有する３本の識別バー及び各識別バーに挟まれた２ブロックのデータキャラクタから構成されるバーコード）を読み取る装置である。
（全体構成）
図２において、バーコード読取装置は、互いにバスＢによって接続されたＣＰＵ１，バー幅データ群格納バッファ２，制御部回路３，インタフェース回路４，ＲＯＭ５，復調データ一時待避バッファ６，及び復調データ格納バッファ７，バー幅データ群格納バッファ２に接続されたバー幅カウンタ１６及びレーザービームの開始終了検出器１７，バー幅カウンタ１６に接続されたクロック１９及びＡ／Ｄ変換器１５，このＡ／Ｄ変換器１５に接続された受光素子１８，制御部回路３に夫々接続されたモータ駆動回路８，レーザ駆動回路９，スピーカ１０及びＬＥＤ１１，モータ駆動回路８に接続されたモータ１２，このモータ１２によって駆動される走査光学系１４，並びに、レーザ駆動回路９に接続された半導体レーザ１３から、構成されている。
【００２２】
ＲＯＭ５は、バーコード認識／復調処理プログラムを格納しているコンピュータ可読媒体としての読み出し専用メモリである。
コンピュータであるＣＰＵ１は、ＲＯＭ５内に格納されているバーコード認識／復調処理プログラムを実行することにより、バーコード読取装置全体の制御を行うとともに、復調手段，復調データ合成手段，重複判定手段，一致判定手段，及び復調データ有効化手段として機能して、バーコード２１を読み取って得られたバー幅データ群を復調する。
【００２３】
インタフェース回路４は、バスＢのステータスを制御したり、外部装置へのデータ送信等を制御する回路である。
制御部回路３は、モータ駆動回路８，レーザ駆動回路９，スピーカ１０，及び発光ダイオード（ＬＥＤ）１１を制御する回路である。このモータ駆動回路８は、モータ１２を駆動して、走査光学系１４を構成する図示せぬポリゴンミラーを回転させる。また、レーザ駆動回路９は、半導体レーザ１３を駆動して、レーザビームＬを出射させる。また、スピーカ１０は、バーコードの読取（復調）完了を示す音声を発する。また、発光ダイオード１１は、バーコードの復調の結果得られた商品２０の販売価格等の情報を表示する表示素子である。
【００２４】
半導体レーザ１３から出射されたレーザビームＬは、走査光学系１４に入射されて、この走査光学系１４によって偏向される。即ち、この走査光学系１４は、モータ１２によって回転される図示せぬポリゴンミラーによってレーザビームＬを一方向に偏向する。このポリゴンミラーの反射側には、複数の固定ミラーが固定されている。従って、ポリゴンミラーによって偏向されたレーザビームＬは、各固定ミラーによって再度反射され、その偏向方向（走査方向）が様々な方向に変えられる。この走査光学系１４によると、ポリゴンミラーの一反射面による偏向周期内で、複数の方向へのレーザビーム走査が連続的に高速で行われる。このポリゴンミラーの一反射面による偏向周期内でなされる複数のレーザビーム走査の夫々を、以下、「一走査」という。
【００２５】
このようにして走査されたレーザビームＬが商品２０の表面（バーコード２１を含む）に当たると、この表面においてレーザビームＬが乱反射され、その反射光Ｒの一部が受光素子（ホトダイオード）１８に受光される。Ａ／Ｄ変換器１５は、この受光素子１８によって受光された反射光Ｒの明暗を示す電流値を、所定のしきい値と比較して、二値化信号に変換する。この二値化信号は、反射光Ｒの強度がバーコード２１中の黒バーの反射率に対応する場合には“Ｈ”を示し、反射光Ｒの強度がバーコード２１中の白バーの反射率に対応する場合には“Ｌ”を示す。
【００２６】
バー幅カウンタ１６は、Ａ／Ｄ変換器１５から入力された二値化信号に基づいて、二値化信号の立ち上がりタイミングから立ち下がりタイミングまでの時間（バーコード２１中の黒バーの幅に対応するものと期待される），及び、二値化信号の立ち下がりタイミングから立ち上がりタイミングまでの時間（バーコード２１中の白バーの幅に対応するものと期待される）を測定する。なお、バー幅カウンタ１６は、これらバー幅に対応する時間を計測するためにクロック１９からのクロック数をカウントする。バー幅カウンタ１６から出力される各バーの読取データは、このカウント値と白又は黒を示す色識別信号とを組み合わせた形態であり、レーザービームの一走査毎に、このような読取データが連続的に出力される。このように連続的に出力される一走査毎の読取データを「バー幅データ群」という。
【００２７】
バー幅カウンタ１６から出力されたバー幅データ群は、レーザビーム開始終了検出回路１７に入力される。このレーザビーム開始終了検出回路１７は、バー幅データ群の状態を検査し、一走査中におけるレーザビームの走査開始時点及び走査終了時点を検出して、これら開始時点及び終了時点を示す情報をバー幅データ群に付加する。
【００２８】
レーザビームの走査開始時点及び走査終了時点を示す情報が付加されたバー幅データ群は、バー幅データ群格納バッファ２に一時格納される。このバー幅データ群格納バッファ２は、バー幅カウンタ１６から入力されたバー幅データ群を順次格納するとともに、ＣＰＵ１からの求めに応じて、格納した順に一個づつこのバー幅データ群をＣＰＵ１に渡す。
【００２９】
復調データ一時待避バッファ６は、バー幅データ群に対する復調処理の結果得られた復調データを一時的に格納するメモリである。また、復調データ格納バッファ７は、合成の完了したバーコードに対応する復調データを格納するメモリである。なお、この復調データ格納バッファ７内に格納されている復調データには、後述するモジュラス１０チェックの結果がＯＫとなった復調データ（モジュラス１０−ＯＫデータ）であるか否かを示すモジュラス１０−ＯＫフラグが付される。
（バー幅データ群）
次に、バー幅データ群格納バッファ２に格納されるバー幅データ群を、図１１乃至図１４を参照して説明する。図１１乃至図１４に示す各横線は、レーザビームＬの走査軌跡を示す。
【００３０】
これら矢印のうち、図１１のＡ及びＣ，図１２のＡ及びＣ，並びに、図１４のＡは、識別バーとしてのスタートガードバー（ＳＧＢ），センターバー（ＣＢ），及びエンドガードバー（ＲＧＢ）のうちの一つのみを通過する軌跡であるので、これら軌跡に沿ったレーザビームＬの走査によって読み出されたバー幅データ群は、識別バーを１本通過する走査軌跡における明暗パターンであり、分割読み取りによるバー幅データ群となる。
【００３１】
また、図１３のＡは、スタートガードバー（ＳＧＢ）及びセンターバー（ＣＢ）を含め左ブロックの全キャラクタを通過する軌跡であり、図１１のＢ，図１２のＢ，図１３のＢ，及び図１４のＣは、センターバー（ＣＢ）及びエンドガードバー（ＥＧＢ）を含め右ブロックの全キャラクタを通過する軌跡である。従って、読み出されたバー幅データ群は、識別バーを２本通過する走査軌跡における明暗パターンであり、ブロック読み取りによるバー幅データ群となる。
【００３２】
また、図示はしていないが、スタートガードバー（ＳＧＢ），センターバー（ＣＢ），及びエンドガードバー（ＥＧＢ）の全てを通過する軌跡によれば、読み出されたバー幅データ群は、全てのデータキャラクタを連続的に読み取ったものとなる。即ち、このようなバー幅データ群は、識別バーを３本通過する走査軌跡における明暗パターンであり、連続読み取りによるバー幅データ群となる。
（復調アルゴリズム）
次に、ＵＰＣコードを復調するための一般的アルゴリズムの概略を説明する。ＵＰＣコードの各データキャラクタは、図８に示すように、７個のモジュール（各モジュールは単位長を有する）の夫々を適宜白又は黒に割り振って２本の白バーと２本の黒バーの組み合わせとして構成したものである。ＣＰＵ１の復調部は、各キャラクタの末尾の黒バー（Ｂ１）とその直前の白バー（Ｂ２）とを合わせた長さ（Ｔ１モジュール）と、この白バー（Ｂ２）とその直前の黒バー（Ｂ３）とを合わせた長さ（Ｔ２モジュール）とを、算出する。これらＴ１モジュール及びＴ２モジュールは、「δディスタンス」と呼ばれる。なお、以上の各バーの配列は、左ブロック中のデータキャラクタにおけるものであり、右ブロック中のデータキャラクタにおいては、白バーと黒バーの配列が全く逆となる。
【００３３】
ＣＰＵ１の復調部は、これらＴ１モジュールびＴ２モジュールの各々のモジュール数に基づいて、図９に示す距離復調テーブルを参照し、対応するコードデータを読み出すのである。なお、図９に示す各コードデータの「Ｅ−」は偶数パリティのキャラクタであることを示し、「Ｏ−」は奇数パリティのキャラクタであることを示す。
【００３４】
なお、図９に示す距離復調テーブルでは、Ｔ１モジュール及びＴ２モジュールのモジュール数が３又は４である場合には、対応するコードデータが２種類づつあり、これらのうちの何れであるかを特定することができない。その場合には、最も右側のバー（Ｂ１）のモジュール数と２番目のバー（Ｂ３）のモジュール数とに基づいて図１０に示すバー幅復調テーブルを参照して、何れのコードデータに対応するかを特定するのである。例えば、図８に示すキャラクタＡ及びキャラクタＢは、図９に示す距離復調テーブルを参照することによって、何れも“Ｏ２”又は“Ｏ８”に対応すると判断されるが、さらに、図１０に示すバー幅復調テーブルを参照することによって、キャラクタＡが“Ｏ２”に対応してキャラクタＢが“Ｏ８”に対応すると特定される。
（バーコード認識／復調処理）
次に、ＣＰＵ１において実際に実行されるバーコード認識／復調処理プログラムの具体的内容を、図３乃至図７のフローチャートに基づいて説明する。このバーコード認識／復調処理は、連続読み取り（一回の走査によって両ガードバー間の全データキャラクタを連続的に読み出すこと）によってバーコード全体に対応する復調データが得られた時，若しくは、ブロック読み取り又は分割読み取りによって読み取られたバー幅データ群に基づいてバーコード全体に対応する復調データが得られたとともに各バー幅データ群が右ブロックにおいて３キャラクタ以上重複した時に、読み取りが成功したとするものである。
【００３５】
このバーコード認識／復調処理のメインルーチンである図３のフローは、バーコード読取装置に主電源が投入され、バー幅データ群格納バッファ２にバー幅データ群が格納されることによりスタートする。そして、最初のＳ００１において、ＣＰＵ１は、データ復調処理を実行する（復調手段に相当）。図４乃至図６は、このＳ００１にて実行されるデータ復調処理サブルーチンを示すフローチャートである。このサブルーチンに入って最初のＳ１０１では、ＣＰＵ１は、バー幅データ群格納バッファ２から最も古いバー幅データ群を取り出し、このバー幅データ群がスタートガードバー（ＳＧＢ）を含んでいるかどうかをチェックする。そして、スタートガードバーを含んでいる場合には、処理をＳ１０２に進める。Ｓ１０２乃至Ｓ１３５の処理は、スタートガードバーを起点に、復調できる箇所までキャラクタを復調するための処理である。
【００３６】
Ｓ１０２では、ＣＰＵ１は、第１キャラクタ（スタートバーのセンターバー側に隣接するキャラクタ）の長さをチェックする。即ち、第１キャラクタを構成する４個のバーのバー幅カウント値の総計が一定値近傍内にあるかどうかをチェックする。そして、第１キャラクタ長が一定値近傍内にない場合には（Ｓ１０３）、処理対象のバー幅データ群がバーコード以外の模様に基づくデータ群であるとみなして、Ｓ１３６において「復調完了フラグ」をリセットし、このサブルーチンを終了する。これに対して、第１キャラクタ長が一定値近傍内にある場合には（Ｓ１０３）、処理をＳ１０４に進める。
【００３７】
Ｓ１０４では、ＣＰＵ１は、隣接キャラクタ（初期においては第１キャラクタに隣接する第２キャラクタ）の長さをチェックする。そして、このキャラクタの長さが一定値近傍内にない場合には（Ｓ１０５）、これまでにキャラクタ長が一定値近傍内であったとチェックされた第１ブロックのキャラクタに対する復調を行うべく、処理をＳ１０９に進める。これに対して、このキャラクタの長さが一定値近傍内にある場合には（Ｓ１０５）、ＣＰＵ１は、Ｓ１０６において、歪み量が大か否かをチェックする。そして、歪み量が小である場合には、ＣＰＵ１は、処理をそのままＳ１０８に進めるが、歪み量が大である場合（即ち、各キャラクタ相互の比が一定範囲を超えた場合，及び、各モジュール相互の比が一定範囲を超えた場合）には、Ｓ１０７において「歪みありフラグ」をセットしてから処理をＳ１０８に進める。Ｓ１０８では、ＣＰＵ１は、第６キャラクタ（センターバーのスタートバー側に隣接するキャラクタ）までキャラクタ長のチェックを終了したかどうかをチェックする。そして、第６キャラクタまでキャラクタ長のチェックを終了した場合には、第１ブロックをなす６個のキャラクタの復調をすべく、処理をＳ１０９に進める。これに対して、未だ第６キャラクタまでのキャラクタ長のチェックを終了していない場合には、ＣＰＵ１は、隣接する次のキャラクタのキャラクタ長をチェックすべく、処理をＳ１０４に戻す。
【００３８】
Ｓ１０９では、ＣＰＵ１は、Ｓ１０３及びＳ１０５において一定値近傍内にあると判定されたキャラクタのうちから最もスタートガードバーに近いものを取り出して、このキャラクタに対して復調処理を実行する。即ち、取り出したキャラクタに対して上述した復調アルゴリズムを実施し、対応するコードデータを特定し、特定したコードデータを順次復調データ一次待避バッファ６に書き込む。
【００３９】
次のＳ１１０では、ＣＰＵ１は、Ｓ１０９での復調処理が成功したかどうかをチェックする。そして、復調処理が成功しなかった場合には、このサブルーチンを終了すべく処理をＳ１３５に進め、復調処理が成功した場合には処理をＳ１１１に進める。Ｓ１１１では、ＣＰＵ１は、歪み量が大か否かをチェックする。そして、歪み量が小である場合には処理をそのままＳ１１３に進めるが、歪み量が大である場合には、Ｓ１１２において「歪みありフラグ」をセットしてから処理をＳ１１３に進める。Ｓ１１３では、ＣＰＵ１は、Ｓ１０３及びＳ１０５のキャラクタ長チェックにおいて一定値近傍内にあると判定された全キャラクタの個数分の復調処理が完了したか否かをチェックする。そして、未だ全個数分の復調処理が完了していない場合には、隣接する次のキャラクタに対する復調処理を実行すべく、処理をＳ１０９に戻す。これに対して、全個数分の復調処理が完了している場合には、ＣＰＵ１は、処理をＳ１１４に進める。
【００４０】
Ｓ１１４では、Ｓ１０９での復調処理によって復調できたキャラクタ数が６キャラクタであるかどうかをチェックする。そして、６キャラクタ未満である場合には、処理対象のバー幅データ群が分割読み取りのデータ群でしかありえないので、このサブルーチンを終了すべく、処理をＳ１３５に進める。これに対して、復調できたキャラクタ数が６キャラクタである場合には、処理をＳ１１５に進める。
【００４１】
Ｓ１１５では、第６キャラクタの長さを改めてチェックする。そして、この第６キャラクタの長さが一定値近傍内にない場合には（Ｓ１１６）、処理をＳ１３５に進め、このキャラクタの長さが一定値近傍内にある場合には（Ｓ１１６）、Ｓ１１７においてセンターバーのチェックを行う。このセンターバーのチェックとは、第６キャラクタの次の隣接するキャラクタがセンターバーとして定められている所定のパターンと一致しているか否かのチェックである。そして、センターバーのチェック結果が良好である場合には（Ｓ１１８）、ＣＰＵ１は、処理をＳ１１９に進める。これに対して、チェック結果が良好でない場合には（Ｓ１１８）、ＣＰＵ１は、処理対象のバー幅データ群が分割読み取りのデータ群であるとして、このサブルーチンを終了すべく処理をＳ１３５に進める。
【００４２】
Ｓ１１９では、ＣＰＵ１は、第７キャラクタ（センターバーのエンドバー側に隣接するキャラクタ）の長さをチェックする。そして、第７キャラクタの長さが一定値近傍内にない場合には（Ｓ１２０）、処理対象のバー幅データ群が連続読み取りのデータ群ではないため、このサブルーチンを終了すべく処理をＳ１３５に進める。これに対して、第７キャラクタの長さが一定値近傍内にある場合には（Ｓ１２０）、ＣＰＵ１は、処理をＳ１２１に進める。
【００４３】
Ｓ１２１では、ＣＰＵ１は、隣接キャラクタ（初期においては第７キャラクタに隣接する第８キャラクタ）の長さをチェックする。そして、このキャラクタの長さが一定値近傍内にない場合には（Ｓ１２２）、処理対象のバー幅データ群が連続読み取りのデータ群ではないため、このサブルーチンを終了すべく処理をＳ１３５に進める。これに対して、このキャラクタの長さが一定値近傍内にある場合には（Ｓ１２２）、ＣＰＵ１は、Ｓ１２３において、歪み量が大か否かをチェックする。そして、歪み量が小である場合には処理をそのままＳ１２５に進めるが、歪み量が大である場合には、Ｓ１２４において「歪みありフラグ」をセットしてから処理をＳ１２５に進める。Ｓ１２５では、ＣＰＵ１は、第１２キャラクタ（エンドガードバーのセンターバー側に隣接するキャラクタ）までキャラクタ長のチェックを終了したかどうかをチェックする。そして、第１２キャラクタまでキャラクタ長のチェックを終了した場合には、第２ブロックをなす６個のキャラクタの復調をすべく、処理をＳ１２６に進める。これに対して、未だ第１２キャラクタまでのキャラクタ長のチェックを終了していない場合には、ＣＰＵ１は、隣接する次のキャラクタのキャラクタ長をチェックすべく、処理をＳ１２１に戻す。
【００４４】
Ｓ１２６では、ＣＰＵ１は、Ｓ１２０及びＳ１２２において一定値近傍内にあると判定されたキャラクタのうちから最もセンターバーに近いものを取り出して、このキャラクタに対する復調処理を、Ｓ１０９と同様に実行する。次のＳ１２７では、ＣＰＵ１は、Ｓ１２６での復調処理が成功したかどうかをチェックする。そして、復調処理が成功しなかった場合には、ＣＰＵ１は、このサブルーチンを終了すべく処理をＳ１３５に進め、復調処理が成功した場合には処理をＳ１２８に進める。Ｓ１２８では、ＣＰＵ１は、歪み量が大か否かをチェックする。そして、歪み量が小である場合には処理をそのままＳ１３０に進めるが、歪み量が大である場合には、Ｓ１２９において「歪みありフラグ」をセットしてから処理をＳ１３０に進める。Ｓ１３０では、ＣＰＵ１は、Ｓ１２０及びＳ１２２のキャラクタ長チェックにおいてその長さが一定値近傍内にあると判定されたキャラクタの個数分の復調処理が完了したか否かをチェックする。そして、未だ全個数分の復調処理が完了していない場合には、次の隣接するキャラクタに対する復調処理を実行すべく、処理をＳ１２６に戻す。これに対して、全個数分の復調処理が完了している場合には、ＣＰＵ１は、処理をＳ１３１に進める。
Ｓ１３１では、ＣＰＵ１は、第１２キャラクタの長さを改めてチェックする。そして、この第１２キャラクタの長さが一定値近傍内にない場合には（Ｓ１３２）、処理をＳ１３５に進め、このキャラクタの長さが一定値近傍内にある場合には（Ｓ１３２）、Ｓ１３３においてエンドガードバーのチェックを行う。このエンドガードバーのチェックとは、第１２キャラクタの次の隣接するキャラクタがエンドガードバーとして定められている所定のパターンと一致しているか否かのチェックである。そして、エンドガードバーのチェック結果が良好である場合には（Ｓ１３４）、ＣＰＵ１は、処理対象のバー幅データ群が連続読み取りのデータ群であるとして、処理をＳ１３５に進める。これに対して、チェック結果が良好でない場合には（Ｓ１３４）、処理対象のバー幅データ群が少なくともブロック読みのデータ群であるとして、このサブルーチンを終了すべく処理をＳ１３５に進める。
【００４５】
Ｓ１３５では、ＣＰＵ１は、Ｓ１０９及びＳ１２６にて復調完了したデータがスタートガードバー及び３個以上のキャラクタを含んでいるか否かを、チェックする。そして、スタートガードバー及び３個以上のキャラクタを含んでいる場合には、処理対象のバー幅データ群が少なくとも分割読み取りのデータ群であると認められるので、ＣＰＵ１は、Ｓ１３７にて「復調完了フラグ」をセットして、このサブルーチンを終了する。これに対して、スタートガードバー及び３個以上のキャラクタを含んでいない場合には、データの信頼性が低いので、ＣＰＵ１は、Ｓ１３６にて「復調完了フラグ」をリセットして、このサブルーチンを終了する。
【００４６】
一方、Ｓ００１にて処理対象のバー幅データ群がスタートガードバーを含んでいないと判定した場合には、処理対象のバー幅データ群が連続読み取りのデータ群である可能性はないので、ＣＰＵ１は、処理をＳ１３８に進める。このＳ１３８では、このバー幅データ群がセンターバーを含んでいるかどうかをチェックする。そして、センターバーを含んでいる場合には、ＣＰＵ１は、処理をＳ１３９に進める。Ｓ１３９乃至Ｓ１６９の処理は、センターバーを中心として両側方向に、復調できる箇所までキャラクタを復調するための処理である。
【００４７】
Ｓ１３９では、ＣＰＵ１は、第６キャラクタ及び第７キャラクタの長さをチェックする。そして、第６キャラクタの長さ及び第７キャラクタの長さの何れもが一定値近傍内にない場合には（Ｓ１４０）、ＣＰＵ１は、処理対象のバー幅データ群がバーコード以外の模様に基づくデータ群であるとみなして、Ｓ１３６において「復調完了フラグ」をリセットし、このサブルーチンを終了する。これに対して、第６キャラクタの長さ及び第７キャラクタの長さの何れかが一定値近傍内にある場合には（Ｓ１４０）、ＣＰＵ１は、処理をＳ１４１に進める。
【００４８】
Ｓ１４１では、ＣＰＵ１は、エンドガードバー側の隣接キャラクタ（初期においては第７キャラクタ）の長さをチェックする。そして、このキャラクタの長さが一定値近傍内にない場合には（Ｓ１４２）、ＣＰＵ１は、これまでにキャラクタ長が一定値近傍内であったとチェックされた第２データブロックのキャラクタに対する復調を行うべく、処理をＳ１４６に進める。これに対して、このキャラクタの長さが一定値近傍内にある場合には（Ｓ１４２）、ＣＰＵ１は、Ｓ１４３において、歪み量が大か否かをチェックする。そして、歪み量が小である場合には処理をそのままＳ１４５に進めるが、歪み量が大である場合には、Ｓ１４４において「歪みありフラグ」をセットしてから処理をＳ１４５に進める。Ｓ１４５では、ＣＰＵ１は、第２データブロックをなす６キャラクタ分のキャラクタ長のチェックを終了したかどうかをチェックする。そして、６キャラクタ分のキャラクタ長のチェックを終了した場合には、これら６個のキャラクタの復調をすべく、処理をＳ１４６に進める。これに対して、未だ６キャラクタ分のキャラクタ長のチェックを終了していない場合には、隣接する次のキャラクタのキャラクタ長をチェックすべく、処理をＳ１４１に戻す。
【００４９】
Ｓ１４６では、ＣＰＵ１は、Ｓ１４２において一定値近傍内にあると判定されたキャラクタのうちから最もセンターバーに近いものを取り出して、このキャラクタに対する復調処理を、Ｓ１０９と同様に実行する。次のＳ１４７では、ＣＰＵ１は、Ｓ１４６での復調処理が成功したかどうかをチェックする。そして、復調処理が成功しなかった場合には、そのまま処理をＳ１５１に進め、復調処理が成功した場合には処理をＳ１４８に進める。Ｓ１４８では、ＣＰＵ１は、歪み量が大か否かをチェックする。そして、歪み量が小である場合には処理をそのままＳ１５０に進めるが、歪み量が大である場合には、Ｓ１４９において「歪みありフラグ」をセットしてから処理をＳ１５０に進める。Ｓ１５０では、ＣＰＵ１は、Ｓ１４２のキャラクタ長チェックにおいて一定値近傍内にあると判定されたキャラクタの個数分の復調処理が完了したか否かをチェックする。そして、未だ全個数分の復調処理が完了していない場合には、ＣＰＵ１は、隣接する次のキャラクタに対する復調処理を実行すべく、処理をＳ１４６に戻す。これに対して、全個数分の復調処理が完了している場合には、ＣＰＵ１は、処理をＳ１５１に進める。
【００５０】
Ｓ１５１では、ＣＰＵ１は、Ｓ１４６での復調処理によって復調できたキャラクタ数が６キャラクタであるかどうかをチェックする。そして、６キャラクタ未満である場合には、ＣＰＵ１は、第１データブロックに含まれるキャラクタの復調をすべく、処理をＳ１５４に進める。これに対して、復調できたキャラクタ数が６キャラクタである場合には、ＣＰＵ１は、処理をＳ１５２に進める。
【００５１】
Ｓ１５２では、ＣＰＵ１は、第１２キャラクタの長さを改めてチェックするとともに、エンドガードバーのチェックを行う。そして、何れの場合であっても（Ｓ１５３）、ＣＰＵ１は、第１データブロックに含まれるキャラクタを復調すべく、処理をＳ１５４に進める。
【００５２】
Ｓ１５４では、ＣＰＵ１は、スタートガードバー側の隣接キャラクタ（初期においては第６キャラクタ）の長さをチェックする。そして、このキャラクタの長さが一定値近傍内にない場合には（Ｓ１５５）、ＣＰＵ１は、これまでにキャラクタ長が一定値近傍内であったとチェックされた第１データブロックのキャラクタに対する復調を行うべく、処理をＳ１５９に進める。これに対して、このキャラクタの長さが一定値近傍内にある場合には（Ｓ１５５）、ＣＰＵ１は、Ｓ１５６において、歪み量が大か否かをチェックする。そして、歪み量が小である場合には処理をそのままＳ１５８に進めるが、歪み量が大である場合には、Ｓ１５７において「歪みありフラグ」をセットしてから処理をＳ１５８に進める。Ｓ１５８では、ＣＰＵ１は、第１データブロックをなす６キャラクタ分のキャラクタ長のチェックを終了したかどうかをチェックする。そして、６キャラクタ分のキャラクタ長のチェックを終了した場合には、ＣＰＵ１は、これら６個のキャラクタの復調をすべく、処理をＳ１５９に進める。これに対して、未だ６キャラクタ分のキャラクタ長のチェックを終了していない場合には、ＣＰＵ１は、隣接する次のキャラクタのキャラクタ長をチェックすべく、処理をＳ１５４に戻す。
【００５３】
Ｓ１５９では、ＣＰＵ１は、Ｓ１５５において一定値近傍内にあると判定されたキャラクタのうちから最もセンターバーに近いものを取り出して、このキャラクタに対する復調処理を、Ｓ１０９と同様に実行する。次のＳ１６０では、ＣＰＵ１は、Ｓ１５９での復調処理が成功したかどうかをチェックする。そして、復調処理が成功しなかった場合には、そのまま処理をＳ１６４に進め、復調処理が成功した場合には処理をＳ１６１に進める。Ｓ１６１では、ＣＰＵ１は、歪み量が大か否かをチェックする。そして、歪み量が小である場合には、処理をそのままＳ１６３に進めるが、歪み量が大である場合には、Ｓ１６２において「歪みありフラグ」をセットしてから処理をＳ１６３に進める。Ｓ１６３では、ＣＰＵ１は、Ｓ１５５のキャラクタ長チェックにおいて一定値近傍内にあると判定されたキャラクタの個数分の復調処理が完了したか否かをチェックする。そして、未だ全個数分の復調処理が完了していない場合には、次のキャラクタに対する復調処理を実行すべく、処理をＳ１５９に戻す。これに対して、全個数分の復調処理が完了している場合には、処理をＳ１６４に進める。
【００５４】
Ｓ１６４では、ＣＰＵ１は、Ｓ１５９での復調処理によって復調できたキャラクタ数が６キャラクタであるかどうかをチェックする。そして、６キャラクタである場合には、処理をＳ１６９に進め、６キャラクタ未満である場合には、処理をＳ１６５に進める。
【００５５】
Ｓ１６５では、ＣＰＵ１は、第１キャラクタの長さをチェックする。そして、この第１キャラクタの長さが一定値近傍内にない場合（第１キャラクタが欠落している場合を含む）には（Ｓ１６６）、ＣＰＵ１は、処理をＳ１６９に進める。これに対して、この第１キャラクタの長さが一定値近傍内にある場合には（Ｓ１６６）、ＣＰＵ１は、Ｓ１６７においてスタートガードバーのチェックを行う。そして、スタートガードバーを検出した場合には（Ｓ１６８）、ＣＰＵ１は、Ｓ１０１の判定と矛盾するとして、Ｓ１３６において「復調完了フラグ」をリセットしてこのサブルーチンを終了する。これに対して、スタートガードバーを検出できなかった場合には（Ｓ１６８）、ＣＰＵ１は、処理をＳ１６９に進める。
【００５６】
Ｓ１６９では、ＣＰＵ１は、復調完了したデータ群がセンターバーを挟んで両側に連続するデータ群であるかをチェックする。そして、センターバーを挟んで両側に連続している場合には、ＣＰＵ１は、Ｓ１３７において「復調完了フラグ」をセットしてこのサブルーチンを終了する。これに対してセンターバーを挟んで両側に連続していない場合には、ほとんどあり得ない状況であってデータの信頼性が低いので、ＣＰＵ１は、Ｓ１３６において「復調完了フラグ」をリセットしてこのサブルーチンを終了する。
【００５７】
一方、Ｓ１３８にて処理対象のバー幅データ群がセンターバーを含んでいないと判定した場合には、処理対象のバー幅データ群がブロック読み取りのデータ群でもありえないので、ＣＰＵ１は、処理をＳ１７０に進める。このＳ１７０では、ＣＰＵ１は、このバー幅データ群がエンドガードバーを含んでいるかどうかをチェックする。そして、エンドガードバーを含んでいない場合には、処理対象のバー幅データ群がバーコード以外の模様に基づくデータ群であるとみなして、ＣＰＵ１は、Ｓ１３６において「復調完了フラグ」をリセットし、このサブルーチンを終了する。これに対して、エンドガードバーを含んでいる場合は、ＣＰＵ１は、処理をＳ１７１に進める。Ｓ１７１乃至Ｓ１８７の処理は、エンドガードバーを起点としてセンターバー側に、復調できる箇所までキャラクタを復調するための処理である。
【００５８】
Ｓ１７１では、ＣＰＵ１は、第１２キャラクタの長さをチェックする。そして、第１２キャラクタの長さが一定値近傍内にない場合には（Ｓ１７２）、ＣＰＵ１は、処理対象のバー幅データ群がバーコード以外の模様に基づくデータ群であるとみなして、Ｓ１３６において「復調完了フラグ」をリセットし、このサブルーチンを終了する。これに対して、第１２キャラクタの長さが一定値近傍内にある場合には（Ｓ１７２）、ＣＰＵ１は、処理をＳ１７３に進める。
【００５９】
Ｓ１７３では、ＣＰＵ１は、センターバー側の隣接キャラクタ（初期においては第１１キャラクタ）の長さをチェックする。そして、このキャラクタの長さが一定値近傍内にない場合には（Ｓ１７４）、ＣＰＵ１は、これまでにキャラクタ長が一定値近傍内であったとチェックされた第２データブロックのキャラクタに対する復調を行うべく、処理をＳ１７８に進める。これに対して、このキャラクタの長さが一定値近傍内にある場合には（Ｓ１７４）、ＣＰＵは、Ｓ１７５において、歪み量が大か否かをチェックする。そして、歪み量が小である場合には、ＣＰＵ１は、処理をそのままＳ１７７に進めるが、歪み量が大である場合には、Ｓ１７６において「歪みありフラグ」をセットしてから処理をＳ１７７に進める。Ｓ１７７では、ＣＰＵ１は、第２データブロックをなす６キャラクタ分のキャラクタ長のチェックを終了したかどうかをチェックする。そして、６キャラクタ分のキャラクタ長のチェックを終了した場合には、これら６個のキャラクタの復調をすべく、処理をＳ１７８に進める。これに対して、未だ６キャラクタ分のキャラクタ長のチェックを終了していない場合には、隣接する次のキャラクタのキャラクタ長をチェックすべく、処理をＳ１７３に戻す。
【００６０】
Ｓ１７８では、ＣＰＵ１は、Ｓ１７２又はＳ１７４において一定値近傍内にあると判定されたキャラクタのうちから最もエンドガードバーに近いものを取り出して、このキャラクタに対する復調処理を、Ｓ１０９と同様に実行する。次のＳ１７９では、ＣＰＵ１は、Ｓ１７８での復調処理が成功したかどうかをチェックする。そして、復調処理が成功しなかった場合には、そのまま処理をＳ１８３に進め、復調処理が成功した場合には処理をＳ１８０に進める。Ｓ１８０では、ＣＰＵ１は、歪み量が大か否かをチェックする。そして、歪み量が小である場合には処理をそのままＳ１８２に進めるが、歪み量が大である場合には、Ｓ１８１において「歪みありフラグ」をセットしてから処理をＳ１８２に進める。Ｓ１８２では、ＣＰＵ１は、Ｓ１７２又はＳ１７４のキャラクタ長チェックにおいてその長さが一定値近傍内にあると判定されたキャラクタの個数分の復調処理が完了したか否かをチェックする。そして、未だ全個数分の復調処理が完了していない場合には、ＣＰＵ１は、隣接する次のキャラクタに対する復調処理を実行すべく、処理をＳ１７８に戻す。これに対して、全個数分の復調処理が完了している場合には、ＣＰＵ１は、処理をＳ１８３に進める。
【００６１】
Ｓ１８３では、ＣＰＵ１は、第７キャラクタの長さをチェックする。そして、この第７キャラクタの長さが一定値近傍内にない場合（第７キャラクタが欠落している場合を含む）には（Ｓ１８４）、処理をＳ１８７に進め、この第７キャラクタの長さが一定値近傍内にある場合には（Ｓ１８４）、Ｓ１８５においてセンターバー及び第６キャラクタの長さのチェックを行う。そして、センターバーを検出した場合又は第６キャラクタの長さが一定値近傍内に入っている場合には（Ｓ１８６）、ＣＰＵ１は、Ｓ１３８の判定に矛盾するとして、Ｓ１３６において「復調完了フラグ」をリセットしてこのサブルーチンを終了する。これに対して、センターバーを検出できなかった場合には（Ｓ１８６）、ＣＰＵ１は、処理をＳ１８７に進める。
【００６２】
Ｓ１８７では、ＣＰＵ１は、Ｓ１７８にて復調完了したデータがエンドガードバー及び３個以上のキャラクタを含んでいるか否かを、チェックする。そして、エンドガードバー及び３個以上のキャラクタを含んでいる場合には、処理対象のバー幅データ群が少なくとも分割読み取りのデータ群であると認められるので、ＣＰＵ１は、Ｓ１３７にて「復調完了フラグ」をセットしてこのサブルーチンを終了する。これに対して、エンドガードバー及び３個以上のキャラクタを含んでいない場合には、データの信頼性が低いので、ＣＰＵ１は、Ｓ１３６にて「復調完了フラグ」をリセットしてこのデータ復調処理サブルーチンを終了する。
【００６３】
データ復調処理の終了後、ＣＰＵ１は、図３のメインルーチンに処理を戻し、Ｓ００２において、ＣＰＵ４３内のＲＡＭ領域内に「復調完了フラグ」がセットされているかどうかをチェックする。この「復調完了フラグ」は、Ｓ００１のデータ復調処理によってバー幅データ群の復調がなされたことを示すフラグである。この「復調完了フラグ」がセットされていない場合には、今回処理対象のバー幅データ群を破棄するとともに、新たにバー幅データ群格納バッファ２から取り出したバー幅データ群に対する復調処理を実行すべく、処理をＳ００１に戻す。
【００６４】
これに対して、「復調完了フラグ」がセットされている場合には、ＣＰＵ１は、Ｓ００３において、復調データ格納バッファ７内にモジュラス１０−ＯＫフラグが付された復調データが格納されているかどうかをチェックする。このモジュラス１０−ＯＫフラグは、Ｓ００５のモジュラス１０チェック処理にてセットされる。そして、復調データ格納バッファ７内にモジュラス１０−ＯＫフラグが付された復調データが格納されていない場合には、ＣＰＵ１は、処理をＳ００４に進める。
【００６５】
Ｓ００４では、ＣＰＵ１は、データ格納及び合成処理を実行する（合成手段に相当）。このデータ格納及び合成処理は、Ｓ００１でのデータ復調処理の結果復調データ一時待避バッファ６に書き込まれた復調データを復調データ格納バッファ７に書き写すことによって、バーコード全体に対応する復調データを合成する。この合成は、復調データに必ず含まれる何れかのガードバー又は／及びセンターバー（ＣＢ）を手掛かりに、復調データ格納バッファ７上に定義されたＵＰＣフォーマットに各復調データを当て填めることによって、なされる。
【００６６】
図７は、Ｓ００４にて実行されるデータ格納及び合成処理サブルーチンを示すフローチャートである。このサブルーチンに入って最初のＳ２０１では、ＣＰＵ１は、復調データ一時待避バッファ６に書き込まれている復調データにスタートガードバーが含まれているかどうかをチェックする。そして、復調データにスタートガードバーが含まれている場合には、ＣＰＵ１は、処理をＳ２０３に進める。これに対して、復調データにスタートガードバーが含まれていない場合には、ＣＰＵ１は、Ｓ２０２において、復調データ一時待避バッファ６に書き込まれている復調データにセンターバー及び第４〜６キャラクタが含まれているかどうかをチェックする。そして、ＣＰＵ１は、復調データにセンターバー及び第４〜６キャラクタが含まれている場合には、処理をＳ２０３に進め、復調データにセンターバー及び第４〜６キャラクタが含まれていない場合には、処理をＳ２０８に進める。
【００６７】
Ｓ２０３では、ＣＰＵ１は、復調データ格納バッファ７上に規定されたＵＰＣコードの左ブロックの全部又は一部に、対応する復調データが書き込まれているかどうかを、チェックする。そして、左ブロックに対応する復調データが全く書き込まれていない場合には、ＣＰＵ１は、処理Ｓ２０７に進める。
【００６８】
一方、復調データ格納バッファ７上に規定されたＵＰＣコードの左ブロックの全部又は一部に、対応する復調データが書き込まれている場合には、ＣＰＵ１は、Ｓ２０４において、復調データ格納バッファ７上に既に書き込まれている復調データと復調データ一時待避バッファ６に書き込まれている復調データとが２キャラクタ以上重複しているかをチェックする（ここでは、重複部のコードデータが相互に一致しているか否かを問わない）。そして、２キャラクタ以上重複していない場合には、仮に合成しても合成後における復調データの信頼性が保証できないとして、処理をＳ００１に戻す（この場合、復調データ一時待避バッファ６に格納されている復調データは、次のデータ復調処理によって得られた復調データによってオーバーライトされる）。
【００６９】
これに対して、復調データ格納バッファ７上に既に書き込まれている復調データと復調データ一時待避バッファ６に書き込まれている復調データとが２キャラクタ以上重複している場合には、ＣＰＵ１は、Ｓ２０５において、重複部における両復調データのコードデータが互いに一致しているか否かをチェックする。そして、両復調データのコードデータが互いに一致していない場合には、両復調データの何れも信頼できないとして、Ｓ２０６にて復調データ格納バッファ６をクリアした後に、処理をＳ００１に戻す。一方、重複部における両復調データのコードデータが互いに一致しているとＳ２０５にて判定した場合には、ＣＰＵ１は、処理をＳ２０７に進める。
【００７０】
Ｓ２０７では、ＣＰＵ１は、復調データ一時待避バッファ６に書き込まれている復調データの左ブロックを、スタートガ−ドバー又はセンターバーを手がかりに、復調データ格納バッファ７に規定されたＵＰＣコードのファーマットにはめ込む様に書き込む（合成手段に相当）。Ｓ２０７の実行完了後、ＣＰＵ１は、処理をＳ２０８に進める。
【００７１】
Ｓ２０８では、ＣＰＵ１は、復調データ一時待避バッファ６に書き込まれている復調データにセンターバー及び第７〜９キャラクタが含まれているかどうかをチェックする。そして、復調データにセンターバー及び第７〜９キャラクタが含まれている場合には、ＣＰＵ１は、処理をＳ２１０に進める。これに対して、復調データにセンターバー及び第７〜９キャラクタが含まれていない場合には、ＣＰＵ１は、Ｓ２０９において、復調データ一時待避バッファ６に書き込まれている復調データにエンドガードバーが含まれているかどうかをチェックする。そして、ＣＰＵ１は、復調データにエンドガードバーが含まれている場合には、処理をＳ２１０に進め、復調データにエンドガードバーが含まれていない場合には、このデータ格納及び合成サブルーチンを終了する。
【００７２】
Ｓ２１０では、ＣＰＵ１は、復調データ格納バッファ７上に規定されたＵＰＣコードの右ブロックの全部又は一部に、対応する復調データが書き込まれているかどうかを、チェックする。そして、右ブロックに対応する復調データが全く書き込まれていない場合には、ＣＰＵ１は、処理Ｓ２１６に進める。
【００７３】
一方、復調データ格納バッファ７上に規定されたＵＰＣコードの右ブロックの全部又は一部に、対応する復調データが書き込まれている場合には、ＣＰＵ１は、Ｓ２１１において、復調データ格納バッファ７上に既に書き込まれている復調データと復調データ一時待避バッファ６に書き込まれている復調データとが２キャラクタ以上重複しているかをチェックする（ここでは、重複部のコードデータが相互に一致しているか否かを問わない）。そして、２キャラクタ以上重複していない場合には、仮に合成しても合成後における復調データの信頼性が保証できないとして、処理をＳ００１に戻す（この場合、復調データ一時待避バッファ６に格納されている復調データは、次のデータ復調処理によって得られた復調データによってオーバーライトされる）。
【００７４】
これに対して、復調データ格納バッファ７上に既に書き込まれている復調データと復調データ一時待避バッファ６に書き込まれている復調データとが２キャラクタ以上重複している場合には、ＣＰＵ１は、Ｓ２１２において、復調データ格納バッファ７上に既に書き込まれている復調データと復調データ一時待避バッファ６に書き込まれている復調データとが３キャラクタ以上重複しているかをチェックする（ここでは、重複部のコードデータが相互に一致しているか否かを問わない）（重複判定手段に相当）。そして、ＣＰＵ１は、３キャラクタ以上重複していない場合には、処理をそのままＳ２１４に進め、３キャラクタ以上重複している場合には、Ｓ２１３にてＣＰＵ１のＲＡＭ領域にデータ一致フラグをセットした後に処理をＳ２１４に進める。
【００７５】
Ｓ２１４では、ＣＰＵ１は、重複部における両復調データのコードデータが互いに一致しているか否かをチェックする（一致判定手段に相当）。そして、両復調データのコードデータが互いに一致していない場合には、両復調データの何れも信頼できないとして、Ｓ２１５にて復調データ格納バッファ６をクリアしてデータ一致フラグをリセットした後に、処理をＳ００１に戻す。一方、重複部における両復調データのコードデータが互いに一致しているとＳ２１４にて判定した場合には、ＣＰＵ１は、処理をＳ２１６に進める。
【００７６】
Ｓ２１６では、ＣＰＵ１は、復調データ一時待避バッファ６に書き込まれている復調データの右ブロックを、センターバー又はエンドガードバーを手がかりに、復調データ格納バッファ７に規定されたＵＰＣコードのファーマットにはめ込む様に書き込む（合成手段に相当）。Ｓ２１６の実行完了後、ＣＰＵ１は、このデータ格納及び合成サブルーチンを終了する。
【００７７】
データ格納及び合成処理の終了後、ＣＰＵ１は、図３のメインルーチンに処理を戻し、Ｓ００５において、復調データ格納バッファ７に格納されている復調データに対してモジュラス１０チェック処理を実行する。このモジュラス１０チェックとは、Ｓ００４の合成処理によってバーコード全体に対応する復調データが得られたかどうかを判定するチェックである。具体的には、ＣＰＵ１は、復調データ格納バッファ７に格納されている復調データ中の最も右側を奇数位置として、この復調データに含まれる全てのコードデータを奇数位置と偶数位置に分類する。そして、奇数位置にあるコードデータの値の総和の３倍と偶数位置にあるコードデータの値の総和との和を、算出する。そして、算出された値が１０の倍数であれば、バーコード全体に対応する復調データが合成されたものと判断して、この復調データにモジュラス１０−ＯＫフラグを付す。
【００７８】
次のＳ００６では、ＣＰＵ１は、Ｓ００５でのモジュラス１０チェックの結果、復調データ格納バッファ７内に格納されている復調データにモジュラス１０−ＯＫフラグが付されたかどうかをチェックする。そして、未だモジュラス１０−ＯＫフラグが付されていなければ、復調データが全部揃っていない場合であると判断して、新たにバー幅データ群格納バッファ２から取り出したバー幅データ群に対する復調処理を実行すべく、処理をＳ００１に戻す。
【００７９】
これに対して、以上のＳ００１〜Ｓ００６のループ処理を繰り返した結果、復調データ格納バッファ７内に格納されている復調データにモジュラス１０−ＯＫフラグが付された時には、ＣＰＵ１は、連続読みによって復調データが得られたかＳ００４の結果データ合成が完了したのであると判断して、処理をＳ００６からＳ００７へ進める。このＳ００７では、ＣＰＵ１は、モジュラス１０−ＯＫフラグが付された復調データ（以下、「モジュラス１０−ＯＫデータ」という）が特定バーコードであるかどうかをチェックする。即ち、例えば、０２／２０バーコード等のインストアマーキングバーコードであるかどうかをチェックする。そして、ＣＰＵ１は、モジュラス１０−ＯＫデータが特定バーコードでなければ、ＣＰＵ１は、処理をそのままＳ０１７に進め、モジュラス１０−ＯＫデータが特定バーコードであれば、処理をＳ００８に進める。
【００８０】
Ｓ００８では、ＣＰＵ１は、モジュラス１０−ＯＫデータが連続読み取りに基づいて得られた復調データであるか否かをチェックする。そして、ＣＰＵ１は、モジュラス１０−ＯＫデータが連続読み取りに基づいて得られた復調データであれば、処理をそのままＳ０１７に進め、モジュラス１０−ＯＫデータがブロック読み取り又は分割読み取りに基づいて得られた復調データであれば、処理をＳ００９に進める。
【００８１】
Ｓ００９では、ＣＰＵ１は、ＣＰＵ１のＲＡＭ領域にデータ一致フラグがセットされているか否かをチェックする。そして、データ一致フラグがセットされている場合には、右ブロックにおいて３キャラクタ以上同じコードデータが重複しているので、処理をＳ０１５に進める。これに対して、データ一致フラグがセットされていない場合には、右ブロックにおいて３キャラクタ以上同じコードデータが重複していないので、処理をＳ００１に戻す。
【００８２】
Ｓ００９からＳ００１に処理が戻された後において実行されるＳ００３では、ＣＰＵ１は、ＣＰＵ１は、復調データ格納バッファ７内に格納されている復調データにモジュラス１０−ＯＫフラグが付されていると判定して、処理をＳ０１０に進める。このＳ０１０では、ＣＰＵ１は、最新の復調データが右ブロックのコードデータを３キャラクタ以上含んでいるか否かをチェックする（重複判定手段に相当）。そして、ＣＰＵ１は、最新の復調データが右ブロックのコードデータを３キャラクタ以上含んでいない場合には、処理をＳ００１に戻し、最新の復調データが右ブロックのコードデータを３キャラクタ以上含んでいる場合には、処理をＳ０１１に進める。
【００８３】
Ｓ０１１では、ＣＰＵ１は、モジュラス１０−ＯＫデータと最新の復調データとを、最新の復調データに含まれているセンターバー又はエンドガードバーをモジュラス１０−ＯＫデータにおける同じバーに対して揃えた状態で、比較する。
【００８４】
次のＳ０１２では、ＣＰＵ１は、Ｓ０１１での比較結果に基づいて、モジュラス１０−ＯＫデータと最新の復調データとが右ブロックにおいて３キャラクタ以上一致しているかどうかをチェックする（一致判定手段に相当）。そして、両データが右ブロックにおいて３キャラクタ以上一致している場合には、ＣＰＵ１は、処理をＳ０１５に進める。
【００８５】
Ｓ０１５では、ＣＰＵ１は、モジュラス１０−ＯＫデータの右ブロックに対して３キャラクタ以上一致する復調データの個数をソフト的に計数する同一キャラクタカウンタ（初期値は０）を、インクリメントする。
【００８６】
次のＳ０１６では、ＣＰＵ１は、同一キャラクタカウンタのカウント値が所定値（例えば、２）以上であるかどうかをチェックする。そして、カウント値が未だ所定値に達していない場合には、処理をＳ００１に戻す。
【００８７】
一方、以上のＳ００１〜Ｓ００３，Ｓ０１０〜Ｓ０１２，Ｓ０１５，Ｓ０１６のループ処理を実行している間に、モジュラス１０−ＯＫデータと最新の復調データとが右ブロックにおいて３キャラクタ以上一致していないとＳ０１２にて判定した場合には、ＣＰＵ１は、モジュラス１０−ＯＫデータの右ブロック及び最新の復調データのうち何れか一方が右ブロックの逆読みによって得られた可能性があると判断し、Ｓ０１３において復調データ格納バッファ７内に格納されているモジュラス１０−ＯＫデータを消去し、Ｓ０１４において同一キャラクタカウンタをリセットした後に、処理をＳ００１に戻す。
【００８８】
また、以上のＳ００１〜Ｓ００３，Ｓ０１０〜Ｓ０１２，Ｓ０１５，Ｓ０１６のループ処理を繰り返した結果、同一キャラクタカウンタのカウント値が所定値に達したとＳ０１６にて判定した場合には、ＣＰＵ１は、処理をＳ０１７に進める。
【００８９】
Ｓ０１７では、ＣＰＵ１は、「読み取りＯＫ」の処理を実行する。この「読み取りＯＫ」の処理では、ＣＰＵ１は、復調データ格納バッファ７に格納されているモジュラス１０−ＯＫデータをバーコード全体に対応する復調データとして有効化し（復調データ有効化手段に相当）、バーコードの読取（復調）完了を示す音声をスピーカ１０から出し、モジュラス１０−ＯＫデータ（バーコード全体に対応する復調データ）に対応する商品２０の販売価格等の情報を発光ダイオード１１によって表示する。これらの「読み取りＯＫ」の処理を完了すると、ＣＰＵ１は、このバーコード認識／復調処理プログラムを終了する。
（第１の実施形態の実施例）
本第１実施形態による実施例を、図１１乃至図１４を用いて説明する。
【００９０】
【実施例１】
図１１は、分割読み取りによるモジュラス１０−ＯＫデータが得られた後にエンドガードバーを含む復調データを復調した場合における実施例である。具体的に述べると、最初にスタートガードバーを含む分割読み取りに基づく復調データＡが得られた後に、右ブロックの全部及び左ブロックの一部を含む復調データＢが得られたとする。この場合、両復調データＡ，Ｂが２キャラクタ以上一致していれば、復調データ格納バッファ７内にて合成が行われ（Ｓ００４，Ｓ２０７）、モジュラス１０チェックにおける条件を満たしていれば、モジュラス１０−ＯＫフラグがセットされる（Ｓ００５）。但し、この時点においては、右ブロックにおいてコードデータが重複していないので、データ一致フラグはセットされていない（Ｓ００９）。従って、同一キャラクタカウンタのカウンタ値は初期値のままである。
【００９１】
その後で、エンドガードバー及び３キャラクタのコードデータを含む復調データＣを得ると、ＣＰＵ１は、復調データＡ及び復調データＢから合成されたモジュラス１０−ＯＫデータと復調データＣとを、エンドガードバーを手掛かりにして揃え、両データの第１０キャラクタ乃至第１２キャラクタ（のコードデータ）同士を比較する（Ｓ０１１）。この比較の結果、両データの第１０キャラクタ乃至第１２キャラクタ（のコードデータ）同士が一致していた場合には、ＣＰＵ１１は、モジュラス１０−ＯＫデータの元になった復調データＢと復調データＣとがバーコードの右ブロックを正しく読んで得られたものである蓋然性が高いと判断し、同一キャラクタカウンタをインクリメントする（Ｓ０１２，Ｓ０１５）。この同一キャラクタカウンタのカウント値が所定値（例えば、２）に達すると、ＣＰＵ１は、「読み取りＯＫ」の処理を実行する（Ｓ０１６，Ｓ０１７）。
【００９２】
【実施例２】
図１２は、分割読み取りによるモジュラス１０−ＯＫデータが得られた後にセンターバーを含む復調データを復調した場合における実施例である。具体的に述べると、最初にスタートガードバーを含む分割読み取りに基づく復調データＡが得られた後に、右ブロックの全部及び左ブロックの一部を含む復調データＢが得られたとする。この場合、両復調データＡ，Ｂが２キャラクタ以上一致していれば、復調データ格納バッファ７内にて合成が行われ（Ｓ００４，Ｓ２０７）、モジュラス１０チェックにおける条件を満たしていれば、モジュラス１０−ＯＫフラグがセットされる（Ｓ００５）。但し、この時点においては、右ブロックにおいてコードデータが重複していないので、データ一致フラグはセットされていない（Ｓ００９）。従って、同一キャラクタカウンタのカウンタ値は初期値のままである。
【００９３】
その後で、センターバー及び３キャラクタのコードデータを含む復調データＣを得ると、ＣＰＵ１は、復調データＡ及び復調データＢから合成されたモジュラス１０−ＯＫデータと復調データＣとを、センターバーを手掛かりにして揃え、両データの第７キャラクタ乃至第９キャラクタ（のコードデータ）同士を比較する（Ｓ０１１）。この比較の結果、両データの第７キャラクタ乃至第９キャラクタ（のコードデータ）同士が一致していた場合には、ＣＰＵ１１は、モジュラス１０−ＯＫデータの元になった復調データＢと復調データＣとがバーコードの右ブロックを正しく読んで得られたものである蓋然性が高いと判断し、同一キャラクタカウンタをインクリメントする（Ｓ０１２，Ｓ０１５）。この同一キャラクタカウンタのカウント値が所定値（例えば、２）に達すると、ＣＰＵ１は、「読み取りＯＫ」の処理を実行する（Ｓ０１６，Ｓ０１７）。
【００９４】
【実施例３】
図１３は、ブロック読み取りによるモジュラス１０−ＯＫデータが得られた際に、各復調データが右ブロックにおいて３キャラクタ以上重複していた場合における実施例である。具体的に述べると、最初に左ブロックの全部及び右ブロックの一部を含むブロック読み取りに基づく復調データＡが得られた後に、右ブロックの全部を含む復調データＢが得られたとする。この場合、復調データＡの第７キャラクタ乃至第９キャラクタに対して復調データＢの第７キャラクタ乃至第９キャラクタが夫々一致していれば、データ一致フラグがセットされ（Ｓ００９）、モジュラス１０チェック結果がＯＫであることを条件に（Ｓ００５，Ｓ００６）、同一キャラクタカウンタがインクリメントされる（Ｓ００９，Ｓ０１５）。この同一キャラクタカウンタのカウント値が所定値（例えば、２）に達すると、ＣＰＵ１は、「読み取りＯＫ」の処理を実行する（Ｓ０１６，Ｓ０１７）。
【００９５】
なお、両復調データＡ，Ｂの第７キャラクタ乃至第９キャラクタ（のコードデータ）同士が不一致の場合、復調データＣがバーコードの右ブロックを逆読みして得られたものである可能性が生じる。従って、その場合には、ＣＰＵ１は、復調データ格納バッファ６内の全データを消去し（Ｓ２１５）、最初からバーコード認識／復調処理をやり直す。
【００９６】
【実施例４】
図１４は、分割読み取りによって夫々得られた２個の復調データ及びブロック読み取りによって得られた１個の復調データに基づいてモジュラス１０−ＯＫデータが得られた際に、２個の復調データが右ブロックにおいて３キャラクタ以上重複していた場合における実施例である。具体的に述べると、最初にスタートガードバーを含む分割読み取りに基づく復調データＡが得られた後に、センターバーを含んで右ブロックの一部及び左ブロックの一部を含む復調データＢが得られ、最後に、右ブロックの全部を含む復調データＣが得られたとする。この場合、復調データＡと復調データＢとが２キャラクタ以上一致しているとともに復調データＢの第７キャラクタ乃至第９キャラクタに対して復調データＣの第７キャラクタ乃至第９キャラクタが夫々一致していれば、データ一致フラグがセットされ（Ｓ００９）、モジュラス１０チェック結果がＯＫであることを条件に（Ｓ００５，Ｓ００６）、同一キャラクタカウンタがインクリメントされる（Ｓ００９，Ｓ０１５）。この同一キャラクタカウンタのカウント値が所定値（例えば、２）に達すると、ＣＰＵ１は、「読み取りＯＫ」の処理を実行する（Ｓ０１６，Ｓ０１７）。
【００９７】
なお、各復調データＢ，Ｃの第７キャラクタ乃至第９キャラクタ（のコードデータ）同士が不一致の場合、復調データＣがバーコードの右ブロックを逆読みして得られたものである可能性が生じる。従って、その場合には、ＣＰＵ１は、復調データ格納バッファ６内の全データを消去し（Ｓ２１５）、最初からバーコード認識／復調処理をやり直す。
【００９８】
【実施例５】
図示を省略したが、連続読み取りによる復調データに基づいてモジュラス１０−ＯＫデータが得られた場合には（Ｓ００８）、無条件に「読み取りＯＫ」の処理がなされる（Ｓ０１７）。
【００９９】
【実施例６】
図示を省略したが、特定バーコード以外のバーコードを読み取って得られた復調データに基づいてモジュラス１０−ＯＫデータが得られた場合には（Ｓ００７）、無条件に「読み取りＯＫ」の処理がなされる（Ｓ０１７）。
【０１００】
以上説明したように、本実施形態のバーコード復調装置によれば、モジュラス１０−ＯＫデータが一旦得られた後においては、このモジュラス１０−ＯＫデータの元になった復調データがバーコードの右ブロックを逆読みして得られたもので無いことを確認するための最低限の復調データ獲得の他には、復調データの獲得は行われない。即ち、モジュラス１０−ＯＫデータの複数回にわたる獲得は、「読み取りＯＫ」の条件とはされない。従って、復調データの信頼性を維持しつつ、短時間でバーコード認識／復調を完了させることができる。
【０１０１】
【発明の効果】
以上のように構成された本発明のバーコード読取装置及びバーコード読取方法によると、一旦、ブロック読み取り又は分割読み取りによって得られた復調データに基づいてバーコード全体に対応する復調データが再現された際には、右ブロックについてのみ、複数の復調データが互いに重複しているかどうかをチェックする。その結果、右ブロックの逆読みに因る誤読を生じることなく短時間で復調を完了させることができる。
【図面の簡単な説明】
【図１】本発明の原理を示す原理図
【図２】本発明の実施の形態によるバーコード読取装置のブロック図
【図３】図２のＣＰＵで実行されるバーコード認識／復調処理プログラムの内容を示すフローチャート
【図４】図３のＳ００２で実行されるデータ復調処理の内容を示すフローチャート
【図５】図３のＳ００２で実行されるデータ復調処理の内容を示すフローチャート
【図６】図３のＳ００２で実行されるデータ復調処理の内容を示すフローチャート
【図７】図２のＳ００４で実行されるデータ格納及び合成処理の内容を示すフローチャート
【図８】ＵＰＣコードのキャラクタの構成図
【図９】距離復調テーブル
【図１０】バー幅復調テーブル
【図１１】第１実施例の説明図
【図１２】第２実施例の説明図
【図１３】第３実施例の説明図
【図１４】第４実施例の説明図
【図１５】ＵＰＣコードの右ブロックの逆読みの説明図
【図１６】ＵＰＣコードの右ブロックの逆読みの説明図
【図１７】ＵＰＣコードの右ブロックの逆読みの説明図
【符号の説明】
１    ＣＰＵ
２    バー幅データ群格納バッファ
６    復調データ一時退避バッファ
１３    半導体レーザー
１４    走査光学系
１５    Ａ／Ｄ変換器
１６    バー幅カウンタ
１８    受光素子
２１    バーコード
【図１】
0003576356.tif 000002
【図２】
0003576356.tif 000003
【図３】
0003576356.tif 000004
【図４】
0003576356.tif 000005
【図５】
0003576356.tif 000006
【図６】
0003576356.tif 000007
【図７】
0003576356.tif 000008
【図８】
0003576356.tif 000009
【図９】
0003576356.tif 000010
【図１０】
0003576356.tif 000011
【図１１】
0003576356.tif 000012
【図１２】
0003576356.tif 000013
【図１３】
0003576356.tif 000014
【図１４】
0003576356.tif 000015
【図１５】
0003576356.tif 000016
【図１６】
0003576356.tif 000017
【図１７】
0003576356.tif 000018