JP3472691B2 - バーコード読取装置及びバーコード読取方法 - Google Patents

バーコード読取装置及びバーコード読取方法

Info

Publication number
JP3472691B2
JP3472691B2 JP32468197A JP32468197A JP3472691B2 JP 3472691 B2 JP3472691 B2 JP 3472691B2 JP 32468197 A JP32468197 A JP 32468197A JP 32468197 A JP32468197 A JP 32468197A JP 3472691 B2 JP3472691 B2 JP 3472691B2
Authority
JP
Japan
Prior art keywords
data
bar
character
cpu
demodulation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP32468197A
Other languages
English (en)
Other versions
JPH11161734A (ja
Inventor
光雄 渡辺
元彦 伊藤
弘晃 川合
功 岩口
伸一 佐藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Fujitsu Frontech Ltd
Original Assignee
Fujitsu Ltd
Fujitsu Frontech Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd, Fujitsu Frontech Ltd filed Critical Fujitsu Ltd
Priority to JP32468197A priority Critical patent/JP3472691B2/ja
Priority to US09/069,946 priority patent/US6032862A/en
Priority to DE69835492T priority patent/DE69835492T2/de
Priority to EP98304432A priority patent/EP0919946B1/en
Publication of JPH11161734A publication Critical patent/JPH11161734A/ja
Application granted granted Critical
Publication of JP3472691B2 publication Critical patent/JP3472691B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
    • G06K7/1404Methods for optical code recognition
    • G06K7/146Methods for optical code recognition the method including quality enhancement steps
    • G06K7/1473Methods for optical code recognition the method including quality enhancement steps error correction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Electromagnetism (AREA)
  • General Health & Medical Sciences (AREA)
  • Toxicology (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Cash Registers Or Receiving Machines (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、バーコードを走査
した走査光の反射光量の変化に基づいてバーコードを読
み取るバーコード読取装置及び読取方法に関する。
【0002】
【従来の技術】近年、流通業等におけるPOSシステム
に代表されるように、商品等の管理をバーコードによっ
て行うことが一般化している。例えば、商店のPOSシ
ステムでは、商品の種類や販売価格等の情報をバーコー
ドのフォーマットにコード化して商品に印刷しておく。
そして、レジにて、このバーコードに対して走査光を照
射するとともに反射光の光量を検知することによってバ
ーコードにコード化されていたデータを読み取り、この
データに基づいて精算を行う。それと同時に、商品の売
り上げ数をリアルタイムで集計し、在庫管理や仕入れ管
理に役立てられている。
【0003】このようなバーコードは、JANコード,
UPCコード,EANコード等のWPCコードと、可変
長のセカンドコードに大別される。このうちWPCコー
ドは、左端に付加されるスタートガードバー(SG
B),中間部に挿入されるセンターバー(CB),及
び、右端に付加されるエンドガードバー(EGB)を有
し、スタートガードバーとセンターバーとの間に6キャ
ラクタ又は4キャラクタのデータキャラクタからなる左
データブロックを格納し、センターバーとエンドガード
バーとの間に6キャラクタ又は4キャラクタのデータキ
ャラクタからなる右データブロックを格納している。
【0004】また、このWPCコードの中には、13桁
バーコードと呼ばれるものがある。これは、左データブ
ロック中の各キャラクタを、偶数(EVEN)パリティ
のキャラクタ(二本の黒バーのモジュール数が偶数であ
るキャラクタ)又は奇数(ODD)パリティのキャラク
タ(二本の黒バーのモジュール数が奇数であるキャラク
タ)とし、これら偶数パリティ及び奇数パリティの組み
合わせに対応する数値を13桁目のキャラクタ(フラグ
キャラクタ)とすることによって、13桁の情報を保持
しているバーコードである。
【0005】従って、このような13桁バーコードにお
けるフラグキャラクタを復調するには、少なくとも左デ
ータブロック中の6桁のデータキャラクタを、正常に復
調し終わっていなければならない。
【0006】また、WPCコードの規約によると、13
桁バーコードに含まれる12個のデータキャラクタを、
最も右側のものを奇数位置として順番に奇数位置又は偶
数位置に分類した場合(フラグキャラクタは奇数位置と
分類する)、奇数位置にあるデータキャラクタの数値の
総和の3倍と偶数位置にあるデータキャラクタの数値の
総和との和は、10の整数倍となる。この規約を利用す
ると、ブロック読み取りして得られた復調データを合成
する際に、バーコード全体に対応した復調データが再現
されたか否かを容易に確認することができる。このよう
な確認は、「モジュラス10チェック」と呼ばれる。
【0007】従って、このようなモジュラス10チェッ
クを行うためには、右データブロック中の6桁のデータ
キャラクタも、正常に復調し終わっていなければならな
い。
【0008】
【発明が解決しようとする課題】しかしながら、バーコ
ードが印刷されている袋や紙に皺が生じている場合や、
バーコードの印刷自体がかすれている場合には、バーコ
ード読取装置は正確なバーコード読取を行うことができ
ない。また、バーコード読取装置が受光する反射光は、
バーコード表面での乱射光であるが、このバーコード表
面の状態如何では、バーコードを構成する各バーの色に
対応した光量の反射光がバーコード読取装置に入射しな
い場合がある。
【0009】このような状況が生じた結果、1キャラク
タであっても復調が失敗してしまった場合には、その時
になされた走査によって得られたデータだけでは、13
桁目のキャラクタの算出やモジュラス10チェックの実
行は不可能となってしまう。その結果、同じバーコード
を何回も読み取って、夫々によって得られた細切れのデ
ータを繋ぎ合わせなければならない。
【0010】本発明は、このような問題点に鑑みてなさ
れたものであり、1キャラクタのみの復調ができない場
合に、他のキャラクタを復調して得られた復調データに
基づいて、復調を失敗した1キャラクタにコード化され
ていたデータを推測することができるバーコード読取装
置及びバーコード読取方法を、提供することを課題とす
る。
【0011】
【課題を解決するための手段】本発明は、上記課題を解
決するため、下記の手段を採用した。即ち、請求項1記
載のバーコード読取装置は、図1の原理図に示した通
り、所定の条件式を満足する所定個数のデータを夫々コ
ード化して得られた複数のデータキャラクタを格納する
バーコードを読み取り、読み取られた明暗パターンを検
出する明暗パターン検出手段(100)と、この明暗パ
ターン検出手段によって検出された明暗パターンを前記
データキャラクタ毎に復調して、復調されたデータを出
力する復調手段(101)と、前記バーコード中の一個
のデータキャラクタの復調ができない場合に、前記バー
コード中の他のデータキャラクタを前記復調手段が復調
することによって得られた復調データに基づいて前記条
件式を逆算して、前記復調手段による復調ができなかっ
たデータキャラクタにコード化されていたデータを推測
するデータ推測手段(102)とを、備えることを特徴
とする。
【0012】このように構成されると、明暗パターン検
出手段(100)は、一定の条件式を満足する所定個数
のデータを夫々コード化して得られた複数のデータキャ
ラクタを格納するバーコードを読み取り、読み取られた
明暗パターンを検出する。復調手段(101)は、この
明暗パターン検出手段によって検出された明暗パターン
を、前記データキャラクタ毎に復調して、復調されたデ
ータを出力する。この復調手段(101)によるデータ
キャラクタの復調が、前記バーコード中の一個のデータ
キャラクタについてのみ失敗した場合には、データ推測
手段(102)は、前記バーコード中の他の全データキ
ャラクタを前記復調手段が復調することによって得られ
た数値に基づいて前記条件式を逆算して、前記復調手段
による復調ができなかったデータキャラクタにコード化
されていたデータを推測する。これにより、バーコード
全体に対応する復調データを直ちに得ることができる。
さらに、請求項1に記載のバーコード読取装置は、復調
手段による復調が失敗したデータキャラクタを構成する
バー幅パターンと、前記データ推測手段によって推測さ
れた数値に対応するバー幅パターンとを比較する比較手
段と、この比較手段の結果、両バー幅パターンが少なく
とも一部において一致している場合にのみ、前記データ
推測手段によって推測されたデータを有効化する有効化
手段とを更に備えることで、特定したものである。この
ように構成されれば、推測結果を検証することができる
ので、推測結果の信頼性を向上させることができる。
【0013】請求項2記載のバーコード読取装置は、請
求項1のデータキャラクタが、偶数パリティ又は奇数パ
リティの区別と前記データとをコード化して得られたも
のであり、バーコードには、前記偶数パリティ及び前記
奇数パリティの所定の組み合わせのうちの何れか一つの
組み合わせに従って、複数の前記データキャラクタが格
納されていることで、特定したものである。
【0014】請求項3記載のバーコード復調装置は、請
求項2の復調手段が、前記明暗パターン検出手段によっ
て検出された明暗パターンを、前記データキャラクタ毎
に復調して、前記データ及び前記偶数パリティ又は奇数
パリティの区別を出力するとともに、バーコード中の一
個のデータキャラクタのみの復調を前記復調手段ができ
なかった場合に、前記バーコード中の他のデータキャラ
クタを前記復調手段が復調することによって得られた前
記偶数パリティ又は奇数パリティの区別の組み合わせに
一致する前記所定の組み合わせを特定し、前記復調手段
による復調ができなかったデータキャラクタに対応する
前記偶数パリティ又は奇数パリティの区別を前記特定し
た組み合わせから読み出すパリティ推測手段を更に備え
ることで、特定したものである。
【0015】
【0016】請求項記載のバーコード読取装置は、請
求項の比較手段が、前記両バー幅パターンを構成する
各バー同士のバー幅を比較するとともに、前記有効化手
段が、前記何れかのバー同士のバー幅の比率が所定比率
内に収まっている場合に、前記推測されたデータを有効
化することで、特定したものである。
【0017】請求項記載のバーコード読取装置は、請
求項の有効化手段が、前記何れかのバー同士のバー幅
の比率が第1の所定比率内に収まっている場合には、直
ちに前記データを有効化するが、前記バー同士のバー幅
の比率が前記第1の所定比率を超えた第2の所定比率内
である場合には、前記明暗パターン検出手段,前記復調
手段及び前記データ推測手段を再起動させるとともに、
この再起動の結果前記何れかのバー同士のバー幅の比率
が第2の所定比率内に収まったときに限って前記データ
を有効化することで、特定したものである。このように
すれば、バー同士のバー幅の比率が第1の所定比率内に
収まっているために推測結果の信頼性が高い場合には、
直ちに推測結果を有効化できる一方で、バー同士のバー
幅の比率が第1の所定比率を超えているために推測結果
の信頼性が比較的低い場合には、前記明暗パターン検出
手段,前記復調手段及び前記データ推測手段を再起動さ
せることができるので、推測結果の信頼性を高めること
ができる。
【0018】請求項記載のバーコード読取装置は、請
求項3において、復調手段による復調が失敗したデータ
キャラクタを構成するバー幅パターンと、前記データ推
測手段によって推測されたデータ及び前記パリティ推測
手段によって推測された前記偶数パリティ又は奇数パリ
ティの区別に対応するバー幅パターンとを比較する比較
手段と、この比較手段の結果、両バー幅パターンが少な
くとも一部において一致している場合にのみ、前記デー
タ推測手段によって推測されたデータ及び前記パリティ
推測手段によって推測された前記偶数パリティ又は奇数
パリティの区別を有効化する有効化手段とを更に備える
ことで、特定したものである。このように構成されれ
ば、推測結果を検証することができるので、推測結果の
信頼性を向上させることができる。
【0019】請求項記載のバーコード読取装置は、請
求項の比較手段が、前記両バー幅パターンを構成する
各バー同士のバー幅を比較するとともに、前記有効化手
段が、前記何れかのバー同士のバー幅の比率が所定比率
内に収まっている場合に、前記推測されたデータ及び前
記偶数パリティ又は奇数パリティの区別を有効化するこ
とで、特定したものである。
【0020】請求項記載のバーコード読取装置は、請
求項の有効化手段が、前記何れかのバー同士のバー幅
の比率が第1の所定比率内に収まっている場合には、直
ちに前記データを有効化するが、前記バー同士のバー幅
の比率が前記第1の所定比率を超えた第2の所定比率内
である場合には、前記明暗パターン検出手段,前記復調
手段,前記データ推測手段及び前記パリティ推測手段を
再起動させるとともに、この再起動の結果前記何れかの
バー同士のバー幅の比率が第2の所定比率内に収まった
ときに限って前記データ及び前記偶数パリティ又は奇数
パリティの区別を有効化することで、特定したものであ
る。このようにすれば、バー同士のバー幅の比率が第1
の所定比率内に収まっているために推測結果の信頼性が
高い場合には、直ちに推測結果を有効化できる一方で、
バー同士のバー幅の比率が第1の所定比率を超えている
ために推測結果の信頼性が比較的低い場合には、前記明
暗パターン検出手段,前記復調手段及び前記データ推測
手段を再起動させることができるので、推測結果の信頼
性を高めることができる。
【0021】請求項記載のバーコード読取装置は、請
求項1において、前記明暗パターン検出手段による一回
の走査によって得られた明暗パターンに基づいて前記バ
ーコード中の一個以外のデータキャラクタを前記復調手
段が復調した場合には、前記データ推測手段によって推
測されたデータを直ちに有効化し、前記明暗パターン検
出手段による複数回の走査によって得られた明暗パター
ンに基づいて前記バーコード中の一個以外のデータキャ
ラクタを前記復調手段が復調した場合には、前記明暗パ
ターン検出手段,前記復調手段及び前記データ推測手段
を再起動させるとともに、この再起動の結果前記データ
推測手段が推測したデータを有効化する有効化手段を更
に備えることで、特定したものである。このようにすれ
ば、連続読取によって明暗パターンが得られたために推
測結果の信頼性が高い場合には、直ちに推測結果を有効
化できる一方で、分割読取によって明暗パターンが得ら
れたために推測結果の信頼性が比較的低い場合には、前
記明暗パターン検出手段,前記復調手段及び前記データ
推測手段を再起動させることができるので、推測結果の
信頼性を高めることができる。
【0022】請求項10記載のバーコード読取装置は、
請求項3において、前記明暗パターン検出手段による一
回の走査によって得られた明暗パターンに基づいて前記
バーコード中の一個以外のデータキャラクタを前記復調
手段が復調した場合には、前記データ推測手段によって
推測されたデータ及び前記パリティ推測手段によって推
測された前記偶数パリティ又は奇数パリティの区別を直
ちに有効化し、前記明暗パターン検出手段による複数回
の走査によって得られた明暗パターンに基づいて前記バ
ーコード中の一個以外のデータキャラクタを前記復調手
段が復調した場合には、前記明暗パターン検出手段,前
記復調手段,前記データ推測手段及び前記パリティ推測
手段を再起動させるとともに、この再起動の結果前記デ
ータ推測手段が推測したデータ及び前記パリティ推測手
段が推測した前記偶数パリティ又は奇数パリティの区別
を有効化する有効化手段を更に備えることで、特定した
ものである。このようにすれば、連続読取によって明暗
パターンが得られたために推測結果の信頼性が高い場合
には、直ちに推測結果を有効化できる一方で、分割読取
によって明暗パターンが得られたために推測結果の信頼
性が比較的低い場合には、前記明暗パターン検出手段,
前記復調手段及び前記データ推測手段を再起動させるこ
とができるので、推測結果の信頼性を高めることができ
る。
【0023】請求項11記載のバーコード読取方法は、
所定の条件式を満足する所定個数のデータを夫々コード
化して得られた複数のデータキャラクタを格納するバー
コードを読み取り、読み取られた明暗パターンを検出
し、検出された明暗パターンを、前記データキャラクタ
毎に復調して、復調されたデータを出力し、前記バーコ
ード中の一個のデータキャラクタの復調ができない場合
には、前記バーコード中の他のデータキャラクタを復調
することによって得られたデータに基づいて前記条件式
を逆算して、復調手段による復調ができなかったデータ
キャラクタにコード化されていたデータを推測し、前記
復調手段による復調ができなかったデータキャラクタを
構成するバー幅パターンと、前記推測されたデータに対
応するバー幅パターンとを比較し、この比較の結果、両
バー幅パターンが少なくとも一部において一致している
場合にのみ、前記推測されたデータを有効化することを
特徴とする。
【0024】
【発明の実施の形態】以下、図面に基づいて、本発明の
実施の態様の説明を行う。 (13桁バーコードの構成)先ず、最初に、本発明の実
施の形態であるバーコード読取装置が読取対象とする1
3桁バーコードの構成を、図25乃至図30を用いて説
明する。図25及び図27に示すように、13桁バーコ
ード(WPCコード)は、固定パターンのバー(夫々1
モジュールからなる黒,白,黒の3本のバー)から成る
スタートガードバー(SGB)を右端に有し、同じく固
定パターンのバー(夫々1モジュールからなる白,黒,
白,黒,白の5本のバー)から成るセンターバー(C
B)を中央に有し、同じく固定パターンのバー(夫々1
モジュールからなる黒,白,黒の3本のバー)から成る
エンドガードバー(EGB)左端に有する。そして、ス
タートガードバー(SGB)とセンターバー(CB)と
の間に、6キャラクタのデータキャラクタ(C1〜C
6)からなる左データブロックを有し、センターバー
(CB)とエンドガードバー(EGB)との間に、6キ
ャラクタのデータキャラクタ(C7〜C12)からなる
右データブロックを有する。
【0025】各データキャラクタ(C1〜C12)は、
図26及び図28に示すように、7個のモジュール(各
モジュールは単位長を有する)の夫々を適宜白又は黒に
割り振って形成された2本の白バー及び2本の黒バーの
組合せからなる。そして、各データキャラクタを構成す
る4本のバーは、左データブロックを構成する各データ
キャラクタ(C1〜C6)においては、スタートガード
バー(SGB)側から白バー(a),黒バー(b),白
バー(c),黒バー(d)の順で並び、右データブロッ
クを構成する各データキャラクタ(C7〜C12)にお
いては、エンドガードバー(EGB)側から白バー
(a),黒バー(b),白バー(c),黒バー(d)の
順で並ぶ。
【0026】図29は、データキャラクタの各バー
(a,b,c,d)が採り得る全てのバー幅(モジュー
ル数)パターンと、各バー幅パターンに対応する数値を
示す表である。なお、数値に付された「E−」は偶数パ
リティのデータキャラクタ(両黒バー(b,d)のモジ
ュール数の和が偶数となるキャラクタ)であることを示
し、「O−」は奇数パリティのデータキャラクタ(両黒
バー(b,d)のモジュール数の和が奇数となるキャラ
クタ)であることを示す。また、T1は、各データキャ
ラクタにおけるセンターバー(CB)側の黒バー(d)
と隣接する白バー(c)とを合わせたバー幅(モジュー
ル数)を示し、T2は、当該白バー(c)とガードバー
(SGB又はEGB)側の黒バー(b)とを合わせたバ
ー幅(モジュール数)を示し、何れも「δディスタン
ス」と呼ばれる。
【0027】WPCコードの規約によると、右データブ
ロックは、偶数パリティのデータキャラクタのみから構
成され、左データブロックは、偶数パリティのデータキ
ャラクタと奇数パリティのデータキャラクタとから構成
される。但し、左データブロックの6個のデータキャラ
クタが採りうる偶数パリティと奇数パリティとの組合せ
は、WPCコードの規約によって、図30に示す10通
りに制限されている。そして、各組合せに対して、夫
々、一意の数値(0〜9),即ち、フラグキャラクタが
定義されている。なお、図30から明らかなように、左
データブロックの6個のデータキャラクタが採りうる偶
数パリティ又は奇数パリティの区別(以下、「ODD/
EVEN構成」という)の各組合せパターンは、他の全
ての組合せパターンと比較して、2キャラクタ以上にお
いて相違している。
【0028】また、上述した通り、WPCコードの規約
によると、13桁バーコードに含まれる12個のデータ
キャラクタを、最も右側のものを奇数位置として順番に
奇数位置又は偶数位置に分類した場合(フラグキャラク
タは奇数位置と分類する)、奇数位置にあるデータキャ
ラクタの数値の総和の3倍と偶数位置にあるデータキャ
ラクタの数値の総和との和は、10の整数倍となる。こ
れが「所定の条件式」である。
【0029】(欠落キャラクタの推測原理)次に、上述
した構成を有する13桁バーコードにおいて何れか一個
のデータキャラクタに対する復調処理が失敗した場合に
おいて、他の11桁の復調データに基づいて当該復調が
失敗したデータキャラクタにコード化されていたデータ
(数値及びODD/EVEN構成)を推測するための原
理を、説明する。
【0030】<左データブロックの場合>いま、図25
に示すように、13桁バーコードの各データキャラクタ
に、第1キャラクタ(C1)側から順に、O7,O4,
E0,O8,E1,E4,E0,E6,E2,E8,E
5,E0の各データが夫々コード化されているとする。
そして、左データブロックにおける第3データキャラク
タ(C3)の復調が失敗したとする。
【0031】この場合、左データブロックにおける残り
の全データキャラクタを復調すると、そのODD/EV
EN構成の組み合わせパターンが“OO−OEE”であ
ることが解る。ここで、上述したように、左データブロ
ックの6個のデータキャラクタが採りうる何れのODD
/EVEN構成の組み合わせパターンも、他の全てのO
DD/EVEN構成の組み合わせパターンと比較して、
2キャラクタ以上において相違している。従って、何れ
か一個のデータキャラクタが欠落した場合でも、残りの
5キャラクタのODD/EVEN構成の組み合わせパタ
ーンは、他の全てのODD/EVEN構成の組み合わせ
パターンと比較して、少なくとも1キャラクタにおいて
相違している。図25の例では、“OO−OEE”と同
じODD/EVEN構成の組み合わせパターンに対応す
るフラグキャラクタは、“1”のみである。従って、こ
の欠落したデータのODD/EVEN構成がEVEN
(奇数パリティ)であることが、確実に解る。
【0032】次に、上述したWPCのモジュラス10チ
ェックの規約を利用すれば、復調完了した11キャラク
タが正確であるとの仮定が成り立てば、モジュラス10
チェックの関係式にこれら11キャラクタの値をあては
めることによって、欠落した一個のデータの数値を推測
することができる。図25の例によると、下記式に示す
ように、奇数位置にある復調データ(フラグキャラクタ
を含む)の総和は“31”であり、偶数位置にある復調
データ(欠落しているC3を除く)の総和は“13”で
ある。
【0033】 (C1+C3+C5+C7+C9+C11)*3+(フラク゛キャラクタ+C2+C4+C6+C8+C10+C12)=10の整数倍 ( 7+ ?+ 1+ 0+ 2+ 3)*3+( 1+ 4+ 8+ 4+ 6+ 8+ 0)=10の整数倍 ( 13+ ?)*3+( 31)=10の整数倍 従って、上述したモジュラス10チェック結果が良好と
なるには、欠落したデータキャラクタC3にコード化さ
れた数値は、“0”でなければならない。このようにし
て、欠落した一個のデータキャラクタC3にコード化さ
れていたであろう数値を、“0”と推測することができ
る。
【0034】このようにして推測された数値はそのまま
使用されても良いが、上記数値の推測は復調完了した1
1キャラクタが正確であるとの仮定に基づいているの
で、推測結果の正確性を確かなものにするためには、推
測結果の検証をすることが望ましい。そこで、推測され
たODD/EVEN構成及び数値に対応するバー幅パタ
ーンを図29の表から読み出すとともに、読み出したバ
ー幅パターンを構成する各バーのモジュール数と復調失
敗したデータキャラクタについて実際に検出されたバー
幅データとを比較し、δディスタンスT−1,δディス
タンスT−2,黒バー(b),黒バー(d)のうちの何
れか一つでも一致しているか否かを判別すれば、推測結
果が確実なものとなる。
【0035】
【実施形態1】(バーコード読取装置の構成)図2は、
本発明の第1実施形態によるバーコード読取装置の概略
構成を示すブロック図である。図2において、バーコー
ド読取装置は、互いにバスBによって接続されたCPU
1,バー幅データ群格納バッファ2,制御部回路3,イ
ンタフェース回路4,ROM5及びRAM6,バー幅デ
ータ群格納バッファ2に接続されたバー幅カウンタ16
及びレーザービームの開始終了検出器17,バー幅カウ
ンタ16に接続されたクロック19及びA/D変換器1
5,このA/D変換器15に接続された受光素子18,
制御部回路3に夫々接続されたモータ駆動回路8,レー
ザ駆動回路9,スピーカ10及びLED11,モータ駆
動回路8に接続されたモータ12,このモータ12によ
って駆動される走査光学系14,並びに、レーザ駆動回
路9に接続された半導体レーザ13から、構成されてい
る。
【0036】ROM5は、図29及び図30の表やバー
コード認識/復調処理プログラムを格納している読み出
し専用メモリである。CPU1は、ROM5内に格納さ
れているバーコード認識/復調処理プログラムを実行す
ることにより、バーコード読取装置全体の制御を行うと
ともに、復調手段,データ推測手段,パリティ推測手
段,比較手段,及び有効化手段として機能して、バーコ
ード21を読み取って得られたバー幅データ群を復調す
る。
【0037】インタフェース回路4は、バスBのステー
タスを制御したり、外部装置へのデータ送信等を制御す
る回路である。制御部回路3は、モータ駆動回路8,レ
ーザ駆動回路9,スピーカ10,及び発光ダイオード
(LED)11を制御する回路である。このモータ駆動
回路8は、モータ12を駆動して、走査光学系14を構
成する図示せぬポリゴンミラーを回転させる。また、レ
ーザ駆動回路9は、半導体レーザ13を駆動して、レー
ザビームLを出射させる。また、スピーカ10は、バー
コードの読取(復調)完了を示す音声を発する。また、
発光ダイオード11は、バーコードの復調の結果得られ
た商品20の販売価格等の情報を表示する表示素子であ
る。
【0038】半導体レーザ13から出射されたレーザビ
ームLは、走査光学系14に入射されて、この走査光学
系14によって偏向される。即ち、この走査光学系14
は、モータ12によって回転される図示せぬポリゴンミ
ラーによってレーザビームLを一方向に偏向する。この
ポリゴンミラーの反射側には、複数の固定ミラーが固定
されている。従って、ポリゴンミラーによって偏向され
たレーザビームLは、各固定ミラーによって再度反射さ
れ、その偏向方向(走査方向)が様々な方向に変えられ
る。この走査光学系14によると、ポリゴンミラーの一
反射面による偏向周期内で、複数の方向へのレーザビー
ム走査が連続的に高速で行われる。このポリゴンミラー
の一反射面による偏向周期内でなされる複数のレーザビ
ーム走査の夫々を、以下、「一走査」という。
【0039】このようにして走査されたレーザビームL
が商品20の表面(バーコード21を含む)に当たる
と、この表面においてレーザビームLが乱反射され、そ
の反射光Rの一部が受光素子(ホトダイオード)18に
受光される。A/D変換器15は、この受光素子18に
よって受光された反射光Rの明暗を示す電流値を、所定
のしきい値と比較して、二値化信号に変換する。この二
値化信号は、反射光Rの強度がバーコード21中の黒バ
ーの反射率に対応する場合には“H”を示し、反射光R
の強度がバーコード21中の白バーの反射率に対応する
場合には“L”を示す。
【0040】バー幅カウンタ16は、A/D変換器15
から入力された二値化信号に基づいて、二値化信号の立
ち上がりタイミングから立ち下がりタイミングまでの時
間(バーコード21中の黒バーの幅に対応するものと期
待される),及び、二値化信号の立ち下がりタイミング
から立ち上がりタイミングまでの時間(バーコード21
中の白バーの幅に対応するものと期待される)を測定す
る。なお、バー幅カウンタ16は、これらバー幅に対応
する時間を計測するためにクロック19からのクロック
数をカウントする。そして、バー幅カウンタ16は、各
バー毎に、図3に示すような内容を有する16ビットの
バー幅データを出力する。
【0041】図3において、第1ビット〜第10ビット
までの11桁(BCD0〜BCD10)はバー幅を示す
カウント値を示し、第11ビット(W/B)はバーの色
を示し(1:白/0:黒)、第12ビット(WERR)
はエラーの有無(1:エラー有り/0:エラー無し)を
示す。第13ビット(CHR−F)は、スタートガード
バーらしきパターン中の黒バーを検出した時,又は、セ
ンターバーらしきパターン中の白バーを検出した時に
“1”となる。同様に、第14ビット(CHR−L)
は、エンドガードバーらきしパターン中の白バーを検出
した時に“1”となる。第15ビット(C128)は識
別フラグである。
【0042】バー幅カウンタ16は、レーザービームの
一走査毎に、このようなバー幅データを連続的に出力す
る。このように連続的に出力される一走査毎のバー幅デ
ータを「バー幅データ群」という。
【0043】以上に説明した制御部回路3,モータ駆動
回路8,モータ12,レーザ駆動回路9,半導体レーザ
13,走査光学系14,受光素子18,A/D変換器1
5,バー幅カウンタ16及びクロック19が、明暗パタ
ーン検出手段に相当する。
【0044】バー幅カウンタ16から出力されたバー幅
データ群は、レーザビーム開始終了検出回路17に入力
される。このレーザビーム開始終了検出回路17は、バ
ー幅データ群の状態を検査し、一走査中におけるレーザ
ビームの走査開始時点及び走査終了時点を検出して、こ
れら開始時点及び終了時点を示す情報をバー幅データ群
に付加する。
【0045】レーザビームの走査開始時点及び走査終了
時点を示す情報が付加されたバー幅データ群は、バー幅
データ群格納バッファ2に一時格納される。このバー幅
データ群格納バッファ2は、バー幅カウンタ16から入
力されたバー幅データ群を順次格納するとともに、CP
U1からの求めに応じて、格納した順に一個づつこのバ
ー幅データ群をCPU1に渡す。
【0046】RAM6には、CPU1の作業領域が展開
される他、CPU1が上述のバーコード認識/復調処理
プログラムを実行することにより、一時待避バッファ6
a,第1復調完了バッファ6b,第2復調完了バッファ
6c,及び、第3復調完了バッファ6dが展開される。
【0047】一時待避バッファ6aは、各バー幅データ
群に対するバーコード認識/復調処理を実行している間
に、その処理の結果得られたデータ(復調データ)を退
避させておくバッファである。この一時退避バッファ6
aに退避される復調データのフォーマットを、図4乃至
図6に基づいて説明する。
【0048】図4は、スタートガードバーを起点にバー
コード21が走査された場合(スタートガードバーから
エンドガードバーまでを一度に走査した場合,以下「連
続読取」という)におけるデータフォーマットを示す。
この図4に示すように、この場合のデータフォーマット
は、先頭から順に、復調データの種別を示すエリア
(“01”の場合13桁バーコードの復調データである
ことを示す),検索方向を示すエリア(“01”の場合
スタートガードバーを含むことを示す),左データブロ
ックの復調データのキャラクタ数を示すエリア,右デー
タブロックの復調データのキャラクタ数を示すエリア,
左データブロックの復調データ格納エリア,右データブ
ロックの復調データ格納エリア,最初に復調を失敗した
データキャラクタを構成する4個のバー幅データを格納
するエリア,及び、最初に復調を失敗したデータキャラ
クタの直前(スタートガードバー側)のデータキャラク
タのキャラクタ長を格納するエリアから、構成される。
【0049】図5は、エンドガードバーを起点にバーコ
ード21が走査された場合におけるデータフォーマット
を示す。この図5に示すように、この場合のデータフォ
ーマットは、先頭から順に、復調データの種別を示すエ
リア(“01”の場合13桁バーコードの復調データで
あることを示す),検索方向を示すエリア(“02”の
場合エンドガードバーを含むがスタートガードバーを含
まないことを示す),左データブロックの復調データの
キャラクタ数を示すエリア,右データブロックの復調デ
ータのキャラクタ数を示すエリア,左データブロックの
復調データ格納エリア,右データブロックの復調データ
格納エリア,最初に復調を失敗したデータキャラクタを
構成する4個のバー幅データを格納するエリア,及び、
最初に復調を失敗したデータキャラクタの直前(エンド
ガードバー側)のデータキャラクタのキャラクタ長を格
納するエリアから、構成される。図6は、センターバー
の前後に亘ってバーコード21が走査された場合におけ
るデータフォーマットを示す。この図6に示すように、
この場合のデータフォーマットは、先頭から順に、復調
データの種別を示すエリア(“01”の場合13桁バー
コードの復調データであることを示す),検索方向を示
すエリア(“03”の場合センターバーのみを含むこと
を示す),左データブロックの復調データのキャラクタ
数を示すエリア,右データブロックの復調データのキャ
ラクタ数を示すエリア,左データブロックの復調データ
格納エリア,右データブロックの復調データ格納エリ
ア,右データブロックにお(順方向)いて最初に復調を
失敗したデータキャラクタを構成する4個のバー幅デー
タを格納するエリア,左データブロック(逆方向)にお
いて最初に復調を失敗したデータキャラクタを構成する
4個のバー幅データを格納するエリア,右データブロッ
ク(順方向)において最初に復調を失敗したデータキャ
ラクタの直前(センターバー側)のデータキャラクタの
キャラクタ長を格納するエリア,及び、左データブロッ
ク(逆方向)において最初に復調を失敗したデータキャ
ラクタの直前(センターバー側)のデータキャラクタの
キャラクタ長を格納するエリアから、構成される。
【0050】第1復調完了バッファ6bは、或るバー幅
データ群に対してバーコード認識/復調処理を実行した
結果として図4に示す復調データが得られた場合に、こ
の復調データを格納するバッファであり、図7に示す構
造を有している。
【0051】第2復調完了バッファ6cは、或るバー幅
データ群に対してバーコード認識/復調処理を実行した
結果として図5に示す復調データが得られた場合に、こ
の復調データを格納するバッファであり、図8に示す構
造を有している。
【0052】第3復調完了バッファ6dは、或るバー幅
データ群に対してバーコード認識/復調処理を実行した
結果として図6に示す復調データが得られた場合に、こ
の復調データを格納するバッファであり、図9に示す構
造を有している。
【0053】(バーコード認識/復調処理)次に、RO
M5に格納されているとともにCPU1によって実行さ
れるバーコード認識/復調処理プログラムの具体的内容
を、図10乃至図27のフローチャートに基づいて説明
する。
【0054】このバーコード認識/復調処理のメインル
ーチンである図10のフローチャートは、バーコード読
取装置に主電源が投入され、バー幅データ群格納バッフ
ァ2にバー幅データ群が格納されることによりスタート
する。そして、最初のS000において、CPU1は、
バー幅データ群格納バッファ2から、最も古いバー幅デ
ータ群を一つ取り出す。
【0055】次のS001では、CPU1は、S000
(又はS016)にて取り出したバー幅データ群に対し
て、復調開始位置(即ち、何れかのガードバー又はセン
ターバー)を大まかに求めるための第1次検索処理を実
行する。図11は、このS001にて実行される第1次
検索処理サブルーチンを示すフローチャートである。C
PU1は、このサブルーチンに入って最初に、処理対象
バー幅データ群からCHR−Lビット又はCHR−Fビ
ットが“1”であるバー幅データを探し出すために、S
101乃至S103のループ処理を実行する。なお、C
PU1は、このループ処理を最初に実行するときには、
検知対象のバー幅データの位置を示すバーコード検索ポ
インタを、処理対象バー幅データ群の先頭に合わせる。
【0056】このループに入って最初のS101では、
CPU1は、バーコード検索ポインタによって示される
バー幅データのCHR−Lビット又はCHR−Fビット
が、“1”であるか否かをチェックする。そして、その
バー幅データのCHR−Lビット及びCHR−Fビット
が“0”である場合には、CPU1は、処理をS102
に進める。
【0057】S102では、CPU1は、バーコード検
索ポインタをインクリメントして、次のバー幅データを
示すようにする。次のS103では、CPU1は、処理
対象バー幅データ群中に未検知のバー幅データが無くな
ったか否か(即ち、バーコード検索ポインタが処理対象
バー幅データ群の末端を超えたか否か)をチェックす
る。そして、既に未検知のバー幅データ群が無くなって
いる場合には、CPU1は、図10のメインルーチンに
おけるS016に処理を進める。これに対して、未だ未
検知のバー幅データ群が残っている場合には、CPU1
は、処理をS101に戻す。
【0058】これに対して、バーコード検索ポインタに
よって示されるバー幅データのCHR−Lビット又はC
HR−Fビットが“1”であるとS101にて判定した
場合には、CPU1は、処理をS104に進める。
【0059】S104では、CPU1は、バーコード検
索ポインタによって示されるバー幅データのW/Bビッ
トが黒バーを示すか否かをチェックする。そして、当該
バー幅データのW/Bビットが黒バーを示す場合には、
CPU1は、処理をS105に進める。
【0060】S105では、CPU1は、当該バー幅デ
ータのCHR−Fビットのみが“1”となっているか否
かをチェックする。そして、CPU1は、当該バー幅デ
ータのCHR−Fが“0”である場合,又は、当該バー
幅データのCHR−Lビットが“1”である場合には、
バー幅カウンタ16の作動ミスが生じていると判断し
て、処理をS102に進める。これに対して、当該バー
幅データのCHR−Fが“1”であり且つCHR−Lビ
ットが“0”である場合には、CPU1は、S106に
おいて、疑似スタートガードバー(スタートガードバー
らしきパターン)を検出したことを示すフラグdecd
irec=01をセットした後に、この第1次検索処理
サブルーチンを終了する。
【0061】一方、バーコード検索ポインタによって示
されるバー幅データのW/Bビットが白バーを示すとS
104にて判定された場合には、CPU1は、処理をS
107に進める。
【0062】S107では、CPU1は、バーコード検
索ポインタによって示されるバー幅データのCHR−F
ビットが“1”であるか否かをチェックする。そして、
CPU1は、当該バー幅データのCHR−Fが“0”で
ある場合には、処理をS111に進める。
【0063】これに対して、当該バー幅データのCHR
−Fが“1”である場合には、CPU1は、S108に
てセンターバーチェックを実行する。このセンターバー
チェックとは、その時点までに検出された5本のバー
(白バー,黒バー,白バー,黒バー,白バー)のバー幅
が等間隔であるか否かのチェックである。CPU1は、
このセンターバーチェックの結果が不良である場合には
(S109のNO)、処理をS111に進める。これに
対して、センターバーチェックの結果が良好である場合
には(S109のYES)、CPU1は、S110にお
いて「CBチェックフラグ」をONした後に、処理をS
111に進める。
【0064】S111では、CPU1は、バーコード検
索ポインタによって示されるバー幅データのCHR−L
ビットが“1”であるか否かをチェックする。そして、
CPU1は、当該バー幅データのCHR−Lが“0”で
ある場合には、処理をS115に進める。
【0065】これに対して、当該バー幅データのCHR
−Lが“1”である場合には、CPU1は、S112に
てエンドガードバーチェックを実行する。このエンドガ
ードバーチェックとは、その時点の直前に検出された白
バーがマージンとしての十分な幅を有しているか否かの
チェックである。CPU1は、このエンドガードバーチ
ェックの結果が不良である場合には(S113のN
O)、処理をS115に進める。これに対して、エンド
ガードバーチェックの結果が良好である場合には(S1
13のYES)、CPU1は、S114において「EG
Bチェックフラグ」をONした後に、処理をS115に
進める。
【0066】S115では、CPU1は、「CBチェッ
クフラグ」のみがONされているか否かをチェックす
る。そして、「CBチェックフラグ」のみがONされて
いる場合には、CPU1は、S116において、疑似セ
ンターバー(センターバーらしきパターン)を検出した
ことを示すフラグdecdirec=03をセットした
後に、この第1次検索処理サブルーチンを終了する。
【0067】一方、「CBチェックフラグ」のみがON
されているのではないとS115にて判定した場合に
は、CPU1は、次のS117において、「EGBチェ
ックフラグ」のみがONされているか否かをチェックす
る。そして、「EGBチェックフラグ」のみがONされ
ている場合には、CPU1は、S118において、疑似
エンドガードバー(エンドガードバーらしきパターン)
を検出したことを示すフラグdecdirec=02を
セットした後に、この第1次検索処理サブルーチンを終
了する。
【0068】一方、「EGBチェックフラグ」のみがO
NされているのではないとS117にて判定した場合に
は、CPU1は、次のS119において、「CBチェッ
クフラグ」及び「EGBチェックフラグ」の両方がON
されているか否かをチェックする。そして、両チェック
フラグがOFFされたままである場合には、CPU1
は、バー幅カウンタ16の動作ミスが生じているとし
て、処理をS102に進める。
【0069】一方、両チェックフラグがONされている
場合には、CPU1は、次のS120において、第11
キャラクタ及び第12キャラクタのキャラクタ長をチェ
ックする。即ち、エンドガードバーが検出されたとの仮
定の下で、このエンドガードバーに隣接する4本のバー
のバー幅総和,及び、その4本のバーに更に隣接する4
本バーのバー幅総和が、キャラクタ長としての許容範囲
に入っているか否かをチェックする。そして、CPU1
は、第11キャラクタ及び第12キャラクタのキャラク
タ長が許容範囲にある場合(S121のYES)には、
処理をS102に進め、第11キャラクタ又は第12キ
ャラクタのキャラクタ長が許容範囲にない場合(S12
1のNO)には、S122において、疑似センターバー
(センターバーらしきパターン)を検出したことを示す
フラグdecdirec=03をセットした後に、この
第1次検索処理サブルーチンを終了する。
【0070】第1次検索処理サブルーチンから処理が戻
された図10のメインルーチンでは、CPU1は、次の
S002において、第2次検索処理を実行する。図12
は、このS002にて実行される第2次検索処理サブル
ーチンを示すフローチャートである。
【0071】CPU1は、このサブルーチンに入って最
初のS201では、フラグdecrirecが“01”
とセットされているかどうかをチェックする。そして、
フラグdecrirecが“01”とセットされていな
い場合には、CPU1は、処理をS203に進める。こ
れに対して、フラグdecrirecが“01”とセッ
トされている場合には、CPU1は、S202におい
て、疑似スタートガードバー検出後のバーコード検索処
理である第1バーコード検出処理を実行する。図13及
び図14は、このS202にて実行される第1バーコー
ド検索処理サブルーチンを示すフローチャートである。
【0072】CPU1は、このサブルーチンに入って最
初のS301では、疑似スタートバードバーに続く第1
キャラクタの長さをチェックする。即ち、第1キャラク
タを構成する4個のバーのバー幅カウント値の総計が一
定値近傍内にあるかどうかをチェックする。そして、第
1キャラクタの長さが一定値近傍内にない場合には、C
PU1は、処理対象バー幅データ群がバーコード以外の
模様に基づくデータ群であるとみなして、S320にお
いて「有効ラベル検出フラグ」をクリアした後に、処理
を図10のメインルーチンにおけるS016に進める。
これに対して、第1キャラクタの長さが一定値近傍内に
ある場合には、CPU1は、処理をS302に進める。
【0073】S302では、CPU1は、隣接キャラク
タ(初期においては第1キャラクタに隣接する第2キャ
ラクタ)の長さをチェックする。そして、このキャラク
タの長さが一定値近傍内にある場合には、CPU1は、
処理をS306に進める。
【0074】S306では、CPU1は、この時点まで
にS301及びS302にて6キャラクタ分のキャラク
タ長チェックを完了したか否かをチェックする。そし
て、未だ6キャラクタ分のキャラクタ長チェックを完了
していない場合には、CPU1は、処理をS302に戻
す。これに対して、既に6キャラクタ分のキャラクタ長
チェックを完了した場合には、CPU1は、S307に
おいて「4桁フラグ」をクリアした後に、処理をS30
8へ進める。
【0075】一方、隣接キャラクタの長さが一定値近傍
内にないとS302にて判定した場合には、CPU1
は、S303において、S301及びS302にてキャ
ラクタ長が一定値近傍内にあると判定されたキャラクタ
の数が、3個未満であるか否かをチェックする。そし
て、キャラクタ長が一定値近傍内にあると判定されたキ
ャラクタの数が3個未満である場合には、CPU1は、
処理対象バー幅データ群の信頼性が低いとして、S32
0において「有効ラベル検出フラグ」をクリアした後
に、処理を図10のメインルーチンにおけるS016に
進める。
【0076】これに対して、キャラクタ長が一定値近傍
内にあると判定されたキャラクタの数が3個以上である
場合には、CPU1は、S304において、S301及
びS302にてキャラクタ長が一定値近傍内にあると判
定されたキャラクタの数が、4個であるか否かをチェッ
クする。そして、キャラクタ長が一定値近傍内にあると
判定されたキャラクタの数が4個でない場合には、CP
U1は、処理をS318に進める。
【0077】これに対して、キャラクタ長が一定値近傍
内にあると判定されたキャラクタの数が4個である場合
には、CPU1は、S305において「4桁フラグ」を
セットした後に、処理をS308に進める。
【0078】S308では、CPU1は、第4キャラク
タ(「4桁フラグ」がセットされている場合)又は第6
キャラクタ(「4桁フラグ」がクリアされている場合)
の長さを再度チェックする。そして、これら第4キャラ
クタ又は第6キャラクタの長さが一定近傍値内にない場
合には、CPU1は、S310において「4桁フラグ」
をクリアした後に(既にクリアされている場合にはS3
10をジャンプして)処理をS318に進める。
【0079】これに対して、第4キャラクタ又は第6キ
ャラクタの長さが一定近傍値内にある場合には、CPU
1は、S309において、センターバーチェックを実行
する。このセンターバーチェックとは、第4キャラクタ
(「4桁フラグ」がセットされている場合)又は第6キ
ャラクタ(「4桁フラグ」がクリアされている場合)に
隣接する5本のバーが、センターバーとして定められて
いる所定のパターン(夫々のバー幅が共に1モジュール
長であるパターン)と一致しているか否かのチェックで
ある。そして、センターバーチェックの結果が不良(N
G)である場合には、CPU1は、S310にて「4桁
フラグ」をクリアした後に、処理をS318に進める。
【0080】これに対して、センターバーチェックの結
果が良好(OK)である場合には、CPU1は、S31
1にて「センターバー検出フラグ」をセットする。即
ち、フラグgb−cb−fを“1”とセットする。
【0081】次のS312では、CPU1は、センター
バーに隣接する第5キャラクタ(「4桁フラグ」がセッ
トされている場合)又は第7キャラクタ(「4桁フラ
グ」がクリアされている場合)の長さをチェックする。
そして、第5キャラクタ又は第7キャラクタの長さが一
定値近傍にない場合には、CPU1は、処理をS318
に進める。これに対して、第5キャラクタ又は第7キャ
ラクタの長さが一定値近傍にある場合には、CPU1
は、処理をS313に進める。
【0082】S313では、CPU1は、隣接キャラク
タ(初期においては第5キャラクタに隣接する第6キャ
ラクタ,又は、第7キャラクタに隣接する第8キャラク
タ)の長さをチェックする。そして、このキャラクタの
長さが一定値近傍内にある場合には、CPU1は、処理
をS314に進める。
【0083】S314では、CPU1は、「4桁フラ
グ」がセットされているか否かをチェックする。そし
て、「4桁フラグ」がクリアされている場合には、CP
U1は、処理をS316に進める。これに対して、「4
桁フラグ」がセットされている場合には、CPU1は、
S315において、この時点までにS312及びS31
3にて4キャラクタ分のキャラクタ長チェックを完了し
たか否かをチェックする。そして、未だ4キャラクタ分
のキャラクタ長チェックを完了していない場合には、C
PU1は、処理をS316に進める。これに対して、既
に4キャラクタ分のキャラクタ長チェックを完了してい
る場合には、CPU1は、処理をS317へ進める。
【0084】S316では、CPU1は、この時点まで
にS312及びS313にて6キャラクタ分のキャラク
タ長チェックを完了したか否かをチェックする。そし
て、未だ6キャラクタ分のキャラクタ長チェックを完了
していない場合には、CPU1は、処理をS313に戻
す。これに対して、既に6キャラクタ分のキャラクタ長
チェックを行っている場合には、CPU1は、処理をS
317に進める。
【0085】S317では、CPU1は、第8キャラク
タ(「4桁フラグ」がセットされている場合)又は第1
2キャラクタ(「4桁フラグ」がクリアされている場
合)の長さを再度チェックする。そして、CPU1は、
これら第8キャラクタ又は第12キャラクタの長さが一
定値近傍内にない場合には、処理をS318に進め、第
8キャラクタ又は第12キャラクタの長さが一定値近傍
内にある、S321に進める。
【0086】S318では、CPU1は、有効キャラク
タ数検出処理を実行する。この有効キャラクタ数検出処
理では、CPU1は、S301、S302,S308に
てキャラクタ長が一定値近傍内にあると判定された左デ
ータブロックをなすキャラクタの数を、カウンタjun
−cntにセットするとともに、S312,S313,
S317にてキャラクタ長が一定値近傍内にあると判定
された右データブロックをなすキャラクタの数を、カウ
ンタgku−cntにセットする。この有効キャラクタ
数検出処理の完了後、CPU1は、処理をS319に進
める。
【0087】一方、S321では、CPU1は、「4桁
フラグ」がクリアされているか否かをチェックする。そ
して、CPU1は、「4桁フラグ」がクリアされている
場合には、処理をS322に進め、「4桁フラグ」がセ
ットされている場合には、処理をS325に進める。
【0088】S322では、CPU1は、簡易エンドキ
ャラクタ長チェックを実行する。即ち、第8キャラクタ
に隣接する3本のバーが、エンドガードバーとして定め
られている所定のパターン(夫々のバー幅が共に1モジ
ュール長であるパターン)と一致し、且つ、この3本の
バーに隣接する白バーが、エンドマージンとして定めら
れている長さ以上のバー幅を有しているか否かをチェッ
クする。そして、簡易エンドキャラクタ長チェックの結
果が不良(NG)である場合には、CPU1は、処理を
S324に進める。これに対して、簡易エンドキャラク
タ長チェックの結果が良好(OK)である場合には、C
PU1は、S323にて「エンドガードバー検出フラ
グ」をセットする。即ち、フラグgb−cb−fを
“2”に書き換える。CPU1は、このS323の完了
後、処理をS324に進める。
【0089】S324では、CPU1は、上述した有効
キャラクタ数検出処理を実行する。即ち、S301、S
302,S308にてキャラクタ長が一定値近傍内にあ
ると判定された左データブロックをなすキャラクタの数
を、カウンタjun−cntにセットするとともに、S
312,S313,S317にてキャラクタ長が一定値
近傍内にあると判定された右データブロックをなすキャ
ラクタの数を、カウンタgku−cntにセットする。
この有効キャラクタ数検出処理の完了後、CPU1は、
処理をS319に進める。
【0090】一方、S325では、CPU1は、エンド
マージンチェックを実行する。即ち、第12キャラクタ
に隣接する3本のバーが、エンドガードバーとして定め
られている所定のパターン(夫々のバー幅が共に1モジ
ュール長であるパターン)と一致し、且つ、この3本の
バーに隣接する白バーが、エンドマージンとして定めら
れている長さ以上のバー幅を有しているか否かをチェッ
クする。そして、エンドマージンチェックの結果が不良
(NG)である場合には、CPU1は、処理をS327
に進める。これに対して、エンドマージンチェックの結
果が良好(OK)である場合には、CPU1は、S32
6にて「エンドガードバー検出フラグ」をセットする。
即ち、フラグgb−cb−fを“2”に書き換える。C
PU1は、このS326の完了後、処理をS327に進
める。
【0091】S327では、CPU1は、上述した有効
キャラクタ数検出処理を実行する。即ち、S301、S
302,S308にてキャラクタ長が一定値近傍内にあ
ると判定された左データブロックをなすキャラクタの数
を、カウンタjun−cntにセットするとともに、S
312,S313,S317にてキャラクタ長が一定値
近傍内にあると判定された右データブロックをなすキャ
ラクタの数を、カウンタgku−cntにセットする。
この有効キャラクタ数検出処理の完了後、CPU1は、
処理をS319に進める。
【0092】S319では、CPU1は、「有効ラベル
検出フラグ」をセットする。その後、CPU1は、この
第1バーコード検出処理ルーチンを終了し、処理を図1
2の第2次検索処理ルーチンに戻す。第2次検索処理ル
ーチンでは、CPU1は、S202の完了後、処理をS
203に進める。
【0093】S203では、CPU1は、フラグdec
rirecが“03”とセットされているかどうかをチ
ェックする。そして、フラグdecrirecが“0
3”とセットされていない場合には、CPU1は、処理
をS205に進める。これに対して、フラグdecri
recが“03”とセットされている場合には、CPU
1は、S204において、疑似センターバー検出後のバ
ーコード検索処理である第2バーコード検出処理を実行
する。図15は、このS204にて実行される第2バー
コード検索処理サブルーチンを示すフローチャートであ
る。
【0094】CPU1は、このサブルーチンに入って最
初のS401では、疑似センターバーに対して順方向に
隣接したキャラクタ(8桁バーコードの場合には第5キ
ャラクタ,13桁バーコードの場合には第7キャラク
タ)の長さをチェックする。そして、第5キャラクタ又
は第7キャラクタの長さが一定値近傍内にない場合に
は、CPU1は、処理対象バー幅データ群の信頼性が低
いとして、S426において「有効ラベル検出フラグ」
をクリアした後に、処理を図10のメインルーチンにお
けるS016に進める。これに対して、第5キャラクタ
又は第7キャラクタの長さが一定値近傍内にある場合に
は、CPU1は、処理をS402に進める。
【0095】S402では、CPU1は、疑似センター
バードバーに対して逆方向に隣接したキャラクタ(8桁
バーコードの場合には第4キャラクタ,13桁バーコー
ドの場合には第6キャラクタ)の長さをチェックする。
そして、第4キャラクタ又は第6キャラクタの長さが一
定値近傍内にある場合には、CPU1は、処理をS40
4に進める。これに対して、第4キャラクタ又は第6キ
ャラクタの長さが一定値近傍内にない場合には、CPU
1は、S403において「逆方向データ無しフラグ」を
セットした後に、処理をS404に進める。
【0096】S404では、CPU1は、「逆方向デー
タ無しフラグ」がセットされているか否かをチェックす
る。そして、「逆方向データ無しフラグ」がセットされ
ている場合は、CPU1は、処理をS408に進める。
これに対して、「逆方向データ無しフラグ」がセットさ
れていない場合には、CPU1は、処理をS405に進
める。
【0097】S405では、CPU1は、第4キャラク
タ又は第6キャラクタに対して逆方向に隣接するキャラ
クタ(初期においては第4キャラクタに隣接する第3キ
ャラクタ,又は、第6キャラクタに隣接する第5キャラ
クタ)の長さをチェックする。そして、このキャラクタ
の長さが一定値近傍内にある場合には、CPU1は、処
理をS406に進める。
【0098】S406では、CPU1は、この時点まで
にS402及びS405にてキャラクタ長が一定値近傍
内にあると判定されたキャラクタ(逆方向に連続するキ
ャラクタ)の数をカウントする。
【0099】次のS407では、CPU1は、この時点
までにS402及びS405にて6キャラクタ分のキャ
ラクタ長チェックを完了したか否かをチェックする。そ
して、未だ6キャラクタ分のキャラクタ長チェックを完
了していない場合には、CPU1は、処理をS405に
戻す。これに対して、既に6キャラクタ分のキャラクタ
長チェックを完了した場合には、CPU1は、処理をS
408に進める。
【0100】一方、隣接キャラクタの長さが一定値近傍
内にないとS405にて判定した場合には、CPU1
は、処理をS408に進める。S408では、CPU1
は、第5キャラクタ又は第7キャラクタに対して順方向
に隣接するキャラクタ(初期においては第5キャラクタ
に隣接する第6キャラクタ,又は、第7キャラクタに隣
接する第8キャラクタ)の長さをチェックする。そし
て、このキャラクタの長さが一定値近傍内にある場合に
は、CPU1は、処理をS409に進める。
【0101】S409では、CPU1は、この時点まで
にS401及びS408にてキャラクタ長が一定値近傍
内にあると判定されたキャラクタ(順方向に連続するキ
ャラクタ)の数をカウントする。
【0102】次のS410では、CPU1は、この時点
までにS401及びS408にて6キャラクタ分のキャ
ラクタ長チェックを完了したか否かをチェックする。そ
して、未だ6キャラクタ分のキャラクタ長チェックを完
了していない場合には、CPU1は、処理をS408に
戻す。これに対して、既に6キャラクタ分のキャラクタ
長チェックを完了した場合には、CPU1は、処理をS
411に進める。
【0103】一方、隣接キャラクタの長さが一定値近傍
内にないとS408にて判定した場合には、CPU1
は、処理をS411に進める。S411では、CPU1
は、「逆方向データ無しフラグ」がセットされているか
否かをチェックする。そして、CPU1は、「逆方向デ
ータ無しフラグ」がセットされていなければ、処理をS
412に進め、「逆方向データ無しフラグ」がセットさ
れていれば、処理をS418に進める。
【0104】S412では、CPU1は、S406にて
カウントされた逆方向の有効キャラクタ数が“1”以上
であり且つS409にてカウントされた順方向の有効キ
ャラクタ数が“3”以上であるか、若しくは、S406
にてカウントされた逆方向の有効キャラクタ数が“3”
以上であり且つS409にてカウントされた順方向の有
効キャラクタ数が“1”以上であるか否かを、チェック
する。そして、何れの方向の有効キャラクタ数も“3”
未満である場合,及び、何れかの方向の有効キャラクタ
数が“0”である場合には、CPU1は、処理対象バー
幅データ群の信頼性が低いとして、S426にて「有効
ラベル検出フラグ」をクリアした後に、処理を図10の
メインルーチンにおけるS016に進める。これに対し
て、何れかの方向の有効キャラクタ数が“3”以上であ
り且つ他方向の有効キャラクタ数が“1”以上である場
合には、CPU1は、処理をS413に進める。
【0105】S413では、CPU1は、S406にて
カウントされた逆方向の有効キャラクタ数が“4(8桁
バーコードの場合)”又は“6(13桁バーコードの場
合)”であるか否かをチェックする。そして、CPU1
は、逆方向の有効キャラクタ数が“4”又は“6”でな
い場合には、処理をS416に進め、逆方向の有効キャ
ラクタ数が“4”又は“6”である場合には、処理をS
414に進める。
【0106】S414では、CPU1は、第1キャラク
タの長さを再チェックする。そして、CPU1は、第1
キャラクタの長さが一定値近傍内にない場合には、処理
をS416に進め、第1キャラクタの長さが一定値近傍
内にある場合には、処理をS415に進める。
【0107】S415では、CPU1は、S409にて
カウントされた順方向の有効キャラクタ数が“4(8桁
バーコードの場合)”又は“6(13桁バーコードの場
合)”であるか否かをチェックする。そして、CPU1
は、順方向の有効キャラクタ数が“4”又は“6”であ
る場合には、処理をS419に進め、順方向の有効キャ
ラクタ数が“4”又は“6”でない場合には、処理をS
416に進める。
【0108】S416では、CPU1は、有効キャラク
タ数検出処理を実行する。即ち、S409にてカウント
した順方向の有効キャラクタ数をカウンタgku−cn
tにセットするとともに、S406にてカウントした逆
方向の有効キャラクタ数をカウンタjun−cntにセ
ットする。この有効キャラクタ数検出処理の完了後、C
PU1は、S317にて「有効ラベル検出フラグ」をセ
ットした後に、この第2バーコード検出処理ルーチンを
終了し、図12の第2次検索処理ルーチンに戻る。
【0109】一方、S418では、CPU1は、S40
9にてカウントされた順方向の有効キャラクタ数が“4
(8桁バーコードの場合)”又は“6(13桁バーコー
ドの場合)”であるか否かをチェックする。そして、C
PU1は、順方向の有効キャラクタ数が“4”又は
“6”でない場合には、S426にて「有効ラベル検出
フラグ」をクリアした後に、処理を図10のメインルー
チンにおけるS016に進める。これに対して、順方向
の有効キャラクタ数が“4”又は“6”である場合に
は、CPU1は、処理をS419に進める。
【0110】S419では、CPU1は、第8キャラク
タ(S418にて順方向の有効キャラクタ数が“4”で
あると判定された場合)又は第12キャラクタ(S41
8にて順方向の有効キャラクタ数が“6”であると判定
された場合)の長さを再チェックする。そして、第8キ
ャラクタ又は第12キャラクタの長さが一定値近傍内に
ない場合には、CPU1は、処理をS425に進める。
これに対して、第8キャラクタ又は第12キャラクタの
長さが一定値近傍内にある場合には、CPU1は、処理
をS420に進める。
【0111】S420では、CPU1は、エンドマージ
ンチェックを行う。即ち、第8キャラクタ(S418に
て順方向の有効キャラクタ数が“4”であると判定され
た場合)又は第12キャラクタ(S418にて順方向の
有効キャラクタ数が“6”であると判定された場合)に
隣接する3本のバーが、エンドガードバーとして定めら
れている所定のパターン(夫々のバー幅が共に1モジュ
ール長であるパターン)と一致し、且つ、この3本のバ
ーに隣接する白バーが、エンドマージンとして定められ
ている長さ以上のバー幅を有しているか否かをチェック
する。そして、エンドマージンチェックの結果が不良
(NG)である場合には、CPU1は、処理をS425
に進める。これに対して、エンドマージンチェックの結
果が良好(OK)である場合には、CPU1は、処理を
S421に進める。
【0112】S425では、CPU1は、「逆方向無し
フラグ」がセットされているか否かをチェックする。そ
して、「逆方向無しフラグ」がセットされている場合に
は、CPU1は、S426にて「有効ラベル検出フラ
グ」をクリアした後に、処理を図10のメインルーチン
におけるS016に進める。これに対して、「逆方向無
しフラグ」がセットされていない場合には、CPU1
は、処理をS424に進める。
【0113】一方、S421では、CPU1は、S40
9にてカウントされた有効キャラクタ数が“4”である
か否かをチェックする。そして、CPU1は、有効キャ
ラクタ数が“4”でない場合には処理をS423に進
め、有効キャラクタが“4”である場合には、S422
において「4桁フラグ」をセットした後に、処理をS4
23に進める。
【0114】S423では、CPU1は、「エンドガー
ドバー検出フラグ」をセットする。即ち、フラグgb−
cb−fを“1”とセットする。その後、CPU1は、
処理をS424に進める。
【0115】S424では、CPU1は、有効キャラク
タ数検出処理を実行する。即ち、S409にてカウント
した順方向の有効キャラクタ数をカウンタgku−cn
tにセットするとともに、S406にてカウントした逆
方向の有効キャラクタ数をカウンタjun−cntにセ
ットする。この有効キャラクタ数検出処理の完了後、C
PU1は、S317にて「有効ラベル検出フラグ」をセ
ットした後に、この第2バーコード検出処理ルーチンを
終了し、図12の第2次検索処理ルーチンに戻る。
【0116】第2次検索処理ルーチンに戻ると、CPU
1は、処理をS205に進める。S205では、CPU
1は、フラグdecrirecが“02”とセットされ
ているかどうかをチェックする。そして、フラグdec
rirecが“02”とセットされていない場合には、
CPU1は、動作ミスが生じたものとして、処理を図1
0のメインルーチンにおけるS016に進める。これに
対して、フラグdecrirecが“02”とセットさ
れている場合には、CPU1は、S206において、疑
似エンドガードバー検出後のバーコード検索処理である
第3バーコード検出処理を実行する。図16は、このS
206にて実行される第3バーコード検索処理サブルー
チンを示すフローチャートである。
【0117】CPU1は、このサブルーチンに入って最
初のS501では、エンドキャラクタ長チェックを実行
する。即ち、疑似エンドガードバーに隣接した4本のバ
ーのバー幅総和をチェックする。そして、エンドキャラ
クタの長さが一定値近傍内にない場合には、CPU1
は、処理対象バー幅データ群の信頼性が低いとして、S
507において「有効ラベル検出フラグ」をクリアした
後に、処理を図10のメインルーチンにおけるS016
に進める。これに対して、エンドキャラクタの長さが一
定値近傍内にある場合には、CPU1は、処理をS50
2に進める。
【0118】S502及び次のS503では、CPU1
は、エンドキャラクタに隣接する第11キャラクタ及び
第10キャラクタの長さをチェックする。そして、第1
1キャラクタ又は第10キャラクタの長さが一定値近傍
内にない場合には、CPU1は、処理対象バー幅データ
群の信頼性が低いとして、S507において「有効ラベ
ル検出フラグ」をクリアした後に、処理を図10のメイ
ンルーチンにおけるS016に進める。これに対して、
CPU1は、第11キャラクタ及び第10キャラクタの
長さが共に一定値近傍内にある場合には、処理をS50
4に進める。
【0119】S504では、CPU1は、隣接キャラク
タ(初期においては第10キャラクタに隣接する第9キ
ャラクタ)の長さをチェックする。そして、CPU1
は、このキャラクタの長さが一定値近傍内にない場合に
は、処理をS508に進め、このキャラクタの長さが一
定値近傍内にある場合には、CPU1は、処理をS50
5に進める。
【0120】S505では、CPU1は、この時点まで
にS501乃至S504にて6キャラクタ分のキャラク
タ長チェックを完了したか否かをチェックする。そし
て、未だ6キャラクタ分のキャラクタ長チェックを完了
していない場合には、CPU1は、処理をS504に戻
す。これに対して、既に6キャラクタ分のキャラクタ長
チェックを完了した場合には、CPU1は、処理をS5
06に進める。
【0121】S506では、CPU1は、センターバー
チェックを行う。このセンターバーチェックとは、第7
キャラクタに隣接する5本のバーが、センターバーとし
て定められている所定のパターン(夫々のバー幅が共に
1モジュール長であるパターン)と一致しているか否か
のチェックである。そして、センターバーチェックの結
果が良好(OK)である場合には、CPU1は、あり得
ない状況であるとして、S507において「有効ラベル
検出フラグ」をクリアした後に、処理を図10のメイン
ルーチンにおけるS016に進める。これに対して、セ
ンターバーチェックの結果が不良(NG)である場合に
は、CPU1は、処理をS508に進める。
【0122】S508では、CPU1は、有効キャラク
タ数検出処理を実行する。即ち、S501乃至S504
にてキャラクタ長が一定値近傍内にあると判定されたキ
ャラクタの数をカウンタjun−cntにセットする。
この有効キャラクタ数検出処理の完了後、CPU1は、
S509において「有効ラベル検出フラグ」をセットし
た後に、この第3バーコード検出処理サブルーチンを終
了して、図12の第2次検索処理ルーチンに戻る。
【0123】第2次検索処理ルーチンでは、CPU1
は、S206の終了後、この第2次検索処理ルーチンを
終了し、処理を図10のメインルーチンに戻す。メイン
ルーチンでは、CPU1は、S002の終了後、S00
3において、バーコード復調処理を実行する(復調手段
に相当)。図17乃至図19は、このS003にて実行
されるバーコード復調サブルーチンを示すフローチャー
トである。
【0124】このサブルーチンに入って最初のS601
では、CPU1は、S106、S116,S118,又
はS122にて設定されたフラグdecdirecが
“1”であるか否かをチェックする。そして、フラグd
ecdirecが“1”であった場合(疑似スタートガ
ードバーが最初に検出された場合)には、CPU1は、
S602において、カウンタjun−cntの値を、変
数loop−cntにセットする。
【0125】次のS603では、CPU1は、処理対象
バー幅データ群における第1キャラクタの先頭バー(白
バー(a))位置に、復調ポインタをセットする。次
に、CPU1は、左データブロックをなすデータキャラ
クタ(その長さが一定値近傍内にあるとされたキャラク
タ)を順番に復調するために、S604乃至S610の
ループ処理を実行する。このループに入って最初のS6
04では、CPU1は、復調ポインタによって示される
キャラクタに対して、復調処理を実行する。具体的に
は、復調ポインタが示す位置に存する白バー(a)から
数えて3個目のバー(白バー(c))及び4個目のバー
(黒バー(d))のバー幅総和(δディスタンスT
1),並びに、復調ポインタが示す位置に存する白バー
(a)から数えて2個目のバー(黒バー(b))及び3
個目のバー(白バー(c))のバー幅総和(δディスタ
ンスT2)に基づいて、図29の表を検索し、対応する
復調データ(ODD/EVEN構成及び数値の組み合わ
せ)を読み出す。なお、δディスタンスT1及びT2が
3又は4である場合には、対応する復調データが2種類
づつあるので、これらのうちの何れであるかを特定する
ことができない。その場合には、最も右側の黒バー
(d)のモジュール数に基づいて図29の表を更に検索
し、何れの復調データに対応するのかを特定する。CP
U1は、このようにして読み出し且つ特定した復調デー
タを、一時退避バッファ6a内の該当個所(図4参照)
に格納する。
【0126】次のS605では、CPU1は、S604
での復調処理が成功したかどうかをチェックする。そし
て、CPU1は、復調処理が成功した場合には、処理を
S606に進め、復調処理が失敗した場合には、処理を
S607に進める。S607では、CPU1は、当該復
調処理の失敗が、このバーコード復調処理に入って初め
ての失敗であるか否かをチェックする。そして、初めて
の復調失敗である場合には、CPU1は、S608にお
いて、復調処理を失敗したデータキャラクタを構成する
4本分のバー幅データをセーブした後に、処理をS60
6に進める。これに対して、2回目以降の復調失敗であ
る場合には、CPU1は、左データブロックの復調処理
を打ち切るべく、処理をS611に進める。
【0127】S606では、CPU1は、変数loop
−cntを一つデクリメントする。次のS609では、
CPU1は、復調ポインタを、バー幅データ4個分進め
る。即ち、復調ポインタを、順方向に隣接するデータキ
ャラクタの先頭のバー(白バー(a))にセットする。
【0128】次のS610では、CPU1は、変数lo
op−cntが“0”であるか否かをチェックする。そ
して、変数loop−cntが未だ“0”に達していな
い場合には、CPU1は、処理をS604に戻す。これ
に対して、S604乃至S610のループ処理を繰り返
した結果、変数loop−cntが“0”に達した時に
は、CPU1は、処理をS611に進める。
【0129】S611では、CPU1は、S605にて
復調処理が成功したと判断したデータキャラクタの数が
3個以上であるか否かを、チェックする。そして、復調
成功したデータキャラクタの数が3個未満である場合に
は、CPU1は、S632にてバーコード検索ポインタ
をインクリメントした後に、処理を図10のS016に
進める。これに対して、復調成功したデータキャラクタ
の数が3個以上である場合には、CPU1は、処理をS
612に進める。
【0130】S612では、CPU1は、「4桁フラ
グ」がセットされているか否かをチェックする。そし
て、「4桁フラグ」がセットされている場合には、CP
U1は、S630において、S605にて復調処理が成
功したと判断したデータキャラクタの数が4個であるか
否かを、チェックする。そして、復調成功したデータキ
ャラクタの数が4個でない場合には、CPU1は、S6
32にてバーコード検索ポインタをインクリメントした
後に、処理を図10のS016に進める。これに対し
て、復調成功したデータキャラクタの数が4個である場
合には、CPU1は、S631において、フラグgb−
cb−fが“2”とセットされているか否かをチェック
する。そして、CPU1は、フラグgb−cb−fが
“2”とセットされている場合には処理をS616に進
め、フラグgb−cb−fが“2”とセットされていな
い場合には処理をS628に進める。
【0131】一方、「4桁フラグ」がセットされていな
いとS612にて判定した場合には、CPU1は、S6
13において、S605にて復調処理が成功したと判断
したデータキャラクタの数が6個であるか否かをチェッ
クする。そして、復調成功したデータキャラクタの数が
6個でない場合には、CPU1は、S629において、
608にてセーブした4本分のバー幅データ(復調失敗
したデータキャラクタを構成する4本のバーのバー幅デ
ータ),及び、当該復調失敗したデータキャラクタの直
前のデータキャラクタの長さを、一時退避バッファ6a
内の該当個所(図4参照)に格納する。S629の終了
後、CPU1は、処理をS629に進める。これに対し
て、復調成功したデータキャラクタの数が6個であると
S613にて判定した場合には、CPU1は、処理をS
614に進める。
【0132】S614では、CPU1は、フラグgb−
cb−fが“0”とセットされているか否かをチェック
する。そして、CPU1は、フラグgb−cb−fが
“0”とセットされている場合には、処理をS628に
進め、フラグgb−cb−fが“0”とセットされてい
ない場合には、処理をS615に進める。
【0133】S615では、CPU1は、カウンタgk
u−cntの値が“0”であるか否かをチェックする。
そして、カウンタgku−cntの値が“0”である場
合には、CPU1は、右データブロックをなすデータキ
ャラクタがないとして、処理をS628に進め、カウン
タgku−cntの値が“0”でない場合には、CPU
1は、右データブロックをなすデータキャラクタがある
として、処理をS616に進める。
【0134】S616では、CPU1は、カウンタgk
u−cntの値を、変数loop−cntにセットす
る。次のS617では、CPU1は、処理対象バー幅デ
ータ群における第5キャラクタ(「4桁フラグ」がセッ
トされている場合)又は第7キャラクタ(「4桁フラ
グ」がセットされていない場合)の先頭バー(白バー
(a))位置に、復調ポインタをセットする。
【0135】次に、CPU1は、右データブロックをな
すデータキャラクタ(その長さが一定値近傍内にあると
されたキャラクタ)を順番に復調するために、S618
乃至S624のループ処理を実行する。このループに入
って最初のS618では、CPU1は、復調ポインタに
よって示されるキャラクタに対して、復調処理を実行す
る。CPU1は、この復調処理によって得られた復調デ
ータを、一時退避バッファ6a内の該当個所(図4参
照)に格納する。
【0136】次のS619では、CPU1は、S618
での復調処理が成功したかどうかをチェックする。そし
て、CPU1は、復調処理が成功した場合には、処理を
S620に進め、復調処理が失敗した場合には、処理を
S621に進める。
【0137】S621では、CPU1は、当該復調処理
の失敗が、このバーコード復調処理に入って初めての失
敗であるか否かをチェックする。そして、初めての復調
失敗である場合には、CPU1は、S622において、
復調処理を失敗したデータキャラクタを構成する4本分
のバー幅データをセーブした後に、処理をS620に進
める。これに対して、2回目以降の復調失敗である場合
には、CPU1は、右データブロックの復調処理を打ち
切るべく、処理をS625に進める。
【0138】S620では、CPU1は、変数loop
−cntを一つデクリメントする。次のS623では、
CPU1は、復調ポインタを、バー幅データ4個分進め
る。即ち、復調ポインタを、順方向に隣接するデータキ
ャラクタの先頭のバー(白バー(a))にセットする。
【0139】次のS624では、CPU1は、変数lo
op−cntが“0”であるか否かをチェックする。そ
して、変数loop−cntが未だ“0”に達していな
い場合には、CPU1は、処理をS618に戻す。これ
に対して、S618乃至S624のループ処理を繰り返
した結果、変数loop−cntが“0”に達した時に
は、CPU1は、処理をS625に進める。
【0140】S625では、CPU1は、「4桁フラ
グ」がセットされているか否かをチェックする。そし
て、「4桁フラグ」がセットされている場合には、CP
U1は、処理をS628に進める。これに対して、「4
桁フラグ」がセットされていない場合には、CPU1
は、処理をS626に進める。
【0141】S626では、CPU1は、S619にて
復調処理が成功したと判断したデータキャラクタの数が
6個であるか否かをチェックする。そして、復調成功し
たデータキャラクタの数が6個である場合には、CPU
1は、処理をS628に進める。これに対して、復調成
功したデータキャラクタの数が6個でない場合には、C
PU1は、S627において、622にてセーブした4
本分のバー幅データ(復調失敗したデータキャラクタを
構成する4本のバーのバー幅データ),及び、当該復調
失敗したデータキャラクタの直前のデータキャラクタの
長さを、一時退避バッファ6a内の該当個所(図4参
照)に格納する。S627の終了後、CPU1は、処理
をS628に進める。
【0142】S628では、CPU1は、S604及び
S618にて格納した復調データ及びS629又はS6
27にて格納した4本分のバー幅データを含む一時退避
バッファ6a内のデータを、第1復調完了バッファ6b
(図7参照)に書き写す。このS628の終了後、CP
U1は、このバーコード復調処理ルーチンを終了し、図
10のメインルーチンに処理を戻す。
【0143】一方、フラグdecdirecが“1”で
ないとS601にて判定した場合には、CPU1は、S
633において、S106、S116,S118,又は
S122にて設定されたフラグdecdirecが
“2”であるか否かをチェックする。そして、フラグd
ecdirecが“2”であった場合(エンドガードバ
ーが最初に検出された場合)には、CPU1は、S63
4において、カウンタjun−cntの値を、変数lo
op−cntにセットする。
【0144】次のS635では、CPU1は、処理対象
バー幅データ群におけるエンドキャラクタの先頭バー
(白バー(a))位置に、復調ポインタをセットする。
次に、CPU1は、右データブロックをなすデータキャ
ラクタ(その長さが一定値近傍内にあるとされたキャラ
クタ)を逆方向に順番に復調するために、S636乃至
S642のループ処理を実行する。このループに入って
最初のS636では、CPU1は、復調ポインタによっ
て示されるキャラクタに対して、復調処理を実行する。
CPU1は、この復調処理によって得られた復調データ
を、一時退避バッファ6a内の該当個所(図5参照)に
格納する。
【0145】次のS637では、CPU1は、S636
での復調処理が成功したかどうかをチェックする。そし
て、CPU1は、復調処理が成功した場合には、処理を
S638に進め、復調処理が失敗した場合には、処理を
S639に進める。
【0146】S639では、CPU1は、当該復調処理
の失敗が、このバーコード復調処理に入って初めての失
敗であるか否かをチェックする。そして、初めての復調
失敗である場合には、CPU1は、S640において、
復調処理を失敗したデータキャラクタを構成する4本分
のバー幅データをセーブした後に、処理をS638に進
める。これに対して、2回目以降の復調失敗である場合
には、CPU1は、右データブロックの復調処理を打ち
切るべく、処理をS643に進める。
【0147】S638では、CPU1は、変数loop
−cntを一つデクリメントする。次のS641では、
CPU1は、復調ポインタを、バー幅データ4個分戻
す。即ち、復調ポインタを、逆方向に隣接するデータキ
ャラクタの先頭のバー(白バー(a))にセットする。
【0148】次のS642では、CPU1は、変数lo
op−cntが“0”であるか否かをチェックする。そ
して、変数loop−cntが未だ“0”に達していな
い場合には、CPU1は、処理をS636に戻す。これ
に対して、S636乃至S642のループ処理を繰り返
した結果、変数loop−cntが“0”に達した時に
は、CPU1は、処理をS643に進める。
【0149】S643では、CPU1は、S636にて
復調処理が成功したと判断したデータキャラクタの数が
3個以上であるか否かを、チェックする。そして、復調
成功したデータキャラクタの数が3個未満である場合に
は、CPU1は、S632にてバーコード検索ポインタ
をインクリメントした後に、処理を図10のS016に
進める。これに対して、復調成功したデータキャラクタ
の数が3個以上である場合には、CPU1は、処理をS
644に進める。
【0150】S644では、CPU1は、「4桁フラ
グ」がセットされているか否かをチェックする。そし
て、「4桁フラグ」がセットされている場合には、CP
U1は、S645において、S637にて復調処理が成
功したと判断したデータキャラクタの数が4個であるか
否かを、チェックする。そして、復調成功したデータキ
ャラクタの数が4個でない場合には、CPU1は、S6
32にてバーコード検索ポインタをインクリメントした
後に、処理を図10のS016に進める。これに対し
て、復調成功したデータキャラクタの数が4個である場
合には、CPU1は、処理をS628に進める。
【0151】一方、「4桁フラグ」がセットされていな
いとS644にて判定した場合には、CPU1は、S6
46において、S637にて復調処理が成功したと判断
したデータキャラクタの数が6個であるか否かをチェッ
クする。そして、CPU1は、復調成功したデータキャ
ラクタの数が6個である場合には、処理をS628に進
め、復調成功したデータキャラクタの数が6個でない場
合には、処理をS647に進める。S647では、CP
U1は、640にてセーブした4本分のバー幅データ
(復調失敗したデータキャラクタを構成する4本のバー
のバー幅データ),及び、当該復調失敗したデータキャ
ラクタの直前のデータキャラクタの長さを、一時退避バ
ッファ6a内の該当個所(図5参照)に格納する。S6
47の終了後、CPU1は、処理をS628に進める。
【0152】S628では、CPU1は、S636にて
格納した復調データ及びS640にて格納した4本分の
バー幅データを含む一時退避バッファ6a内のデータ
を、第2復調完了バッファ6c(図8参照)に書き写
す。このS628の終了後、CPU1は、このバーコー
ド復調処理ルーチンを終了し、図10のメインルーチン
に処理を戻す。
【0153】一方、フラグdecdirecが“2”で
ないとS633にて判定した場合には、CPU1は、S
648において、カウンタjun−cntの値を、変数
loop−cntにセットする。
【0154】次のS649では、CPU1は、処理対象
バー幅データ群における第4キャラクタ(「4桁フラ
グ」がセットされている場合)又は第6キャラクタ
(「4桁フラグ」がセットされていない場合)の先頭バ
ー(白バー(a))位置に、復調ポインタをセットす
る。
【0155】次に、CPU1は、左データブロックをな
すデータキャラクタ(その長さが一定値近傍内にあると
されたキャラクタ)を逆方向に順番に復調するために、
S650乃至S656のループ処理を実行する。このル
ープに入って最初のS650では、CPU1は、復調ポ
インタによって示されるキャラクタに対して、復調処理
を実行する。CPU1は、この復調処理によって得られ
た復調データを、一時退避バッファ6a内の該当個所
(図6参照)に格納する。
【0156】次のS651では、CPU1は、S650
での復調処理が成功したかどうかをチェックする。そし
て、CPU1は、復調処理が成功した場合には、処理を
S652に進め、復調処理が失敗した場合には、処理を
S653に進める。
【0157】S653では、CPU1は、当該復調処理
の失敗が、S650乃至S656のループ処理に入って
初めての失敗であるか否かをチェックする。そして、初
めての復調失敗である場合には、CPU1は、S654
において、復調処理を失敗したデータキャラクタを構成
する4本分のバー幅データをセーブした後に、処理をS
652に進める。これに対して、2回目以降の復調失敗
である場合には、CPU1は、左データブロックの復調
処理を打ち切るべく、処理をS657に進める。
【0158】S657では、CPU1は、変数loop
−cntを一つデクリメントする。次のS655では、
CPU1は、復調ポインタを、バー幅データ4個分戻
す。即ち、復調ポインタを、逆方向に隣接するデータキ
ャラクタの先頭のバー(白バー(a))にセットする。
【0159】次のS656では、CPU1は、変数lo
op−cntが“0”であるか否かをチェックする。そ
して、変数loop−cntが未だ“0”に達していな
い場合には、CPU1は、処理をS650に戻す。これ
に対して、S650乃至S656のループ処理を繰り返
した結果、変数loop−cntが“0”に達した時に
は、CPU1は、処理をS657に進める。
【0160】S657では、CPU1は、処理対象バー
幅データ群における第5キャラクタ(「4桁フラグ」が
セットされている場合)又は第7キャラクタ(「4桁フ
ラグ」がセットされていない場合)の先頭バー(白バー
(a))位置に、復調ポインタをセットする。
【0161】次のS658では、CPU1は、カウンタ
gku−cntの値を、変数loop−cntにセット
する。次に、CPU1は、右データブロックをなすデー
タキャラクタ(その長さが一定値近傍内にあるとされた
キャラクタ)を順方向に順番に復調するために、S65
9乃至S665のループ処理を実行する。このループに
入って最初のS659では、CPU1は、復調ポインタ
によって示されるキャラクタに対して、復調処理を実行
する。CPU1は、この復調処理によって得られた復調
データを、一時退避バッファ6a内の該当個所(図6参
照)に格納する。
【0162】次のS660では、CPU1は、S659
での復調処理が成功したかどうかをチェックする。そし
て、CPU1は、復調処理が成功した場合には、処理を
S661に進め、復調処理が失敗した場合には、処理を
S662に進める。
【0163】S662では、CPU1は、当該復調処理
の失敗が、S659乃至S665のループ処理に入って
初めての失敗であるか否かをチェックする。そして、初
めての復調失敗である場合には、CPU1は、S663
において、復調処理を失敗したデータキャラクタを構成
する4本分のバー幅データをセーブした後に、処理をS
661に進める。これに対して、2回目以降の復調失敗
である場合には、CPU1は、右データブロックの復調
処理を打ち切るべく、処理をS666に進める。
【0164】S661では、CPU1は、変数loop
−cntを一つデクリメントする。次のS664では、
CPU1は、復調ポインタを、バー幅データ4個分進め
る。即ち、復調ポインタを、順方向に隣接するデータキ
ャラクタの先頭のバー(白バー(a))にセットする。
【0165】次のS665では、CPU1は、変数lo
op−cntが“0”であるか否かをチェックする。そ
して、変数loop−cntが未だ“0”に達していな
い場合には、CPU1は、処理をS659に戻す。これ
に対して、S659乃至S665のループ処理を繰り返
した結果、変数loop−cntが“0”に達した時に
は、CPU1は、処理をS666に進める。
【0166】S666では、CPU1は、S650にて
復調成功した左データブロック中の復調データが1個以
上であり且つS659にて復調成功した右データブロッ
ク中の復調データが3個以上であるか、若しくは、S6
50にて復調成功した左データブロック中の復調データ
が3個以上であり且つS659にて復調成功した右デー
タブロック中の復調データが1個以上であるか否かを、
チェックする。そして、何れのブロック中の復調データ
も3個未満である場合,及び、何れかのブロック中の復
調データが0個である場合には、CPU1は、S632
にてバーコード検索ポインタをインクリメントした後
に、処理を図10のS016に進める。これに対して、
何れかのブロック中の復調データが3個以上であり且つ
他方向の復調データが1個以上である場合には、CPU
1は、処理をS667に進める。
【0167】S667では、CPU1は、S659にて
復調成功した左データブロック中の復調データが6個で
あるか否かをチェックする。そして、CPU1は、左デ
ータブロック中の復調データが6個であれば、処理をS
669に進め、左データブロック中の復調データが6個
でなければ、処理をS668に進める。S668では、
CPU1は、S654にてセーブした4本分のバー幅デ
ータ(復調失敗したデータキャラクタを構成する4本の
バーのバー幅データ),及び、当該復調失敗したデータ
キャラクタの直前のデータキャラクタの長さを、一時退
避バッファ6a内の該当個所(図6参照)に格納する。
S668の終了後、CPU1は、処理をS669に進め
る。
【0168】S669では、CPU1は、S663にて
セーブした4本分のバー幅データ(復調失敗したデータ
キャラクタを構成する4本のバーのバー幅データ),及
び、当該復調失敗したデータキャラクタの直前のデータ
キャラクタの長さを、一時退避バッファ6a内の該当個
所(図6参照)に格納する。S669の終了後、CPU
1は、処理をS628に進める。
【0169】S628では、CPU1は、S650及び
S659にて格納した復調データ並びにS668及びS
669にて格納したバー幅データを含む一時退避バッフ
ァ6a内のデータを、第3復調完了バッファ6d(図9
参照)に書き写す。このS628の終了後、CPU1
は、このバーコード復調処理ルーチンを終了し、図10
のメインルーチンに処理を戻す。
【0170】メインルーチンでは、CPU1は、S00
3の終了後、S004において、S003でのバーコー
ド復調処理対象となったバー幅データ群が連続読取によ
るものであるか否かをチェックする。このチェックは、
S323又はS326によってフラグgb−cb−fが
“2”とセットされているか否かに基づいて、行われ
る。そして、連続読取によるものでない場合,即ち、フ
ラグgb−cb−fが“0”又は“1”にセットされて
いる場合には、CPU1は、処理をS008に進める。
これに対して、連続読取によるものである場合,即ち、
フラグgb−cb−fが“2”にセットされている場合
には、CPU1は、処理をS005に進める。
【0171】S005では、CPU1は、S003のバ
ーコード復調処理によってバー幅データ群に含まれる全
データキャラクタに対する復調が完了したか否かをチェ
ックする。そして、全データキャラクタに対する復調が
完了している場合には、CPU1は、処理をS008に
進める。これに対して、全データキャラクタに対する復
調が完了していない場合には、CPU1は、処理をS0
06に進める。
【0172】S006では、CPU1は、S003のバ
ーコード復調処理において1キャラクタのみの復調を失
敗したのか否かを、チェックする。そして、2キャラク
タ以上の復調を失敗した場合には、CPU1は、処理を
S008に進める。これに対して、1キャラクタのみの
復調を失敗した場合には、CPU1は、S007におい
て、復調を失敗したキャラクタに対応する復調データを
推測するために、1キャラクタ推測処理を実行する(デ
ータ推測手段及びパリティ推測手段に相当)。図20
は、このS007にて実行される1キャラクタ推測処理
サブルーチンを示すフローチャートである。
【0173】このサブルーチンに入って最初のS701
では、「4桁フラグ」がセットされているか否かをチェ
ックする。そして、「4桁フラグ」がセットされている
場合には、キャラクタの推測は不可能なので、CPU1
は、直ちにこの1キャラクタ推測処理サブルーチンを終
了して、図10のメインルーチンに処理を戻す。これに
対して、「4桁フラグ」がセットされていない場合に
は、CPU1は、処理をS702に進める。
【0174】S702では、CPU1は、S003のバ
ーコード復調処理において復調を失敗したキャラクタの
位置が左データブロックであるか否かを、チェックす
る。そして、復調失敗したキャラクタの位置が右データ
ブロックである場合には、ODD/EVEN構成を推測
する必要がないので、CPU1は、処理をS705に進
める。これに対して、復調失敗したキャラクタの位置が
左データブロックである場合には、処理をS703に進
める。
【0175】S703では、CPU1は、上述したよう
に図30の表を用いて、復調成功した左データブロック
の5キャラクタに基づいて、復調失敗した1キャラクタ
のODD/EVEN構成を推測する(パリティ推測手段
に相当)。
【0176】次のS704では、CPU1は、S703
にて推測したODD/EVEN構成を、セーブする。S
704の終了後、CPU1は、処理をS705に進め
る。S705では、CPU1は、図30の表を用いて、
左データブロックをなす6キャラクタのODD/EVE
N構成(S704にてセーブされたODD/EVEN構
成を含む)に基づいて、対応するフラグキャラクタを算
出する。
【0177】次のS706では、CPU1は、復調成功
した11キャラクタの数値及びS705にて算出したフ
ラグキャラクタの数値に基づいて、モジュラス10チェ
ック(所定の条件式)の逆算を行い、復調失敗したキャ
ラクタにコード化されていた数値を算出する(データ推
測手段に相当)。
【0178】次のS707では、CPU1は、S706
にて算出した数値をセーブする。次のS708では、C
PU1は、S704にてセーブされたODD/EVEN
構成(S703が実行されなかった場合にはEVEN)
及びS707にてセーブされた数値に対応するバー幅パ
ターンを、図29の表に基づいて特定する。
【0179】次のS709では、CPU1は、第1復調
完了バッファ6b乃至第3復調完了バッファ6dのうち
S003によって復調データが格納されたものに格納さ
れている白バー(c)及び黒バー(d)のモジュール数
総和(δディスタンスT1)を、算出する。この算出に
おいては、CPU1は、同じバッファ6b〜6dに格納
されているキャラクタ長を、図31の座標におけるCに
代入する。そして、白バー(c)及び黒バー(d)のバ
ー幅総和の当該座標中での位置(モジュール数)を、少
数点以下の精度で算出する。そして、この算出された位
置(モジュール数)の小数点以下1位を四捨五入する。
【0180】次のS710では、CPU1は、第1復調
完了バッファ6b乃至第3復調完了バッファ6dのうち
S003によって復調データが格納されたものに格納さ
れている黒バー(b)及び白バー(c)のモジュール数
総和(δディスタンスT2)を、S709と同様にして
算出する。
【0181】次のS711では、CPU1は、第1復調
完了バッファ6b乃至第3復調完了バッファ6dのうち
S003によって復調データが格納されたものに格納さ
れている黒バー(b)のモジュール数を、S709と同
様にして算出する。
【0182】次のS712では、CPU1は、第1復調
完了バッファ6b乃至第3復調完了バッファ6dのうち
S003によって復調データが格納されたものに格納さ
れている黒バー(d)のモジュール数を、S709と同
様にして算出する。
【0183】次のS713では、CPU1は、S709
乃至S712にて算出されたモジュール数に基づいて、
1キャラクタ判定処理を実行する。図21は、S713
にて実行される1キャラクタ判定処理サブルーチンを示
すフローチャートである。
【0184】このフローチャートに入って最初のS80
1では、CPU1は、S708にて特定されたバー幅パ
ターンにおけるδディスタンスT1のモジュール数とS
709にて算出されたδディスタンスT1のモジュール
数とが一致しているか否かをチェックする(比較手段に
相当)。そして、CPU1は、両者が一致していない場
合には、処理をS803を進め、両者が一致している場
合には、処理をS802に進める。
【0185】S802では、CPU1は、S709での
モジュール数算出において算出された四捨五入前のδデ
ィスタンスT1の位置(δディスタンス同士の比率)が
グレーゾーン(0.5〜0.7,1.3〜1.7,2.
3〜2.7,3.3〜3.7,4.3〜4.7,5.3
〜5.5)の範囲内であるか否かをチェックする。そし
て、CPU1は、δディスタンスT1の位置(δディス
タンス同士の比率)がグレーゾーンの範囲内である場合
(第1の所定比率を超えて第2の所定比率内に収まった
場合)には、処理をS810に進め、グレーゾーンの範
囲内でない場合(第1の所定比率内に収まった場合)に
は、処理をS809に進める。
【0186】一方、S803では、CPU1は、S70
8にて特定されたバー幅パターンにおけるδディスタン
スT2のモジュール数とS710にて算出されたδディ
スタンスT2のモジュール数とが一致しているか否かを
チェックする(比較手段に相当)。そして、CPU1
は、両者が一致していない場合には、処理をS805を
進め、両者が一致している場合には、処理をS804に
進める。
【0187】S804では、CPU1は、S710での
モジュール数算出において算出された四捨五入前のδデ
ィスタンスT2の位置(δディスタンス同士の比率)が
グレーゾーンの範囲内であるか否かをチェックする。そ
して、CPU1は、δディスタンスT2の位置(δディ
スタンス同士の比率)がグレーゾーンの範囲内である場
合(第1の所定比率を超えて第2の所定比率内に収まっ
た場合)には、処理をS810に進め、グレーゾーンの
範囲内でない場合(第1の所定比率内に収まった場合)
には、処理をS809に進める。
【0188】一方、S805では、CPU1は、S70
8にて特定されたバー幅パターンにおける黒バー(b)
のモジュール数とS711にて算出された黒バー(b)
のモジュール数とが一致しているか否かをチェックする
(比較手段に相当)。そして、CPU1は、両者が一致
していない場合には、処理をS807を進め、両者が一
致している場合には、処理をS806に進める。
【0189】S806では、CPU1は、S711での
モジュール数算出において算出された四捨五入前の黒バ
ー(b)の位置(バー同士の比率)がグレーゾーンの範
囲内であるか否かをチェックする。そして、CPU1
は、黒バー(b)の位置(バー同士の比率)がグレーゾ
ーンの範囲内である場合(第1の所定比率を超えて第2
の所定比率内に収まった場合)には、処理をS810に
進め、グレーゾーンの範囲内でない場合(第1の所定比
率内に収まった場合)には、処理をS809に進める。
【0190】一方、S807では、CPU1は、S70
8にて特定されたバー幅パターンにおける黒バー(d)
のモジュール数とS712にて算出された黒バー(d)
のモジュール数とが一致しているか否かをチェックする
(比較手段に相当)。そして、CPU1は、両者が一致
していない場合には、処理をS812を進め、両者が一
致している場合には、処理をS808に進める。
【0191】S808では、CPU1は、S712での
モジュール数算出において算出された四捨五入前の黒バ
ー(d)の位置(バー同士の比率)がグレーゾーンの範
囲内であるか否かをチェックする。そして、CPU1
は、黒バー(d)の位置(バー同士の比率)がグレーゾ
ーンの範囲内である場合(第1の所定比率を超えて第2
の所定比率内に収まった場合)には、処理をS810に
進め、グレーゾーンの範囲内でない場合(第1の所定比
率内に収まった場合)には、処理をS812に進める。
【0192】CPU1は、S809では「グレーゾーン
フラグ」をセットし、S810では「グレーゾーンフラ
グ」をリセットする。CPU1は、S809又はS81
0の終了後、S811において、「判定OK」フラグを
セットした後に(有効化手段に相当)、この1キャラク
タ判定処理を終了して、処理を図20のルーチンに戻
す。
【0193】一方、S812では、CPU1は、「判定
NG」フラグをセットする。CPU1は、その後、この
1キャラクタ判定処理サブルーチンを終了して、処理を
図20のルーチンに戻す。
【0194】処理が戻された図20のルーチンでは、S
713の次のS714において、CPU1は、S811
にて「判定OK」フラグをセットしたのか、それもと、
S812にて「判定NG」フラグをセットしたのかを、
チェックする。そして、CPU1は、「判定OK」フラ
グをセットした場合には、S715において、S704
にてセーブしたODD/EVEN構成及びS707にて
セーブした数値を、復調失敗したデータキャラクタに対
応する復調データであるとして、第1復調完了バッファ
6b乃至第3復調完了バッファ6dのうちS003によ
って復調データが格納されたものにおける該当位置に書
き込む(有効化手段に相当)。一方、CPU1は、「判
定NG」フラグをセットした場合には、S715をジャ
ンプする。CPU1は、何れの場合におぴても、この1
キャラクタ推測処理サブルーチンを終了して、図10の
メインルーチンに処理を戻す。
【0195】図10のメインルーチンでは、CPU1
は、S007の終了後、処理をS008に進める。S0
08では、CPU1は、合成処理を実行する。図22
は、このS008にて実行される合成処理サブルーチン
を示すフローチャートである。このサブルーチンに入っ
て最初のS901では、CPU1は、桁数チェックを実
行する。即ち、第1復調完了バッファ6b乃至第3復調
完了バッファ6dのうちS003によって復調データが
格納されたものに格納されている復調データの総数と他
の何れかの復調完了バッファ6b〜6dに格納されてい
る復調データの総数との和を算出して、当該和が12桁
を超えているか否かをチェックする。
【0196】CPU1は、この桁数チェックの結果が不
良である場合には、処理をS902からS905へ進め
る。一方、桁数チェックの結果が良好である場合には、
CPU1は、処理をS902からS903へ進める。S
903では、CPU1は、重複部チェックを行う。即
ち、S901における桁数チェックの対象となった各復
調完了バッファ6b〜6dに含まれる復調データ同士が
相互に一部重複しているか否かをチェックする。そし
て、この重複部チェックの結果が不良である場合には、
CPU1は、処理をS904からS905へ進める。
【0197】S905では、CPU1は、全ての復調完
了バッファ6b〜6dについてS901の桁数チェック
(復調データの総数の加算)を行った否かをチェックす
る。そして、全ての復調完了バッファ6b〜6dについ
てS901の桁数チェックを未だ終わっていない場合に
は、CPU1は、処理をS901に戻す。これに対し
て、全ての復調完了バッファ6b〜6dについてS90
1の桁数チェックを完了しているしている場合には、C
PU1は、処理を図10のS016に進める。
【0198】一方、S903での重複部チェックの結果
が良好である場合には、CPU1は、この合成処理サブ
ルーチンを終了して、図10のメインルーチンに処理を
戻す。
【0199】図10のメインルーチンでは、CPU1
は、S008の終了後、処理をS009に進める。S0
09では、CPU1は、S008の合成処理の対象とな
った各復調完了バッファ6b〜6dに格納されている各
復調データを、その重複部を重ねた状態でつなぎ合わせ
た状態で、モジュラス10チェックを実行する。そし
て、CPU1は、モジュラス10チェックの結果が良好
である場合,即ち、バーコード21全体に対応する復調
データが再現できた場合には、処理をS013に進め
る。これに対して、CPU1は、モジュラス10チェッ
クの結果が不良である場合,即ち、バーコード21全体
に対応する復調データが再現できなかった場合には、処
理をS010に進める。
【0200】S010では、CPU1は、復調データが
1キャラクタ分足りないためにS009でのモジュラス
10チェックの結果が不良になったのであるか否かを、
チェックする。そして、復調データが1キャラクタ足り
ないためにモジュラス10チェックの結果が不良になっ
たのではない場合には、CPU1は、処理をS016に
進める。これに対して、復調データが1キャラクタ足り
ないためにモジュラス10チェックの結果が不良になっ
たのである場合には、CPU1は、S011において上
述した1キャラクタ推測処理(図20)を実行した後
に、処理をS012に進める。
【0201】S012では、CPU1は、1キャラクタ
の推測がなされた復調データに対して、再度モジュラス
10チェックを実行する。そして、CPU1は、モジュ
ラス10チェックの結果が不良である場合,即ち、バー
コード21全体に対応する復調データが再現できなかっ
た場合には、処理をS016に進める。これに対して、
CPU1は、モジュラス10チェックの結果が良好であ
る場合,即ち、バーコード21全体に対応する復調デー
タが再現できた場合には、処理をS013に進める。
【0202】S013では、CPU1は、一致回数チェ
ック処理を実行する。図23は、このS013にて実行
される一致回数チェックサブルーチンを示すフローチャ
ートである。このサブルーチンに入って最初のS050
では、CPU1は、モジュラス10チェックの対象とな
った復調データ中にS007又はS011での1キャラ
クタ推測処理によって推測された復調データが含まれて
いるか否かを、チェックする。そして、推測された復調
データが含まれていない場合には、CPU1は、処理を
S055に進める。この場合、モジュラス10チェック
の結果の信頼性が高いので、直ちに読取OK処理を実行
すべく、CPU1は、S055において「一致回数NG
フラグ」をリセットして、S056において「一致回数
OKフラグ」をセットした後に、この一致回数チェック
処理サブルーチンを終了する。
【0203】これに対して、推測された復調データが含
まれているとS050にて判定した場合には、CPU1
は、S051において、「グレーゾーンフラグ」がセッ
トされているか否かをチェックする。そして、「グレー
ゾーンフラグ」がセットされていない場合には、CPU
1は、処理をS055に進める。この場合、モジュラス
10チェックの結果の信頼性が比較的高いので、直ちに
読取OK処理を実行すべく、CPU1は、S055にお
いて「一致回数NGフラグ」をリセットして、S056
において「一致回数OKフラグ」をセットした後に、こ
の一致回数チェックサブルーチン処理を終了する(有効
化手段に相当)。
【0204】これに対して、「グレーゾーンフラグ」が
セットされている場合には、モジュラス10チェックの
結果の信頼性が比較的低いので、CPU1は、モジュラ
ス10チェック結果が2回にわたって良好となる事を読
取完了の条件とすべく、処理をS052に進める(有効
化手段に相当)。S052では、CPU1は、「一回一
致OKフラグ」が既にセットされているか否かをチェッ
クする。「一回一致OKフラグ」が未だセットされてい
ない場合は、モジュラス10チェック結果が良好となっ
たのが未だ1回目であるので、CPU1は、次のバー幅
データ群に対する副賞処理を実行すべく、S053にお
いて「一回一致OKフラグ」をセットして、S054に
おいて「一回回数NGフラグ」をセットした後に、この
一致回数チェック処理サブルーチンを終了する。これに
対して、「一回一致OKフラグ」が既にセットされてい
る場合は、モジュラス10チェック結果が良好になった
のが2回目であるので、CPU1は、読取OK処理を実
行すべく、S055において「一致回数NGフラグ」を
リセットして、S056において「一致回数OKフラ
グ」をセットした後に、この一致回数チェック処理サブ
ルーチンを終了する。
【0205】この一致回数チェック処理サブルーチンを
終了すると、CPU1は、処理を図10のメインルーチ
ンに戻す。図10のメインルーチンでは、CPU1は、
S013の終了後、処理をS014に進める。S014
では、CPU1は、「一致回数OKフラグ」がセットさ
れているか否かをチェックする。そして、未だ「一致回
数OKフラグ」がセットされていない場合には、CPU
1は、処理をS016に進める(有効化手段に相当)。
【0206】S016では、CPU1は、バー幅データ
群格納バッファ2から、次のバー幅データ群を一つ取り
出す。S016の完了後、CPU1は、処理をS001
に戻し、このバー幅データ群に対する認識/復調処理を
実行する。
【0207】これに対して、「一致回数OKフラグ」が
セットされているとS014にて判定した場合には、C
PU1は、S015において「読取OK処理」を実行す
る(有効化手段に相当)。即ち、バーコードの読取(復
調)完了を示す音声をスピーカ10から出力するととも
に、復調データに対応する商品20の販売価格等の情報
を発行ダイオード11によって表示する。これらの「読
取OK処理」を完了すると、CPU1は、このバーコー
ド認識/復調処理プログラムを終了する。
【0208】(バーコード読取装置の作用)次に、以上
のように構成された本実施形態によるバーコード読取装
置を動作を、図25乃至図28を参照して説明する。 <左データブロックの復調を失敗した場合>以下は、図
25に示すように、左データブロックの第3キャラクタ
(C3)がかすれているためにこの第3キャラクタ(C
3)の復調を失敗した場合におけるバーコード読取装置
の動作例の説明である。
【0209】いま、図25のように、走査ビームがバー
コード21のスタートガードバー(SGB)からエンド
ガードバー(EGB)までを、一挙に走査したとする。
この場合、第3キャラクタ(C3)が4本のバーとして
認識され、しかも、第3キャラクタ(C3)全体の長さ
が一定値近傍内のものとして認識されれば、S001で
の第1次検索処理では、疑似センターガードバーが検出
され(S106)、S002の第2次検索処理では、1
2個の有効キャラクタが検索される(S324)。そし
て、S003のバーコード復調処理では、第1キャラク
タ(C1)側から順番に各キャラクタの復調処理(S6
04,S618)がなされ、復調によって得られた各キ
ャラクタ毎の復調データが第1復調完了バッファ6bに
格納される。
【0210】但し、汚れ等の原因に因り第3キャラクタ
(C3)を構成する各バーのモジュール数が図29に示
す何れの組み合わせにも該当しないと認識されれば、こ
の第3キャラクタ(C3)の復調処理(S604)は失
敗するが、この第3キャラクタ(C3)を構成する4本
のバーのバー幅データは第1復調完了バッファ6bに格
納される。そして、第4キャラクタ(C4)以降につい
ては、復調処理(S604,S618)が継続される。
【0211】このようにしてバーコード復調処理(S0
03)が完了した場合は、連続読取りによって復調デー
タが得られた場合であり(S004)、全キャラクタの
復調が完了しておらず(S005)、1キャラクタのみ
復調が失敗しているので(S006)、S007の1キ
ャラクタ推測処理がなされる。
【0212】この1キャラクタ推測処理では、復調失敗
した第3キャラクタ(C3)が左データブロック内に含
まれているので(S702)、S703でのODD/E
VEN構成の推測がなされる。この場合、左データブロ
ック中における復調成功した他の5キャラクタのODD
/EVEN構成と一致している組み合わせは、図30の
表中においてフラグキャラクタ1に対応するもののみで
ある。従って、第1キャラクタ(C3)のODD/EV
EN構成が“EVEN(偶数パリティ)”であると推測
される。
【0213】また、S706では、復調成功した11キ
ャラクタの数値及びフラグキャラクタの数値に基づいて
モジュラス10チェックの逆算が実行されると、第3キ
ャラクタの数値が“0”であると算出される。
【0214】さらに、S708では、第3キャラクタ
(C3)について推測された復調データ(E−O)に対
応するバー幅パターン(白バー(a):1モジュール,
黒バー(b):1モジュール,白バー(c):2モジュ
ール,黒バー(d):3モジュール,δディスタンスT
1:3モジュール,δディスタンスT2:5モジュー
ル)が特定される。一方、S709〜S712では、第
1復調完了バッファ6aに格納されている4本のバーの
バー幅に対応するモジュール数,及び各δディスタンス
のモジュール数が、夫々算出される。そして、特定され
たモジュール数と算出されたモジュール数とが、各バー
及び各δディスタンス毎に比較され、何れかのバー又は
δディスタンスについての前者と後者との誤差が+/−
0.5内であば、推測されたODD/EVEN構成及び
数値の組み合わせが、第3キャラクタに対応する復調デ
ータとして有効化される(S714,S715)。
【0215】以上の場合は、連続読取による場合である
ので、モジュラス10チェック(S009)の結果は当
然に良好となる。しかし、印刷精度等に起因して上述の
誤差が+/−0.3〜0.5の範囲となったときには、
「グレーゾーンフラグ」がセットされるので(S81
1)、S013の一致回数チェック処理の結果、再度読
取処理がなされてモジュラス10チェック結果が良好と
なることが、推測データ有効化の条件となる(S01
4,S016)。これに対して、上述の誤差が+/−
0.3以内に収まっている場合には、「グレーゾーンフ
ラグ」がリセットされるので(S810)、直ちに推測
データが有効化される(S014,S015)。
【0216】<左データブロックの復調を失敗した場合
>以下は、図27に示すように、右データブロックの第
9キャラクタ(C9)がかすれているためにこの第9キ
ャラクタ(C9)の復調を失敗した場合におけるバーコ
ード読取装置の動作例の説明である。
【0217】いま、図27のように、走査ビームがバー
コード21のスタートガードバー(SGB)からエンド
ガードバー(EGB)までを、一挙に走査したとする。
この場合、第9キャラクタ(C9)が4本のバーとして
認識され、しかも、第9キャラクタ(C9)全体の長さ
が一定値近傍内のものとして認識されれば、S001で
の第1次検索処理では、疑似センターガードバーが検出
され(S106)、S002の第2次検索処理では、1
2個の有効キャラクタが検索される(S324)。そし
て、S003のバーコード復調処理では、第1キャラク
タ(C1)側から順番に各キャラクタの復調処理(S6
04,S618)がなされ、復調によって得られた各キ
ャラクタ毎の復調データが第1復調完了バッファ6bに
格納される。但し、第9キャラクタ(C9)の復調処理
(S618)は失敗するが、第9キャラクタ(C9)を
構成する4本のバーのバー幅データは第1復調完了バッ
ファ6bに格納される。そして、第9キャラクタ(C
9)以降については、復調処理(S618)が継続され
る。
【0218】このようにしてバーコード復調処理(S0
03)が完了した場合は、連続読取りによって復調デー
タが得られた場合であり(S004)、全キャラクタの
復調が完了しておらず(S005)、1キャラクタのみ
復調が失敗しているので(S006)、S007の1キ
ャラクタ推測処理がなされる。
【0219】この1キャラクタ推測処理では、復調失敗
した第9キャラクタ(C9)が右データブロック内に含
まれているので(S702)、S703でのODD/E
VEN構成の推測はなされず、当然にEVEN(偶数パ
リティ)であると判定される。但し、S705では、復
調成功した左データブロックの6キャラクタのODD/
EVEN構成に基づいて、フラグキャラクタの数値が
“1”であると算出される。
【0220】また、S706では、復調成功した11キ
ャラクタの数値及びフラグキャラクタの数値に基づいて
モジュラス10チェックの逆算が実行され、第9キャラ
クタ(C9)数値が“2”であると算出される。
【0221】さらに、S708では、第9キャラクタ
(C9)について推測された復調データ(E−2)に対
応するバー幅パターン(白バー(a):2モジュール,
黒バー(b):2モジュール,白バー(c):1モジュ
ール,黒バー(d):2モジュール,δディスタンスT
1:3モジュール,δディスタンスT2:3モジュー
ル)が特定される。一方、S709〜S712では、第
1復調完了バッファ6aに格納されている4本のバーの
バー幅に対応するモジュール数,及び各δディスタンス
のモジュール数が、夫々算出される。そして、特定され
たモジュール数と算出されたモジュール数とが、各バー
及び各δディスタンス毎に比較され、何れかのバー又は
δディスタンスについての前者と後者との誤差が+/−
0.5内であば、推測されたODD/EVEN構成及び
数値の組み合わせが、第3キャラクタに対応する復調デ
ータとして有効化される(S714,S715)。
【0222】以上の場合は、連続読取による場合である
ので、モジュラス10チェック(S009)の結果は当
然に良好となる。しかし、印刷精度等に起因して上述の
誤差が+/−0.3〜0.5の範囲となったときには、
「グレーゾーンフラグ」がセットされるので(S81
1)、S013の一致回数チェック処理の結果、再度読
取処理がなされてモジュラス10チェック結果が良好と
なることが、推測データ有効化の条件となる。これに対
して、上述の誤差が+/−0.3以内に収まっている場
合には、「グレーゾーンフラグ」がリセットされるので
(S810)、直ちに推測データが有効化される。
【0223】以上説明したように、本第1実施形態によ
れば、バーコード21の掠れ等に因って1キャラクタの
みの復調が失敗した場合でも、復調成功した他のキャラ
クタの復調データに基づいて、この復調失敗したキャラ
クタに対応する復調データを推測することができる。し
かも、推測された復調データに対応するバーコードパタ
ーンと実際に得られたバー幅データとを比較することに
より、この推測が正しいか否かの検証もできる。従っ
て、信頼性の高い推測を行うことが可能となる。
【0224】
【実施形態2】上述した実施形態1によると、連続読取
の場合に限らず、1個のバーコード21を複数回の走査
によって分割して読み取るとともに、夫々の走査によっ
て得られたバー幅データ群を夫々復調し、夫々の復調に
よって得られた複数の復調データを合成する「分割読
取」の場合にも、復調失敗した1キャラクタの推測が可
能となる。しかしながら、連続読取と分割読取とを比較
した場合、連続読取によって得られた復調データはより
信頼性が高い。そこで、本第2実施形態では、復調デー
タが連続読取によって得られたものであるか分割読取に
よって得られたものであるかに依り、読取OKとするの
に必要な一致回数(モジュラス10チェック結果が良好
となる回数)を変化させている。
【0225】なお、この「分割読取」には、一個のバー
コード21を3回の走査によって分割して読み取るとと
もに、各回の走査が左データブロック及び右データブロ
ックにおいて重複する「3−1読取」が含まれる。但
し、この場合、重複部が2箇所生じるので、これら複数
箇所の重複部において夫々キャラクタの推測がなされる
可能性が生じる。このようにして2箇所においてキャラ
クタの推測を行ってしまうと、推測結果に対する信頼性
が著しく下がってしまう。そこで、本第2実施形態にお
いては、「3−1分割読取」の場合には、キャラクタの
復調をしないようにしている。
【0226】図24は、本発明の第2の実施形態におい
て図10のS013で実行される一致回数チェック処理
サブルーチンを示すフローチャートである。このサブル
ーチンに入って最初のS100では、CPU1は、モジ
ュラス10チェックの対象となった復調データ中にS0
07又はS011での1キャラクタ推測処理によって推
測された復調データが含まれているか否かを、チェック
する。そして、推測された復調データが含まれていない
場合には、CPU1は、処理をS1007に進める。こ
の場合、モジュラス10チェックの結果の信頼性が高い
ので、直ちに読取OK処理を実行すべく、CPU1は、
S1007において「一致回数NGフラグ」をリセット
して、S1008において「一致回数OKフラグ」をセ
ットした後に、この一致回数チェック処理サブルーチン
を終了する。
【0227】これに対して、推測された復調データが含
まれているとS1001にて判定した場合には、CPU
1は、S1002において、モジュラス10チェックの
対象となった復調データが連続読取によるものであるか
否かをチェックする。そして、連続読取による復調デー
タである場合には、CPU1は、処理をS1007に進
める。この場合、モジュラス10チェックの結果の信頼
性が高いので、直ちに読取OK処理を実行すべく、CP
U1は、S1007において「一致回数NGフラグ」を
リセットして、S1008において「一致回数OKフラ
グ」をセットした後に、この一致回数チェック処理サブ
ルーチンを終了する(有効化手段に相当)。
【0228】これに対して、復調データが連続読取によ
るものでないとS1002にて判定した場合には、モジ
ュラス10チェックの結果の信頼性が比較的低いので、
CPU1は、モジュラス10チェック結果が2回にわた
って良好となる事を読取完了の条件とすべく、処理をS
1003に進める(有効化手段に相当)。S1003で
は、CPU1は、モジュラス10チェックの対象となっ
た復調データが3−1分割読取によるものであるか否か
をチェックする。そして、3−1読取による復調データ
である場合には、CPU1は、処理をS1006に進め
る。この場合、復調データの信頼性が低いので、CPU
1は、「一致回数NGフラグ」をリセットして、この一
致回数チェック処理サブルーチンを終了する。
【0229】これに対して、復調データが3−1分割読
取によるものでないとS1003にて判定した場合に
は、CPU1は、C1004において、「一回一致OK
フラグ」が既にセットされているか否かをチェックす
る。「一回一致OKフラグ」が未だセットされていない
場合は、モジュラス10チェック結果が良好となったの
が未だ1回目であるので、CPU1は、次のバー幅デー
タ群に対する復調処理を実行すべく、S1005におい
て「一回一致OKフラグ」をセットして、S1006に
おいて「一致回数NGフラグ」をセットした後に、この
一致回数チェック処理サブルーチンを終了する。これに
対して、「一回一致OKフラグ」が既にセットされてい
る場合は、モジュラス10チェック結果が良好になった
のが2回目であるので、CPU1は、読取OK処理を実
行すべく、S1007において「一致回数NGフラグ」
をリセットして、S1008において「一致回数OKフ
ラグ」をセットした後に、この一致回数チェック処理サ
ブルーチンを終了する。
【0230】この一致回数チェック処理サブルーチンを
終了すると、CPU1は、処理を図10のメインルーチ
ンに戻す。本第2実施形態におけるその他の構成及び動
作は第1実施形態のものと全く同じであるので、その説
明を省略する。
【0231】
【発明の効果】以上のように構成された本発明のバーコ
ード読取装置及びバーコード読取方法によると、1キャ
ラクタの復調ができない場合には、他のキャラクタを復
調して得られた復調データに基づいて、復調を失敗した
1キャラクタにコード化されていたデータを推測するこ
とができる。その結果、読み取り成功率を向上させるこ
とができる。
【図面の簡単な説明】
【図1】 本発明の原理を示す原理図
【図2】 本発明の実施の形態によるバーコード読取装
置のブロック図
【図3】 バー幅データのフォーマットを示す図
【図4】 疑似スタートガードバー検出後に一時退避バ
ッファ内に形成される復調データの構成を示す図
【図5】 疑似エンドガードバー検出後に一時退避バッ
ファ内に形成される復調データの構成を示す図
【図6】 疑似センターバー検出後に一時退避バッファ
内に形成される復調データの構成を示す図
【図7】 第1復調完了バッファの構成図
【図8】 第2復調完了バッファの構成図
【図9】 第3復調完了バッファの構成図
【図10】 図2のCPUで実行されるバーコード認識
/復調処理プログラムの内容を示すフローチャート
【図11】 図10のS001にて実行される第1次検
索処理サブルーチンの内容を示すフローチャート
【図12】 図10のS002にて実行される第2次検
索処理サブルーチンの内容を示すフローチャート
【図13】 図12のS202にて実行される第1バー
コード検出処理サブルーチンの内容を示すフローチャー
【図14】 図12のS202にて実行される第1バー
コード検出処理サブルーチンの内容を示すフローチャー
【図15】 図12のS204にて実行される第2バー
コード検出処理サブルーチンの内容を示すフローチャー
【図16】 図12のS206にて実行される第3バー
コード検出処理サブルーチンの内容を示すフローチャー
【図17】 図10のS003にて実行されるバーコー
ド復調処理サブルーチンの内容を示すフローチャート
【図18】 図10のS003にて実行されるバーコー
ド復調処理サブルーチンの内容を示すフローチャート
【図19】 図10のS003にて実行されるバーコー
ド復調処理サブルーチンの内容を示すフローチャート
【図20】 図10のS007及びS011にて実行さ
れる1キャラクタ推測処理サブルーチンの内容を示すフ
ローチャート
【図21】 図20のS713にて実行される1キャラ
クタ判定処理サブルーチンの内容を示すフローチャート
【図22】 図10のS008にて実行される合成処理
サブルーチンの内容を示すフローチャート
【図23】 図10のS013にて実行される一致回数
チェック処理サブルーチンの内容を示すフローチャート
【図24】 本発明の第2実施形態において図10のS
013にて実行される一致回数チェック処理サブルーチ
ンの内容を示すフローチャート
【図25】 バーコードの左データブロック中の1キャ
ラクタを復調失敗した場合の例を示す図
【図26】 図25における復調失敗した1キャラクタ
のバー幅パターンを示す図
【図27】 バーコードの右データブロック中の1キャ
ラクタを復調失敗した場合の例を示す図
【図28】 図27における復調失敗した1キャラクタ
のバー幅パターンを示す図
【図29】 バーコードに含まれるデータキャラクタの
バー幅パターンと復調データとの組み合わせを示す表
【図30】 バーコードに含まれる各データキャラクタ
のODD/EVEN構成とフラグキャラクタとの組み合
わせを示す表
【図31】 モジュール数算出に用いられる座標
【符号の説明】
1 CPU 2 バー幅データ群格納バッファ 6 RAM 6a 一時退避バッファ 6b 第1復調完了バッファ 6c 第2復調完了バッファ 6d 第3復調完了バッファ 13 半導体レーザー 14 走査光学系 15 A/D変換器 16 バー幅カウンタ 18 受光素子 21 バーコード
───────────────────────────────────────────────────── フロントページの続き (72)発明者 川合 弘晃 神奈川県川崎市中原区上小田中4丁目1 番1号 富士通株式会社内 (72)発明者 岩口 功 神奈川県川崎市中原区上小田中4丁目1 番1号 富士通株式会社内 (72)発明者 佐藤 伸一 神奈川県川崎市中原区上小田中4丁目1 番1号 富士通株式会社内 (56)参考文献 特開 平3−31980(JP,A) 特開 平5−298472(JP,A) 特開 平8−180126(JP,A) (58)調査した分野(Int.Cl.7,DB名) G06K 7/10 G06K 7/00

Claims (11)

    (57)【特許請求の範囲】
  1. 【請求項1】 所定の条件式を満足する所定個数のデー
    タを夫々コード化して得られた複数のデータキャラクタ
    を格納するバーコードを読み取り、読み取られた明暗パ
    ターンを検出する明暗パターン検出手段と、 この明暗パターン検出手段によって検出された明暗パタ
    ーンを前記データキャラクタ毎に復調して、復調された
    データを出力する復調手段と、 前記バーコード中の一個のデータキャラクタの復調がで
    きない場合に、前記バーコード中の他のデータキャラク
    タを前記復調手段が復調することによって得られた復調
    データに基づいて前記条件式を逆算して、前記復調手段
    による復調ができなかったデータキャラクタにコード化
    されていたデータを推測するデータ推測手段と 前記復調手段による復調ができなかったデータキャラク
    タを構成するバー幅パターンと、前記データ推測手段に
    よって推測されたデータに対応するバー幅パターンとを
    比較する比較手段と、 この比較手段の結果、両バー幅パターンが少なくとも一
    部において一致している場合にのみ、前記データ推測手
    段によって推測されたデータを有効化する有効化手段と
    を備える ことを特徴とするバーコード読取装置。
  2. 【請求項2】 前記データキャラクタは、偶数パリティ
    又は奇数パリティの区別と前記データとをコード化して
    得られたものであり、 前記バーコードには、前記偶数パリティ及び前記奇数パ
    リティの所定の組み合わせのうちの何れか一つの組み合
    わせに従って、複数の前記データキャラクタが格納され
    ていることを特徴とする請求項1記載のバーコード読取
    装置。
  3. 【請求項3】 前記復調手段は、前記明暗パターン検出
    手段によって検出された明暗パターンを、前記データキ
    ャラクタ毎に復調して、前記データ及び前記偶数パリテ
    ィ又は奇数パリティの区別を出力するとともに、 前記バーコード中の一個のデータキャラクタのみの復調
    を前記復調手段ができなかった場合に、前記バーコード
    中の他のデータキャラクタを前記復調手段が復調するこ
    とによって得られた前記偶数パリティ又は奇数パリティ
    の区別の組み合わせに一致する前記所定の組み合わせを
    特定し、前記復調手段による復調ができなかったデータ
    キャラクタに対応する前記偶数パリティ又は奇数パリテ
    ィの区別を前記特定した組み合わせから読み出すパリテ
    ィ推測手段を更に備えることを特徴とする請求項2記載
    のバーコード読取装置。
  4. 【請求項4】 前記比較手段は、前記両バー幅パターン
    を構成する各バー同士のバー幅を比較するとともに、 前記有効化手段は、前記何れかのバー同士のバー幅の比
    率が所定比率内に収まっている場合に、前記推測された
    データを有効化することを特徴とする請求項記載のバ
    ーコード読取装置。
  5. 【請求項5】 前記有効化手段は、 前記何れかのバー同士のバー幅の比率が第1の所定比率
    内に収まっている場合には、直ちに前記データを有効化
    するが、 前記バー同士のバー幅の比率が前記第1の所定比率を超
    えた第2の所定比率内である場合には、前記明暗パター
    ン検出手段,前記復調手段及び前記データ推測手段を再
    起動させるとともに、この再起動の結果前記何れかのバ
    ー同士のバー幅の比率が第2の所定比率内に収まったと
    きに限って前記データを有効化することを特徴とする請
    求項記載のバーコード読取装置。
  6. 【請求項6】 前記復調手段による復調ができなかった
    データキャラクタを構成するバー幅パターンと、前記デ
    ータ推測手段によって推測されたデータ及び前記パリテ
    ィ推測手段によって推測された前記偶数パリティ又は奇
    数パリティの区別に対応するバー幅パターンとを比較す
    る比較手段と、 この比較手段の結果、両バー幅パターンが少なくとも一
    部において一致している場合にのみ、前記データ推測手
    段によって推測されたデータ及び前記パリティ推測手段
    によって推測された前記偶数パリティ又は奇数パリティ
    の区別を有効化する有効化手段とを更に備えることを特
    徴とする請求項3記載のバーコード読取装置。
  7. 【請求項7】 前記比較手段は、前記両バー幅パターン
    を構成する各バー同士のバー幅を比較するとともに、 前記有効化手段は、前記何れかのバー同士のバー幅の比
    率が所定比率内に収まっている場合に、前記推測された
    データ及び前記偶数パリティ又は奇数パリティの区別を
    有効化することを特徴とする請求項記載のバーコード
    読取装置。
  8. 【請求項8】 前記有効化手段は、 前記何れかのバー同士のバー幅の比率が第1の所定比率
    内に収まっている場合には、直ちに前記データを有効化
    するが、 前記バー同士のバー幅の比率が前記第1の所定比率を超
    えた第2の所定比率内である場合には、前記明暗パター
    ン検出手段,前記復調手段,前記データ推測手段及び前
    記パリティ推測手段を再起動させるとともに、この再起
    動の結果前記何れかのバー同士のバー幅の比率が第2の
    所定比率内に収まったときに限って前記データ及び前記
    偶数パリティ又は奇数パリティの区別を有効化すること
    を特徴とする請求項記載のバーコード読取装置。
  9. 【請求項9】 前記明暗パターン検出手段による一回の
    走査によって得られた明暗パターンに基づいて前記バー
    コード中の一個以外のデータキャラクタを前記復調手段
    が復調した場合には、前記データ推測手段によって推測
    されたデータを直ちに有効化し、前記明暗パターン検出
    手段による複数回の走査によって得られた明暗パターン
    に基づいて前記バーコード中の一個以外のデータキャラ
    クタを前記復調手段が復調した場合には、前記明暗パタ
    ーン検出手段,前記復調手段及び前記データ推測手段を
    再起動させるとともに、この再起動の結果前記データ推
    測手段が推測したデータを有効化する有効化手段を更に
    備えることを特徴とする請求項1記載のバーコード読取
    装置。
  10. 【請求項10】 前記明暗パターン検出手段による一回
    の走査によって得られた明暗パターンに基づいて前記バ
    ーコード中の一個以外のデータキャラクタを前記復調手
    段が復調した場合には、前記データ推測手段によって推
    測されたデータ及び前記パリティ推測手段によって推測
    された前記偶数パリティ又は奇数パリティの区別を直ち
    に有効化し、前記明暗パターン検出手段による複数回の
    走査によって得られた明暗パターンに基づいて前記バー
    コード中の一個以外のデータキャラクタを前記復調手段
    が復調した場合には、前記明暗パターン検出手段,前記
    復調手段,前記データ推測手段及び前記パリティ推測手
    段を再起動させるとともに、この再起動の結果前記デー
    タ推測手段が推測したデータ及び前記パリティ推測手段
    が推測した前記偶数パリティ又は奇数パリティの区別を
    有効化する有効化手段を更に備えることを特徴とする請
    求項3記載のバーコード読取装置。
  11. 【請求項11】 所定の条件式を満足する所定個数のデ
    ータを夫々コード化して得られた複数のデータキャラク
    タを格納するバーコードを読み取り、 読み取られた明暗パターンを検出し、 検出された明暗パターンを、前記データキャラクタ毎に
    復調して、復調されたデータを出力し、 前記バーコード中の一個のデータキャラクタの復調がで
    きない場合には、前記バーコード中の他のデータキャラ
    クタを復調することによって得られたデータに基づいて
    前記条件式を逆算して、復調手段による復調ができなか
    ったデータキャラクタにコード化されていたデータを推
    し、 前記復調手段による復調ができなかったデータキャラク
    タを構成するバー幅パターンと、前記推測されたデータ
    に対応するバー幅パターンとを比較し、 この比較の結果、両バー幅パターンが少なくとも一部に
    おいて一致している場合にのみ、前記推測されたデータ
    を有効化する ことを特徴とするバーコード読取方法。
JP32468197A 1997-11-26 1997-11-26 バーコード読取装置及びバーコード読取方法 Expired - Fee Related JP3472691B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP32468197A JP3472691B2 (ja) 1997-11-26 1997-11-26 バーコード読取装置及びバーコード読取方法
US09/069,946 US6032862A (en) 1997-11-26 1998-04-30 Bar code reader and bar code reading method
DE69835492T DE69835492T2 (de) 1997-11-26 1998-06-04 Verfahren und Gerät zum Lesen von Strichkoden
EP98304432A EP0919946B1 (en) 1997-11-26 1998-06-04 Bar code reader and bar code reading method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP32468197A JP3472691B2 (ja) 1997-11-26 1997-11-26 バーコード読取装置及びバーコード読取方法

Publications (2)

Publication Number Publication Date
JPH11161734A JPH11161734A (ja) 1999-06-18
JP3472691B2 true JP3472691B2 (ja) 2003-12-02

Family

ID=18168548

Family Applications (1)

Application Number Title Priority Date Filing Date
JP32468197A Expired - Fee Related JP3472691B2 (ja) 1997-11-26 1997-11-26 バーコード読取装置及びバーコード読取方法

Country Status (4)

Country Link
US (1) US6032862A (ja)
EP (1) EP0919946B1 (ja)
JP (1) JP3472691B2 (ja)
DE (1) DE69835492T2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3510496B2 (ja) * 1998-09-28 2004-03-29 富士通株式会社 バー幅補正装置,バー幅補正方法,バーコード読取装置及びそのバーコード復調方法
JP3548025B2 (ja) * 1998-12-17 2004-07-28 富士通株式会社 バーコード読取装置および方法
US20060082557A1 (en) * 2000-04-05 2006-04-20 Anoto Ip Lic Hb Combined detection of position-coding pattern and bar codes
JP3554703B2 (ja) * 2000-10-12 2004-08-18 リバーベル株式会社 情報端末装置
JP4170111B2 (ja) * 2003-02-21 2008-10-22 富士通株式会社 バーコード読取装置およびバーコード読取方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4414468A (en) * 1981-05-18 1983-11-08 International Business Machines Corporation Systematic error correction in bar code scanner
GB8815490D0 (en) * 1988-06-29 1988-08-03 Key Strip Ltd Swipe reader
EP0506680B1 (en) * 1989-10-11 1997-12-29 Cias Inc. Optimal error-detecting and error-correcting code and apparatus
EP1330129A3 (en) * 1991-04-10 2006-03-15 Mitsubishi Denki Kabushiki Kaisha Encoder and Decoder

Also Published As

Publication number Publication date
EP0919946A3 (en) 2000-08-30
JPH11161734A (ja) 1999-06-18
DE69835492T2 (de) 2006-11-30
EP0919946A2 (en) 1999-06-02
DE69835492D1 (de) 2006-09-21
EP0919946B1 (en) 2006-08-09
US6032862A (en) 2000-03-07

Similar Documents

Publication Publication Date Title
US4488678A (en) Method and apparatus for reading a bar code
JPH09179927A (ja) バーコード読取装置
US5942740A (en) Method and apparatus for reading bar codes
US5537431A (en) Method and apparatus for bar code reading and decoding
JP3472691B2 (ja) バーコード読取装置及びバーコード読取方法
US6095420A (en) Method of decoding bar codes and bar code reader
JP3510496B2 (ja) バー幅補正装置,バー幅補正方法,バーコード読取装置及びそのバーコード復調方法
US6267293B1 (en) Bar code scanning system and method
JPH06274674A (ja) バーコード読取方法およびバーコード読取装置
KR950000944B1 (ko) 바코드 판독장치
JPH09161001A (ja) バーコード読取装置
JP2000099620A (ja) バーコード読取装置及びバーコード読取方法
JPH096885A (ja) バーコード復号方式
KR100308415B1 (ko) 바코드판독장치,바코드판독방법및컴퓨터판독가능매체
US6305606B1 (en) Process for scanning a bar code
JP3560477B2 (ja) バーコード読取装置及びバーコード読取方法
US7364080B2 (en) System and method for bar code detection
JP3329969B2 (ja) バーコード読取方法およびバーコード読取装置
GB2292241A (en) Reading bar-codes
JP2743732B2 (ja) 読取装置
JPH10240852A (ja) 符号情報読取り装置
JP2001005907A (ja) バーコード読取装置、及び記憶媒体
JPH0449477A (ja) バーコード読取装置およびバーコード読取方法
JPH0439786A (ja) ペン式バーコードリーダ
JPH05165994A (ja) バーコードシンボル読取装置

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20030902

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080912

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080912

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090912

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090912

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100912

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100912

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110912

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120912

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120912

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130912

Year of fee payment: 10

LAPS Cancellation because of no payment of annual fees