(57)【特許請求の範囲】
【請求項１】
複数のキャラクタからなるバーコードを２回以上走査し、その走査軌跡におけるバーコードデータを検出するバーコードデータ検出手段と、
前記バーコードデータ検出手段によって検出された各バーコードデータを復調する復調手段と、
前記復調手段によって復調された復調データのうち、第１の走査軌跡における第１の復調データと、第２の走査軌跡における第２の復調データとの重複部分を検出し、この重複部分が所定数のキャラクタからなるかを判定する第１判定手段と、
前記第１判定手段によって重複部分が所定数のキャラクタからなると判定された場合に、その重複部分が前記第１の復調データと前記第２の復調データとの間で同一かを判定する第２判定手段と、
前記第２判定手段によって重複部分が同一と判定された場合に、この重複部分をなす各キャラクタが同一かを判定する第３判定手段と、
前記第３判定手段によって各キャラクタが同一と判定された場合に、前記第１の復調データの重複部分の一つ前に存するキャラクタ，前記第２の復調データの重複部分の一つ後に存するキャラクタ，及び前記重複部分をなす各キャラクタの全てが同一かを判定する第４判定手段と
を備えたことを特徴とするバーコード読取装置。
【請求項２】
前記第１の復調データと前記第２の復調データとを合成する合成手段をさらに備え、
前記第４の判定手段によってキャラクタの全てが同一と判定された場合に、前記合成手段が、前記第１の復調データと前記第２の復調データとを合成しない
ことを特徴とする請求項１記載のバーコード読取装置。
【請求項３】
前記バーコードが、ＥＡＮ−１３コード，又はＵＰＣ／Ａコードである
ことを特徴とする請求項１記載のバーコード読取装置。
【請求項４】
前記第１の判定手段は、前記重複部分が２つのキャラクタからなる場合に、前記重複部分が所定数のキャラクタからなると判定する
ことを特徴とする請求項１記載のバーコード読取装置。
【請求項５】
複数のキャラクタからなるバーコードを２回以上走査し、その走査軌跡における各キャラクタのバーコードデータを検出する第１のステップと、
前記第１のステップにて検出した各バーコードデータを復調する第２のステップと、
前記第２のステップにて復調した復調データのうち、第１の走査軌跡における第１の復調データと、第２の走査軌跡における第２の復調データとを対比し、両者間に重複部分がある場合に、この重複部分が所定数のキャラクタからなるかを判定する第３のステップと、
前記第３のステップにて重複部分が所定数のキャラクタからなると判定した場合に、その重複部分が前記第１の復調データと前記第２の復調データとの間で同一かを判定する第４のステップと、
前記第４のステップにて重複部分が同一と判定された場合に、この重複部分をなす各キャラクタが同一かを判定する第５のステップと、
前記第５のステップにて各キャラクタが同一と判定した場合に、前記第１の復調データの重複部分の一つ前に存するキャラクタ，前記第２の復調データの重複部分の一つ後に存するキャラクタ，及び前記重複部分をなす各キャラクタの全てが同一かを判定する第６のステップと
を含むバーコード読取方法。
【請求項６】
前記第１の復調データと前記第２の復調データとを合成する第７のステップをさらに含み、
前記第６のステップにてキャラクタの全てが同一と判定された場合には、前記第７のステップを行わない
ことを特徴とする請求項５記載のバーコード読取方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、バーコード読取装置及びバーコード読取方法に関し、複数のキャラクタを有するバーコードを分割読み取りによって読み取るバーコード読取装置及びバーコード読取方法に関する。
【０００２】
【従来の技術】
近年、流通業等におけるＰＯＳシステムに代表されるように、商品等の管理をバーコードによって行うことが一般化している。例えば、商店のＰＯＳシステムでは、商品の種類や販売価格等の情報をバーコードのフォーマットにコード化して商品に印刷しておく。そして、レジにてこのバーコードを読み取ることによって、精算を行うとともに、商品の売り上げ数をリアルタイムで集計し、在庫管理や仕入れ管理に役立てるようにしている。
【０００３】
このようなバーコードは、ＪＡＮコード，ＵＰＣコード，ＥＡＮコード等のＷＰＣコードと、可変長のセカンドコードに大別される。このうち、ＷＰＣコードは、図６に示すように、左端に付加されるスタートガードバー（ＳＧＢ：「レフトガードバー（ＬＧＢ）」ともいう），中間部に挿入されるセンターバー（ＣＢ），及び、右端に付加されるエンドガードバー（ＥＧＢ：「ライトガードバー（ＲＧＢ）」ともいう）を有している。スタートガードバーとセンターバーとの間に６キャラクタ又は４キャラクタのデータキャラクタからなる左側データブロックが格納されている。センターバーとエンドガードバーとの間に６キャラクタ又は４キャラクタのデータキャラクタからなる右側データブロックが格納されている。データキャラクタは、コード化した数値又は記号の最小単位であり、複数個のモジュールからなる。
【０００４】
各ガードバー及びセンターバーは、予め規格によってそのパターンが定められているので、バーコードの読取装置は、これらのガードバー及びセンターバーを検知することができる。
【０００５】
また、バーコード読取装置は、これらガードバー及びセンターバーを手掛かりに、バーコードのデータキャラクタ（以下、単に「キャラクタ」という）を読み取ることができる。読み取りの方式としては、連続読み取り，ブロック読み取り，及び分割読み取りの３通りの方式がある。連続読み取りとは、１回のバーコード走査によって両ガードバー及びセンターバーを検出した場合に、各バーに挟まれたキャラクタを、バーコードとして認識して復調する方式である。ブロック読み取りとは、一方のガードバーとセンターバーとに挟まれたキャラクタのブロックのみをバーコードとして認識し、２つのブロックを夫々別個に復調した後でこれら各ブロックの復調データを合成（結合）し、１個のバーコードに変調されていたデータを再現する方式である。分割読み取りとは、最小限１個のガードバー又はセンターバーに連接するキャラクタ列であってもバーコードとして認識し、夫々別個に読み出したこれらキャラクタの復調データの断片を合成し、１個のバーコード全体に対応するデータを再現する方式である。
【０００６】
分割読み取りには、バーコードに対する走査ビームの通過の仕方によって、図７に示すように、（１）ＬＧＢのみを含む復調データと、ＣＢ及びＲＧＢを含む復調データとを検出し、これらを合成することによって、バーコード全体のデータを取得する「２分割」（図７（Ａ）参照），（２）ＬＧＢのみを含む復調データと、ＣＢのみを含む復調データと、ＲＧＢのみを含む復調データとを検出し、これらを合成することによってバーコード全体のデータを取得する「３−１分割」（図７（Ｂ）参照），（３）ＬＧＢのみを含む復調データと、ＣＢのみを含む復調データと、ＣＢ及びＲＧＢを含む復調データとを検出し、これらを合成することによってバーコード全体のデータを取得する「３−２分割」（図７（Ｃ）参照）とがある。
【０００７】
従来、分割読み取りでは、２つの復調データの合成によってデータブロックの復調データを作成する場合には、以下の手法が取られていた。即ち、左側データブロックを合成により作成する場合には、合成すべき復調データ同士が対比され、重複するキャラクタが２つあり（図７に示す例では、第３，４キャラクタが重複）、且つこれらのキャラクタが同じか否かが判定される。このとき、重複する２つのキャラクタが同じである場合には、復調データ同士が合成される。
【０００８】
ここで、上記処理が「２分割」の場合には、この時点でバーコード全体の復調データが得られる。「３−１分割」又は「３−２分割」の場合には、上記処理によって合成された復調データと他の復調データとが合成されることで、バーコード全体の復調データが得られる。その後、バーコード全体の復調データにキャラクタ数チェックやモジュラスチェックが施され、良好なチェック結果が得られた場合には、その復調データは、正常な復調データとして取り扱われていた。
【０００９】
【発明が解決しようとする課題】
しかしながら、上記した手法では以下の問題があった。例えば、図８（Ａ）に示すように、各ガードバーとセンターバーとの間に６キャラクタからなるデータブロックが夫々格納されたバーコード（ＵＰＣ／Ａコード）があるとする。このバーコードは、“０２７０００  ３８８１５０”のデータを有しているものとする。
【００１０】
ここで、バーコードが、走査ビーム（ａ）と走査ビーム（ｂ）とによって走査されたとする。走査ビーム（ａ）は、左側データブロックの第１キャラクタの途中から入り、センターバー（ＣＢ）を通過しないビームである。一方、走査ビーム（ｂ）は、左側データブロックの第４キャラクタからライトガードバー（ＲＧＢ）までを通過するビームである。このとき、走査ビーム（ａ）が通過した部分の第１キャラクタの明暗パターンが、レフトガードバー（ＬＧＢ）の明暗パターンと同じであった場合、第１キャラクタはＬＧＢと誤認される（「ビットシフト」と呼ばれる）。この結果、走査ビーム（ａ）によって得られる復調データの断片は、ＬＧＢ，第１キャラクタ（Ｃ１（Ｏ−２）），第２キャラクタ（Ｃ２（Ｏ−７）），第３キャラクタ（Ｃ３（Ｏ−０）），第４キャラクタ（Ｃ４（Ｏ−０）），及び第５キャラクタ（Ｃ５（Ｏ−０））となる。一方、走査ビーム（ｂ）によって得られる復調データの断片は、第４キャラクタ（Ｃ４（Ｏ−０）），第５キャラクタ（Ｃ５（Ｏ−０）），第６キャラクタ（Ｃ６（Ｏ−０）），ＣＢ，右側データブロックの各キャラクタ，及びＲＧＢとなる。
【００１１】
上記した２つの復調データの断片は、左側データブロックの第４，５ブロックについて重複部分を有する。また、左側データブロックの正常なコードは、第４〜６キャラクタが“０”であるので、図８（Ｂ）に示すように、重複部分が一致する。このため、これらの復調データの断片が適正なものとして合成されてしまい、誤読データ“２７００００  ３８８１５０”が作成されてしまう。
【００１２】
その後、この誤読データには、キャラクタ数チェックやモジュラスチェック（モジュラス１０／ウェイト３）が施され、正確性に対する判定がなされる。しかし、このエラー復調データは、正確なデータブロックのキャラクタ数，及び正確なモジュラスチェック結果を有する。このため、誤読データであることが検出できなかった。
【００１３】
本発明は、上記問題に鑑みなされたものであり、分割読み取りによってバーコードを読み取る場合において、ビットシフトによるバーコードの誤読を防止することができるバーコード読取装置及びバーコード読取方法を提供することを課題とする。
【００１４】
【課題を解決するための手段】
本発明は、上述した問題を解決するために以下の構成を採用する。すなわち、本発明は、バーコード読取装置である。このバーコード読取装置は、複数のキャラクタからなるバーコードを２回以上走査し、その走査軌跡におけるバーコードデータを検出するバーコードデータ検出手段と、前記バーコードデータ検出手段によって検出された各バーコードデータを復調する復調手段と、前記復調手段によって復調された復調データのうち、第１の走査軌跡における第１の復調データと第２の走査軌跡における第２の復調データとの重複部分を検出し、この重複部分が所定数のキャラクタからなるかを判定する第１判定手段と、前記第１判定手段によって重複部分が所定数のキャラクタからなると判定された場合に、その重複部分が前記第１の復調データと前記第２の復調データとの間で同一かを判定する第２判定手段と、前記第２判定手段によって重複部分が同一と判定された場合に、この重複部分をなす各キャラクタが同一かを判定する第３判定手段と、前記第３判定手段によって各キャラクタが同一と判定された場合に、前記第１の復調データの重複部分の一つ前に存するキャラクタ，前記第２の復調データの重複部分の一つ後に存するキャラクタ，及び前記重複部分をなす各キャラクタの全てが同一かを判定する第４判定手段とを備える。
【００１５】
本発明は、第１の復調データと前記第２の復調データとを合成する合成手段をさらに備え、第４の判定手段によってキャラクタの全てが同一と判定された場合に、前記合成手段が、前記第１の復調データと前記第２の復調データとを合成しないように構成しても良い。
【００１６】
また、本発明の第１の判定手段は、重複部分が２つのキャラクタからなる場合に、重複部分が所定数のキャラクタからなると判定するように構成しても良い。本発明によると、第４判定手段が、第１の復調データの重複部分の一つ前に存するキャラクタ，第２の復調データの重複部分の一つ後に存するキャラクタ，及び重複部分をなす各キャラクタの全てが同一かを判定する。このとき、全てのキャラクタが同一である場合には、ビットシフトによる誤読が生じている可能性が高い。従って、例えば、第４判定手段によって全てのキャラクタが同一と判定された場合には、合成手段が第１の復調データと第２の復調データとを合成しないようにすれば、ビットシフトによるバーコードの誤読を防止することができる。
【００１７】
第４判定手段は、第１の復調データの重複部分の一つ前に存するキャラクタのさらに一つ前に存するキャラクタがさらに同一であるかを判定しても良く、また、第２の復調データの重複部分の一つ後に存するキャラクタのさらに一つ後に存するキャラクタがさらに同一であるかを判定しても良い。
【００１８】
バーコードは、例えば、ＷＰＣコード，ＥＡＮコード，ＪＡＮコード，ＵＰＣコードであって、４キャラクタ以上のデータブロックをもつものであれば良い。特に、本発明は、例えば、ＥＡＮ−１３コード，又はＵＰＣ／Ａコードについて用いるのが好ましい。
【００１９】
本発明は、バーコード読取方法である。このバーコード読取方法は、複数のキャラクタからなるバーコードを２回以上走査し、その走査軌跡における各キャラクタのバーコードデータを検出する第１のステップと、第１のステップにて検出した各バーコードデータを復調する第２のステップと、第２のステップにて復調した復調データのうち、第１の走査軌跡における第１の復調データと、第２の走査軌跡における第２の復調データとを対比し、両者間に重複部分がある場合に、この重複部分が所定数のキャラクタからなるかを判定する第３のステップと、第３のステップにて重複部分が所定数のキャラクタからなると判定した場合に、その重複部分が前記第１の復調データと前記第２の復調データとの間で同一かを判定する第４のステップと、第４のステップにて重複部分が同一と判定された場合に、この重複部分をなす各キャラクタが同一かを判定する第５のステップと、第５のステップにて各キャラクタが同一と判定した場合に、前記第１の復調データの重複部分の一つ前に存するキャラクタ，前記第２の復調データの重複部分の一つ後に存するキャラクタ，及び前記重複部分をなす各キャラクタの全てが同一かを判定する第６のステップとを含む。
【００２０】
本発明の読取方法は、第１の復調データと前記第２の復調データとを合成する第７のステップをさらに含み、第６のステップにてキャラクタの全てが同一と判定された場合には、第７のステップを行わないようにするのが好ましい。
【００２１】
【発明の実施の形態】
以下、本発明の実施形態を図面を参照して説明する。
〈バーコード読取装置の構成〉
図１は、本発明の実施形態によるバーコード読取装置の概略構成を示すブロック図である。本実施形態におけるバーコード読取装置は、ＷＰＣコードのＵＰＣ／Ａ，ＥＡＮ−１３に従ったバーコード２１を読み取る。バーコード２１は、レフトガードバー（スタートガードバー）及びライトガードバー（エンドガードバー）の各ガードバーと、センターバーとを有し、各ガードバーとセンターバーとの間に夫々挟まれた６キャラクタからなるデータブロック（左側データブロック，右側データブロック）を有している（図６参照）。
【００２２】
図１において、バーコード読取装置は、互いにバスＢによって接続されたＣＰＵ１，バー幅データ群格納バッファ２，制御部回路３，インタフェース回路４，ＲＯＭ５及びＲＡＭ６，バー幅データ群格納バッファ２に接続されたバー幅カウンタ１６，バー幅カウンタ１６に接続されたクロック１９及びＡ／Ｄ変換器１５，このＡ／Ｄ変換器１５に接続された受光素子１８，制御部回路３に夫々接続されたモータ駆動回路８，レーザ駆動回路９，スピーカ１０及びＬＥＤ１１，モータ駆動回路８に接続されたモータ１２，このモータ１２によって駆動される走査光学系１４，並びに、レーザ駆動回路９に接続された半導体レーザ１３からなる。
【００２３】
ＲＯＭ５は、バーコード認識／復調処理プログラムを格納している読み出し専用メモリである。ＣＰＵ１は、ＲＯＭ５内に格納されているバーコード認識／復調処理プログラムを実行することにより、バーコード読取装置全体の制御を行うとともに、バーコード２１を読み取って得られたバー幅データ群を夫々復調し、バーコード２１全体に対応するデータを再現する。このＣＰＵ１が、本発明の復調手段，第１〜第４の判定手段として機能する。
【００２４】
インタフェース回路４は、バスＢのステータスを制御したり、上位機（上位コンピュータ）２０１へのデータ送信等を制御したりする。
制御部回路３は、モータ駆動回路８，レーザ駆動回路９，スピーカ１０，及び発光ダイオード（ＬＥＤ）１１を制御する。モータ駆動回路８は、モータ１２を駆動して、走査光学系１４を構成する図示せぬポリゴンミラーを回転させる。レーザ駆動回路９は、半導体レーザ１３を駆動して、レーザビームＬを出射させる。スピーカ１０は、バーコードの読取（復調）完了を示す音声を発する。発光ダイオード１１は、バーコード２１の復調の結果得られた商品２０の販売価格等の情報を表示する表示素子である。
【００２５】
半導体レーザ１３から出射されたレーザビームＬは、走査光学系１４に入射され、この走査光学系１４によって偏向される。即ち、この走査光学系１４は、モータ１２によって回転する図示せぬポリゴンミラーによってレーザビームＬを一方向に偏向する。このポリゴンミラーの反射側には、複数の固定ミラーが固定されている。従って、ポリゴンミラーによって偏向されたレーザビームＬは、各固定ミラーによって再度反射され、その偏向方向（走査方向）が様々な方向に変えられる。この走査光学系１４によると、ポリゴンミラーの一反射面による偏向周期内で、複数の方向へのレーザビーム走査が連続的に高速で行われる。このポリゴンミラーの一反射面による偏向周期内でなされる複数のレーザビーム走査の夫々を、以下、「一走査」という。
【００２６】
このようにして走査されたレーザビームＬがバーコード２１に当たると、この表面においてレーザビームＬが乱反射され、その反射光Ｒの一部が受光素子（ホトダイオード）１８に受光される。Ａ／Ｄ変換器１５は、この受光素子１８によって受光された反射光Ｒの明暗を示す電流値を、所定のしきい値と比較して、二値化信号に変換する。この二値化信号は、反射光Ｒの強度がバーコード２１中の黒バーの反射率に対応する場合には“Ｈ”を示し、反射光Ｒの強度がバーコード２１中の白バーの反射率に対応する場合には“Ｌ”を示す。
【００２７】
バー幅カウンタ１６は、Ａ／Ｄ変換器１５から入力された二値化信号に基づいて、二値化信号の立ち上がりタイミングから立ち下がりタイミングまでの時間（二段バーコード２１中の黒バーの幅に対応するものと期待される），及び、二値化信号の立ち下がりタイミングから立ち上がりタイミングまでの時間（二段バーコード２１中の白バーの幅に対応するものと期待される）を測定する。なお、バー幅カウンタ１６は、これらバー幅に対応する時間を計測するためにクロック１９からのクロック数をカウントする。バー幅カウンタ１６から出力される各バーの読取データ（バーコードデータ）は、このカウント値と白又は黒を示す色識別信号とを組み合わせた形態であり、レーザービームの一走査毎に、このような読取データが連続的に出力される。このように連続的に出力される一走査毎の読取データを「バー幅データ群」という。
【００２８】
バー幅データ群は、バー幅データ群格納バッファ２に一時格納される。このバー幅データ群格納バッファ２は、バー幅カウンタ１６から入力されたバー幅データ群を順次格納するとともに、ＣＰＵ１からの求めに応じて、格納した順に一個づつこのバー幅データ群をＣＰＵ１に渡す。
【００２９】
なお、上述した制御部回路３，モータ駆動回路８，レーザ駆動回路９，モータ１２，半導体レーザ１３，走査光学系１４，Ａ／Ｄ変換器１５，バー幅カウンタ１６，受光素子１８，クロック１９，バー幅データ格納バッファ２が、本発明のバーコードデータ検出手段に相当する。
【００３０】
ＲＡＭ６には、ＣＰＵ１の作業領域が展開される。また、ＲＡＭ４は、バー幅データ群に対する復調処理の結果得られた復調データを一時的に格納するためのＬバッファ６ａ，Ｒバッファ６ｂ，及びＣバッファ６ｃを有している。Ｌバッファ６ａには、レフトガードバーを検出した復調データ，又は一回の走査でレフトガードバー及びライトガードバーを検出した復調データが格納される。Ｒバッファ６ｂには、レフトガードバーは検出していないがライトガードバーを検出した復調データが格納される。Ｃバッファ６ｃには、センターバーを検出したが各ガードバーを検出していない復調データが格納される。
【００３１】
図２は、各バッファ６ａ〜６ｃの説明図である。図２に示すように、各バッファ６ａ〜６ｃは、１５バイトの記憶容量を有し、格納情報（１バイト），左側データブロックの復調桁数（１バイト），右側データブロックの復調桁数（１バイト），左側データブロックの復調データ（６バイト），右側データブロックの復調データ（６バイト）を夫々格納するための格納領域が設けられている。
【００３２】
ここに、格納情報の格納領域には、復調完了データの格納の有無を示すフラグ，復調データのモジュラスチェック結果を示すフラグ，復調データがデッドゾーンのデータか否かを示すフラグ，等が格納される。
【００３３】
左側データブロックの復調桁数の格納領域には、左側データブロックの復調データの格納領域に格納される復調データの桁数（キャラクタ数：“１”〜“６”の何れか）が格納される。但し、復調データがレフトガードバー及びセンターバーを検出したものである場合には、この復調データとレフトガードバー及び左側データブロックの全てのキャラクタを検出したがセンターバーを検出していない復調データとを区別するため、“７”が格納される。
【００３４】
右側データブロックの復調桁数の格納領域には、右側データブロックの復調データの格納領域に格納される復調データの桁数（キャラクタ数：“１”〜“６”の何れか）が、格納される。但し、復調データがライトガードバー及びセンターバーを検出したものである場合には、この復調データとライトガードバー及び右側データブロックの全てのキャラクタを検出したがセンターバーを検出していない復調データとを区別するため、“７”が格納される。
【００３５】
左側データブロック及び右側データブロックの各復調データの格納領域には、復調データがキャラクタの位置に応じて格納される。
〈バーコード認識／復調処理〉
次に、ＲＯＭ５に格納されＣＰＵ１によって実行されるバーコード認識／復調処理プログラムの具体的内容を、図３及び図４のフローチャートに基づいて説明する。このバーコード認識／復調処理のメインルーチンである図３のフローチャートは、バーコード読取装置に主電源が投入され、バー幅データ群格納バッファ２にバー幅データ群が格納されることによりスタートする。
【００３６】
最初に、ＣＰＵ１は、バー幅データ群格納バッファ２から、複数のバー幅データ群を順次取り出し、各バー幅データ群に対する復調処理を実行する（Ｓ０１）。即ち、ＣＰＵ１は、各バー幅データ群からスタートガードバー（レフトガードバー），センターバー，エンドガードバー（ライトガードバー）の検出を行い、何れかのバーを検出した場合には、そのバー幅データのキャラクタ長チェックを行い、その有効キャラクタ数を算出し、有効キャラクタ数分の復調データを復調する。
【００３７】
続いて、ＣＰＵ１は、ステップＳ０１にて復調された復調データを、その復調データの状態（各ガードバー又はセンターバーの検出状態）に応じて、Ｌバッファ６ａ，Ｒバッファ６ｂ，Ｃバッファ６ｃの何れかに格納する（Ｓ０２）。
【００３８】
次に、ＣＰＵ１は、各バッファ６ａ〜６ｃに格納された復調データの合成方法を、各バッファ６ａ〜６ｃに格納された各データブロックの復調桁数に基づいて判別する（Ｓ０３）。即ち、Ｌバッファ６ａにおける左側データブロックの復調桁数及び右側データブロックの復調桁数がともに“７”である場合には、ＣＰＵ１は、Ｌバッファ６ａに格納された復調データが一回の走査で各ガードバー及びセンターバーが検出された（バーコード全体が検出された）ものとして、合成方法を連続読み取りと判別する。これに対し、Ｌバッファ６ａの左側データブロックの復調桁数が“７”であり、且つＲバッファ６ｂの右側データブロックの復調桁数が“７”である場合には、ＣＰＵ１は、合成方法をブロック読み取りと判別する。
【００３９】
これに対し、Ｌバッファ６ａの左側データブロックの復調桁数と、Ｒバッファ６ｂの左側データブロックの復調桁数とがともに“７”であり、且つＬバッファ６ａの右側データブロックの復調桁数とＲバッファ６ｂの右側データブロックの復調桁数との和，及びＬバッファ６ａの左側データブロックの復調桁数とＲバッファ６ｂの左側データブロックの復調桁数との和がともに“８”以上である場合には、ＣＰＵ１は、合成方法を「２分割」と判別する。
【００４０】
また、Ｌバッファ６ａの左側データブロックの復調桁数とＣバッファ６ｃの左側データブロックの復調桁数との和，Ｃバッファ６ｃの右側データブロックの復調桁数とＲバッファ６ｂの右側データブロックの復調桁数との和がともに“８”以上である場合には、ＣＰＵ１は、合成方法を「３−１分割」と判別する。
【００４１】
また、Ｌバッファ６ａの左側データブロックの復調桁数とＲバッファ６ｂの右側データブロックの復調桁数とがともに“７”であり、且つＣバッファ６ｃの右側データブロックの復調桁数とＲバッファ６ｂの右側データブロックの復調桁数との和が“８”以上である場合には、ＣＰＵ１は、合成方法を「３−２分割」と判別する。
【００４２】
次に、ＣＰＵ１は、ステップＳ０３での判別結果が連続読み取りか否か判定する（Ｓ０４）。このとき、判別結果が連続読み取りである場合（Ｓ０４；Ｙ）には、ＣＰＵ１は、処理をステップＳ０９へ進め、そうでない場合（Ｓ０４；Ｎ）には、ＣＰＵ１は処理をステップＳ０５に進める。
【００４３】
ＣＰＵ１が処理をステップＳ０５に進めた場合、ＣＰＵ１は、ステップＳ０３での判別結果がブロック読み取りか否かを判別する。このとき、判別結果がブロック読み取りである場合（Ｓ０５；Ｙ）には、ＣＰＵ１は処理をステップＳ０８へ進め、そうでない場合（Ｓ０５；Ｎ）には、ＣＰＵ１は、判別結果が分割読み取りであるものとして、処理をステップＳ０６に進める。
【００４４】
ＣＰＵ１が処理をステップＳ０６に進めた場合、ＣＰＵ１は、重複部チェックのサブルーチン（図４のフローチャート）を実行する。図４において、最初に、ＣＰＵ１は、合成方法の判別結果に従って、合成すべき（対比すべき）二つの復調データを特定する（Ｓ００１）。
【００４５】
このとき、合成方法が「２分割」である場合には、ＣＰＵ１は、Ｌバッファ６ａ内の復調データを一方の復調データ（本発明の第１の復調データに相当）として特定するとともに、Ｒバッファ６ｂ内の復調データを他方の復調データ（本発明の第２の復調データに相当）として特定する。これに対し、合成方法が「３−２分割」である場合には、ＣＰＵ１は、Ｌバッファ６ａ内の復調データを一方の復調データとして特定するとともに、Ｃバッファ６ｃ内の復調データを他方の復調データとして特定する。
【００４６】
これに対し、合成方法が「３−１分割」である場合には、ＣＰＵ１は、以下の処理を行う。即ち、ＣＰＵ１は、所定の重複部チェックの終了フラグの状態を読み取る。このとき、終了フラグが“０”である場合、ＣＰＵ１は、Ｌバッファ６ａ内の復調データを一方の復調データとして特定するとともに、Ｃバッファ６ｃ内の復調データを他方の復調データとして特定する。これに対し、終了フラグが“１”である場合、ＣＰＵ１は、Ｃバッファ６ｃ内の復調データを一方の復調データとして特定するとともに、Ｒバッファ６ｂ内の復調データを他方の復調データとして特定する。
【００４７】
なお、終了フラグは、このサブルーチンの実行の終了時に“０”に設定されるようになっている。
続いて、ＣＰＵ１は、ステップＳ００１にて特定された２つの復調データを対比し、合成されるデータブロック間に重複部分（重複する桁（キャラクタ））が存するか否かを判定する（Ｓ００２）。このとき、重複部分がない場合（Ｓ００２；Ｎ）には、ＣＰＵ１は、重複部チェックがＮＧであるものと判定し（Ｓ００８）、このサブルーチンの実行を終了する。これに対し、重複部分がある場合（Ｓ００２；Ｙ）には、ＣＰＵ１は、処理をステップＳ００３へ進める。
【００４８】
ＣＰＵ１が処理をステップＳ００３へ進めた場合、ＣＰＵ１は、重複部分がキャラクタ２つ分か否かを判定する。このとき、重複部分がキャラクタ２つ分でない場合（Ｓ００３；Ｎ）には、ＣＰＵ１は、重複部チェックがＮＧであるものと判定し（Ｓ００８）、このサブルーチンの実行を終了する。これに対し、重複部分がキャラクタ２つ分である場合（Ｓ００３；Ｙ）には、ＣＰＵ１は、処理をステップＳ００４へ進める。
【００４９】
ＣＰＵ１が処理をステップＳ００４へ進めた場合、ＣＰＵ１は、重複部分が同一か否かが判定される。このとき、重複部分が同一でない場合（Ｓ００４；Ｎ）には、ＣＰＵ１は、重複部チェックがＮＧであるものと判定し（Ｓ００８）、このサブルーチンの実行を終了する。これに対し、重複部分が同一である場合（Ｓ００４；Ｙ）には、ＣＰＵ１は、処理をステップＳ００５へ進める。
【００５０】
ＣＰＵ１が処理をステップＳ００５へ進めた場合、ＣＰＵ１は、一方又は他方の復調データの重複部分をなす２つのキャラクタが同一か否かを判定する。このとき、２つのキャラクタが同一でない場合（Ｓ００５；Ｎ）には、ＣＰＵ１は、処理をステップＳ００７へ進める。これに対し、２つのキャラクタが同一である場合（Ｓ００６；Ｙ）には、ＣＰＵ１は、処理をステップＳ００６へ進める。
【００５１】
ＣＰＵ１が処理をステップＳ００６へ進めた場合、ＣＰＵ１は、一方の復調データの重複部分の左隣に存するキャラクタ，他方の復調データの重複部分の右隣に存するキャラクタ，及び一方又は他方の復調データの重複部分をなす各キャラクタの全てが同一か否かを判定する。このとき、全てのキャラクタが同一である場合（Ｓ００６；Ｙ）には、ＣＰＵ１は、復調データがビットシフトによる誤読データであるものとして、重複部チェックがＮＧであるものと判定し（Ｓ００８）、このサブルーチンの実行を終了する。これに対し、全てのキャラクタが同一でない場合（Ｓ００６；Ｎ）には、ＣＰＵ１は、処理をステップＳ００７へ進める。
【００５２】
ＣＰＵ１が処理をステップＳ００７へ進めた場合、ＣＰＵ１は、一方の復調データと他方の復調データが合成（結合）のための条件を満たしているものとして、重複部チェックがＯＫであると判定し、処理をステップＳ００９へ進める。
【００５３】
ＣＰＵ１が処理をステップＳ００９へ進めた場合、ＣＰＵ１は、ステップＳ０３での判別結果が「３−１分割」か否かを判定する。このとき、判別結果が「３−１分割」でない場合（Ｓ００９；Ｎ）には、ＣＰＵ１は、このサブルーチンの実行を終了する。これに対し、判別結果が「３−１分割」である場合（Ｓ００９；Ｙ）には、ＣＰＵ１は、処理をステップＳ０１０へ進める。
【００５４】
ＣＰＵ１が処理をステップＳ０１０へ進めた場合、ＣＰＵ１は、重複部チェックの終了フラグが“１”か否かを判定する。このとき、終了フラグが“１”である場合（Ｓ０１０；Ｙ）には、ＣＰＵ１は、「３−１分割」における２箇所の重複部チェックが終了したものとして、このサブルーチンの実行を終了する。これに対し、終了フラグが“１”でない（“０”である）場合（Ｓ０１０；Ｙ）には、ＣＰＵ１は、終了フラグを“１”に設定した後（Ｓ０１１）、処理をステップＳ００１へ戻す。
【００５５】
図５は、重複部チェックのサブルーチンによる処理の具体例を示す説明図である。図５に示す例では、ステップＳ００１の処理によって、左側データブロックの第１〜第５キャラクタ“・・ＸＡＢ”の復調データが、一方の復調データとして特定され、左側データブロックの第４〜第６キャラクタ“ＣＤＹ”を含む復調データが、他方の復調データとして特定されたものとする。
【００５６】
この場合、一方の復調データの“ＡＢ”と他方の復調データの“ＣＤ”とが重複部分として特定され（Ｓ００２；Ｙ）、重複部分がキャラクタ２つ分であると判定される（Ｓ００３；Ｙ）。次に、重複部分“ＡＢ”と重複部分“ＣＤ”とが同一か否かが判定される（Ｓ００４）。このとき、“ＡＢ”と“ＣＤ”とが同一である場合（Ｓ００４；Ｙ）には、重複部分“ＡＢ”をなす２つのキャラクタ，即ち、“Ａ”と“Ｂ”とが同一か否かが判定される（Ｓ００５）。このとき、“Ａ”と“Ｂ”とが同一と判定された場合（Ｓ００５；Ｙ）には、“Ｃ”と“Ｄ”とが同一として取り扱われる。
【００５７】
その後、重複部分“ＡＢ”の左隣のキャラクタ（第３キャラクタ）“Ｘ”と“Ａ”（又は“Ｂ”）とが同一であり、且つ重複部分“ＣＤ”の右隣のキャラクタ（第６キャラクタ）“Ｙ”と“Ａ”（“Ｂ”，“Ｃ”，“Ｄ”の何れか）とが同一か否かが判定される（Ｓ００６）。このとき、“Ｘ”＝“Ａ”（“Ｂ”，“Ｃ”，“Ｄ”の何れか）＝“Ｙ”が成立する場合（Ｓ００６；Ｙ）には、ステップＳ００８にて、重複部チェックがＮＧであるとの判定がなされる。
【００５８】
重複部チェックのサブルーチンが終了した場合、ＣＰＵ１は、メインルーチン（図３参照）のステップＳ０７へ処理を進める。ステップＳ０７では、ＣＰＵ１は、重複部チェック結果がＯＫかＮＧかを判定する。このとき、チェック結果がＮＧの場合（Ｓ０７；ＮＧ）には、ＣＰＵ１は、処理をステップＳ１１へ進める。これに対し、チェック結果がＯＫの場合（Ｓ０７；ＯＫ）には、ＣＰＵ１は、処理をステップＳ０８へ進める。
【００５９】
ステップＳ０８では、ＣＰＵ１は、各バッファ６ａ〜６ｃに格納された復調データの合成処理（ペアリング）を行い、バーコード全体の復調データを作成する。続いて、ＣＰＵ１は、ステップＳ０８にて作成された復調データについてモジュラス１０チェックを行い、このチェック結果がＯＫかＮＧかを判定する（Ｓ０９）。このとき、チェック結果がＯＫである場合（Ｓ０９；ＯＫ）には、ＣＰＵ１は、処理をＳ１０へ進める。これに対し、チェック結果がＮＧである場合（Ｓ０９；ＮＧ）には、ＣＰＵ１は、処理をＳ１１へ進める。
【００６０】
処理がステップＳ１０に進んだ場合、ＣＰＵ１は、バーコード２１の読み取りがＯＫであるものとして、バーコード２１の読み取り完了の音声をスピーカ１０に発生させるとともに、バーコード２１の復調結果に基づく情報を発行ダイオード１１に表示させる。そして、ＣＰＵ１は、バーコード２１の復調結果を上位機２０１へ転送するための命令を、インターフェイス回路４に与える。その後、ＣＰＵ１は、メインルーチンの処理を終了する。
【００６１】
処理がステップＳ１１に進んだ場合、ＣＰＵ１は、バーコード２１の読み取りがＮＧであるものとして、バーコード２１の読み取り完了の音声を、スピーカ１０に発生させるとともに、バーコード２１の復調がＮＧである旨（読み取りＮＧである旨）を、発行ダイオード１１に表示させる。その後、ＣＰＵ１は、メインルーチンの処理を終了する。
【００６２】
〈実施形態の作用〉
本発明の実施形態によるバーコード読取装置によると、重複部チェック処理（図４参照）において、一方の復調データの重複部分の左隣に存するキャラクタ，他方の復調データの重複部分の右隣に存するキャラクタ，及び一方又は他方の復調データの重複部分をなす各キャラクタの全てが同一である場合には、復調データがビットシフトによる誤読データであるものとして取り扱われ、バーコード２１の読取がＮＧとされる。
【００６３】
即ち、図８に示した例では、合成後の第３〜第６キャラクタが全て同じ“０”であるため、復調データの合成条件を満たさないものとして取り扱われる。このため、このバーコード２１の読取は、他のバー幅データ群を用いた復調・合成処理によって行われる。従って、分割読取を行う場合に、ビットシフトによるバーコード２１の誤読を防止することができる。
【００６４】
【発明の効果】
本発明によるバーコード読取装置及びバーコード読取方法によると、分割読取によってバーコードを読み取る場合において、ビットシフトによるバーコードの誤読を防止することができる。
【図面の簡単な説明】
【図１】本発明の実施形態によるバーコード読取装置の構成図
【図２】図１に示した各バッファの説明図
【図３】図１に示したＣＰＵによる処理を示すフローチャート
【図４】図３に示した重複部チェック処理を示すフローチャート
【図５】図４に示した重複部チェック処理の具体例を示す説明図
【図６】ＷＰＣコードの説明図
【図７】分割読取の説明図
【図８】従来の問題点を示す図
【符号の説明】
１    ＣＰＵ（復調手段，第１〜第４判定手段）
２    バー幅データ格納バッファ
３    制御部回路
５    ＲＯＭ
６    ＲＡＭ
６ａ  Ｌバッファ
６ｂ  Ｒバッファ
６ｃ  Ｃバッファ
８    モータ駆動回路
９    レーザ駆動回路
１２  モータ
１３  半導体レーザ
１４  走査光学系
１５  Ａ／Ｄ変換器
１６  バー幅カウンタ
１９  クロック
１８  受光素子
２１  バーコード
【図１】
0003560477.tif 000002
【図２】
0003560477.tif 000003
【図３】
0003560477.tif 000004
【図４】
0003560477.tif 000005
【図５】
0003560477.tif 000006
【図６】
0003560477.tif 000007
【図７】
0003560477.tif 000008
【図８】
0003560477.tif 000009