"1キャラクタ内で隣接するバー及びスペースを含むnn≧2本のエレメントの幅を加算して2~n本加算エレメント幅を各々求め、前記2~n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2~n本加算エレメント幅のモジュール数を求める演算手段と、前記演算手段によって求められた前記2~n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出する抽出手段と、前記抽出手段によって抽出された各々の前記2~n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索する検索手段とを備えることを特徴とする光学情報読取装置。前記演算手段は、当該対象キャラクタの前記2~n本加算エレメント幅を各々求める際に、前記対象キャラクタの前後のキャラクタのバー及びスペースを含むエレメントの幅を加算することを特徴とする請求項1に記載の光学情報読取装置。前記抽出手段は、当該対象キャラクタの前記2~n本加算エレメント幅を各々求める際に、前記1キャラクタ分のn本の幅データと、当該対象キャラクタの前後の1本以上の幅データとを抽出することを特徴とする請求項1に記載の光学情報読取装置。前記検索手段は、前記抽出手段から得られた複数の前記対象キャラクタの各々の前記2~n本加算エレメント幅に対して2種類の前記対象キャラクタの何れかと一致する対象キャラクタを検索し、前記候補キャラクタの数を絞り込むことを特徴とする請求項1に記載の光学情報読取装置。前記検索手段は、前記候補キャラクタのモジール数の実測値と、前記期待値キャラクタのモジール数の理想値との間の誤差を算出し、前記誤差を合計して得られる誤差値が最小となる前記候補キャラクタと最も相関が強い期待値キャラクタを検索することを特徴とする請求項1に記載の光学情報読取装置。前記検索手段は、前記誤差値が最小となる前記候補キャラクタと一致する前記期待値キャラクタを検出することを特徴とする請求項5に記載の光学情報読取装置。前記1キャラクタ内で隣接するバー及びスペースを含むnn≧2本のエレメントの幅を加算した合計値と、前記1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて当該1キャラクタ分の幅データが適切か否かを判別する比較手段を備えることを特徴とする請求項1に記載の光学情報読取装置。光学情報読取装置が、1キャラクタ内で隣接するバー及びスペースを含むnn≧2本のエレメントの幅を加算して2~n本加算エレメント幅を各々求めるステップと、求めた前記2~n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2~n本加算エレメント幅のモジュール数を求めるステップと、求めた前記2~n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出するステップと、抽出された各々の前記2~n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索するステップとを実行することを特徴とする光学情報読取方法。当該対象キャラクタの前記2~n本加算エレメント幅を各々求める際に、前記対象キャラクタの前後のキャラクタのバー及びスペースを含むエレメントの幅を加算することを特徴とする請求項8に記載の光学情報読取方法。当該対象キャラクタの前記2~n本加算エレメント幅を各々求める際に、前記1キャラクタ分のn本の幅データと、当該対象キャラクタの前後の1本以上の幅データとを抽出することを特徴とする請求項9に記載の光学情報読取方法。抽出された複数の前記対象キャラクタの各々の前記2~n本加算エレメント幅に対して2種類の前記対象キャラクタの何れかと一致する対象キャラクタを検索し、前記候補キャラクタの数を絞り込むことを特徴とする請求項10に記載の光学情報読取方法。前記候補キャラクタのモジール数の実測値と、前記期待値キャラクタのモジール数の理想値との間の誤差を算出し、前記誤差を合計して得られる誤差値が最小となる前記候補キャラクタと最も相関が強い期待値キャラクタを抽出することを特徴とする請求項8に記載の光学情報読取方法。前記誤差値が最小となる前記候補キャラクタと一致する前記期待値キャラクタを検出することを特徴とする請求項12に記載の光学情報読取方法。前記1キャラクタ内で隣接するバー及びスペースを含むnn≧2本のエレメントの幅を加算した合計値と、前記1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて当該1キャラクタ分の幅データが適切か否かを判別することを特徴とする請求項8に記載の光学情報読取方法。請求項8乃至14に記載の光学情報読取方法を実行するための指令を組み合わせたことを特徴とするコンピュータが読み取り可能なプログラム。請求項8乃至14に記載の光学情報読取方法を実行するためのプログラムが記述されていることを特徴とするコンピュータが読み取り可能な記録媒体。ところで、従来例に係る光学情報読取装置20によれば、特許文献1に見られるようなバーコード記号読取装置の構成に、1キャラクタに関して、2本幅加算方式を導入して難読キャラクタをデコード可能な光学情報読取装置を作成しようとした場合、次のような問題がある。i.従来方式の光学情報読取装置20では、キャラクタパターン算出時、バー及びスペースを含む各エレメントの誤差許容度が±0.5モジュール以内に設定され、1キャラクタ分の6本の幅W11データ~幅W16データのバーコードデータ値D30がキャラクタのモジュール数に換算されて、2本加算パターンのモジュール数が求められている。しかも、バーやスペース等の各エレメントの最大誤差が0.5以内となるように、2本加算パターンのモジュール数が四捨五入して最も近い整数になされている。従って、加算幅W21のキャラクタのモジュール数の計数値が2.4の場合、本来、整数の候補として2と3となるにも関わらず、モジュール数が四捨五入されて最も近い整数として、モジュール数が2となされてしまうステップST83参照。因みに、期待値キャラクタとして、モジュール数が3であったような場合であって、印刷技術や貼付技術等によって、バーコード記号を構成するバーやスペースに、欠落や傷等が介在して、モジュール数の計数値が2.4となった場合に、±1.0の誤差が介入する結果となって、バーコード記号を正確に読み取れないという問題がある。誤差が±0.5モジュールを越えるエレメントが存在した場合は、読み取りエラーとなっていたステップST94参照。ii.また、キャラクタパターン検索時、5種類の幅W21データ~幅W25データ2本加算データに対して一致するキャラクタを検索しているが、誤差が±0.5モジュールを越えるエレメントを含むキャラクタは検索対象から除外されてしまう。従って、ステップST83で四捨五入によって誤差を含んだキャラクタを含むキャラクタがデコード結果と決定される場合が想定される。この結果、従来方式のバーコード読み取り方法によると、バーやスペース等のエレメントが傷やかすれた場合に、バーコードを誤読してしまい、バーコードデータを正確に出力することが困難となるという問題がある。そこで、本発明は上述した課題を解決したものであって、従来方式のバーコード読み取り方法に比べてバーコードの誤読取を防止できるようにすると共に、エレメントが傷やかすれた場合であっても、正確なバーコードデータを出力できるようにした光学情報読取装置、光学情報読取方法、コンピュータが読み取り可能なプログラム及び記録媒体を提供することを目的とする。上述の課題を解決するために、請求項1に記載の光学情報読取装置は、1キャラクタ内で隣接するバー及びスペースを含むnn≧2本のエレメントの幅を加算して2~n本加算エレメント幅を各々求め、前記2~n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2~n本加算エレメント幅のモジュール数を求める演算手段と、前記演算手段によって求められた前記2~n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出する抽出手段と、前記抽出手段によって抽出された各々の前記2~n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索する検索手段とを備えることを特徴とするものである。請求項1に係る光学情報読取装置によれば、バーコード記号を読み取ってそのデコード結果を出力する場合に、演算手段は、1キャラクタ内で隣接するバー及びスペースを含むnn≧2本のエレメントの幅を加算して2~n本加算エレメント幅を各々求め、この2~n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2~n本加算エレメント幅のモジュール数を求める。抽出手段は、演算手段によって求められた2~n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となるキャラクタを候補キャラクタとして抽出する。これらを前提にして、検索手段が抽出手段によって抽出された各々の2~n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索するようになる。この検索によって、複数の候補キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータを当該バーコード記号の読取時のデコード結果として出力できるようになるので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。請求項2に記載の光学情報読取装置は、請求項1において、前記演算手段は、当該対象キャラクタの前記2~n本加算エレメント幅を各々求める際に、前記対象キャラクタの前後のキャラクタのバー及びスペースを含むエレメントの幅を加算することを特徴とするものである。請求項3に記載の光学情報読取装置は、請求項1において、前記抽出手段は、当該対象キャラクタの前記2~n本加算エレメント幅を各々求める際に、前記1キャラクタ分のn本の幅データと、当該対象キャラクタの前後の1本以上の幅データとを抽出することを特徴とするものである。請求項4に記載の光学情報読取装置は、請求項1において、前記検索手段は、前記抽出手段から得られた複数の前記対象キャラクタの各々の前記2~n本加算エレメント幅に対して2種類の前記対象キャラクタの何れかと一致する対象キャラクタを検索し、前記候補キャラクタの数を絞り込むことを特徴とするものである。請求項5に記載の光学情報読取装置は、請求項1において、前記検索手段は、前記候補キャラクタのモジール数の実測値と、前記期待値キャラクタのモジール数の理想値との間の誤差を算出し、前記誤差を合計して得られる誤差値が最小となる前記候補キャラクタと最も相関が強い期待値キャラクタを検索することを特徴とするものである。請求項6に記載の光学情報読取装置は、請求項5において、前記検索手段は、前記誤差値が最小となる前記候補キャラクタと一致する前記期待値キャラクタを検出することを特徴とするものである。請求項7に記載の光学情報読取装置は、請求項1において、前記1キャラクタ内で隣接するバー及びスペースを含むnn≧2本のエレメントの幅を加算した合計値と、前記1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて当該1キャラクタ分の幅データが適切か否かを判別する比較手段を備えることを特徴とするものである。請求項8に記載の光学情報読取方法は、光学情報読取装置が、1キャラクタ内で隣接するバー及びスペースを含むnn≧2本のエレメントの幅を加算して2~n本加算エレメント幅を各々求めるステップと、求めた前記2~n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2~n本加算エレメント幅のモジュール数を求めるステップと、求めた前記2~n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出するステップと、抽出された各々の前記2~n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索するステップとを実行することを特徴とするものである。請求項9に記載の光学情報読取方法は、請求項8において、当該対象キャラクタの前記2~n本加算エレメント幅を各々求める際に、前記対象キャラクタの前後のキャラクタのバー及びスペースを含むエレメントの幅を加算することを特徴とするものである。請求項10に記載の光学情報読取方法は、請求項9において、前記2~n本加算エレメント幅を各々求める際に、前記1キャラクタ分のn本の幅データと、当該キャラクタの前後の1本以上の幅データとを抽出することを特徴とするものである。請求項11に記載の光学情報読取方法は、請求項10において、抽出された複数の前記対象キャラクタの各々の前記2~n本加算エレメント幅に対して2種類の前記対象キャラクタの何れかと一致する対象キャラクタを検索し、前記候補キャラクタの数を絞り込むことを特徴とするものである。請求項12に記載の光学情報読取方法は、請求項8において、前記候補キャラクタのモジール数の実測値と、前記期待値キャラクタのモジール数の理想値との間の誤差を算出し、前記誤差を合計して得られる誤差値が最小となる前記候補キャラクタと最も相関が強い期待値キャラクタを抽出することを特徴とするものである。請求項13に記載の光学情報読取方法は、請求項12において、前記誤差値が最小となる前記候補キャラクタと一致する前記期待値キャラクタを検出することを特徴とするものである。請求項14に記載の光学情報読取方法は、請求項8において、前記1キャラクタ内で隣接するバー及びスペースを含むnn≧2本のエレメントの幅を加算した合計値と、前記1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて当該1キャラクタ分の幅データが適切か否かを判別することを特徴とするものである。請求項15に記載のコンピュータが読み取り可能なプログラムは、請求項8乃至14に記載の光学情報読取方法を実行するための指令を組み合わせたことを特徴とするものである。請求項16に記載のコンピュータが読み取り可能な記録媒体は、請求項8乃至14に記載の光学情報読取方法を実行するためのプログラムが記述されていることを特徴とするものである。請求項1に係る光学情報読取装置及び、請求項8に係る光学情報読取方法によれば、2~n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタが抽出され、ここに抽出された各々の2~n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索する検索手段を備えるものである。この構成によって、複数の候補キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータを当該バーコード記号の読取時のデコード結果として出力できるようになるので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。請求項2に記載の光学情報読取装置及び、請求項9に記載の光学情報読取方法によれば、当該対象キャラクタの2~n本加算エレメント幅を各々求める際に、対象キャラクタの前後のキャラクタのバー及びスペースを含むエレメントの幅を加算するので、複数の候補キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータを当該バーコード記号の読取時のデコード結果として出力できるようになる。請求項3に記載の光学情報読取装置及び、請求項10に記載の光学情報読取方法によれば、当該対象キャラクタの前記2~n本加算エレメント幅を各々求める際に、前記1キャラクタ分のn本の幅データと、当該対象キャラクタの前後の1本以上の幅データとを抽出するので、複数の候補キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータを当該バーコード記号の読取時のデコード結果として出力できるようになる。また、請求項3に係る光学情報読取装置及び請求項10に係る光学情報読取方法によれば、1キャラクタ分のn本の幅データと、当該キャラクタの前後の1本以上の幅データとを抽出するので、2~n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる候補キャラクタを従来方法に比べてより多く抽出できるようになり、第1番目に相関が強いものをデコード結果とするだけでなく、第2番目、第3番目に相関が強いものがデコード結果となる確率が高くなるというようにデコード結果の候補キャラクタを複数出力できるようになる。請求項4に記載の光学情報読取装置及び、請求項11に記載の光学情報読取方法によれば、抽出された複数の前記対象キャラクタの各々の前記2~n本加算エレメント幅に対して2種類の前記対象キャラクタの何れかと一致する対象キャラクタを検索し、候補キャラクタの数を絞り込むので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。請求項5に記載の光学情報読取装置及び、請求項12に記載の光学情報読取方法によれば、誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索するので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。請求項6に記載の光学情報読取装置及び、請求項13に記載の光学情報読取方法によれば、誤差値が最小となる候補キャラクタと一致する期待値キャラクタを検出するので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。請求項7に記載の光学情報読取装置及び、請求項14に記載の光学情報読取方法によれば、当該1キャラクタ分の幅データが適切か否かの判別結果に基づいてキャラクタのバーの消失や分割等を判断できるようになる。複数のスキャンのデコード結果を組み合わせることが可能となり、汚れや、かすれがひどいバーコードにおいても読み取りが可能となる。請求項15に係るコンピュータが読み取り可能なプログラム及び請求項16に係る記録媒体によれば、本発明に係る光学情報読取方法を実行するための指令を組み合わせたので、複数の候補キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータを当該バーコード記号の読取時のデコード結果として出力できるようになる。従って、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。以下、図面を参照しながら、本発明に係る光学情報読取装置、光学情報読取方法、コンピュータが読み取り可能なプログラム及び記録媒体について説明する。図1に示すバーコード記号読取装置100は光学情報読取装置の一例を構成し、バーコード記号1を読み取って、そのスタートマージンを検索し、更に、スタートマージンに続くキャラクタをデコード処理してバーコードデータD12を出力するものである。バーコード記号読取装置100は、光学読取部2、クロック発生部3、カウンタ部4、m段データバッファ5、x倍器7、セレクタ部6、比較器8、スタートマージン格納部9、幅データ格納部10、インターフェース部11、マイクロプロセッサ12及びデコードバッファ25を有して構成される。なお、従来例と同じ名称及び同じ符号のものは同じ機能を有するのでその説明を省略する。カウンタ部4は光学読取部2から出力されるコード読取データD2を入力すると共に、クロック発生部3から出力されるCLK信号を入力し、当該CLK信号に基づいてコード読取データD2をカウントし、コード読取データD2を白部分のスペースおよび黒部分のバーを含むエレメントの1本幅や、n本加算幅を示すカウントデータD4バーコードデータ値:数値に変換する。カウンタ部4には幅データ格納部10が接続される。幅データ格納部10は、カウンタ部4から順次出力される1本幅、n本加算幅の対象キャラクタに係るカウントデータD4を、時系列的にすべて格納して保存する。幅データ格納部10は、フリップフロップ回路や、DRAM等のような記憶回路から構成される。幅データ格納部10は、1本幅、n本加算幅の対象キャラクタに係るカウントデータD4を各キャラクタの幅データD10バーコードデータ値D30に対応として出力する。スタートマージン格納部9及び幅データ格納部10にはインターフェース部11が接続される。マイクロプロセッサ12は、インターフェース部11を介して入力されるSMFデータD9や、各キャラクタの幅データD10によって、バーコードの認識処理を実行する。マイクロプロセッサ12は、プログラム格納用の読み出し専用メモリReadOnlyMemory:以下ROM21という、ワークメモリ用の随時情報の書き込み読出し可能なメモリRandomAccessMemory:以下RAM22という、及び中央処理ユニットCentralProcessingUnit;以下CPU23という及び期待値格納部24を含むマイクロコンピュータを構成している。ROM21は記録媒体の一例を構成する。ROM21にはコンピュータが読み取り可能なプログラムであって、本発明に係る光学情報読取方法を実行するための指令を組み合わせたプログラムデータDpが格納される。その内容は、バーコード記号読取装置100が、1キャラクタ内で隣接するバー及びスペースを含むnn≧2本のエレメントの幅を加算して2~n本加算エレメント幅を各々求めるステップと、求めた2~n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2~n本加算エレメント幅のモジュール数を求めるステップと、ここで求めた2~n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出するステップと、抽出された各々の2~n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索するステップとを実行するプログラムである。ここに候補キャラクタとは対象キャラクタを絞り込んだキャラクタをいう。プログラムデータDpには、システム起動用のシステムプログラムデータも含まれる。RAM22にはバーコード記号読取装置100を制御するためのシステムプログラムの他に、光学情報読取方法を実行するための演算や、抽出、検索、比較等の制御を実行する際の制御情報が一時格納される。例えば、電源がオンされると、電源オン情報を検出したCPU23は、ROM21からシステムプログラムを読み出してRAM22に展開し、システムを起動して、当該バーコード記号読取装置100全体を制御するようになされる。この例で、CPU23は、少なくとも、演算部23aや、抽出部23b、比較部23c、検索部23d等の4つの機能を有している。演算部23aは演算手段の一例を構成し、各対象キャラクタの幅データD10を入力し、幅データD10に基づいて1キャラクタ内で隣接するバー及びスペースを含むnn≧2本のエレメントの幅を加算して2~n本加算エレメント幅を各々求める。演算部23aは、求めた2~n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2~n本加算エレメント幅のモジュール数を求める。抽出部23bは、演算部23aによって求められた2~n本加算エレメント幅以下で2~n本加算パターンともいうの各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出する。抽出部23bは、2~n本加算パターンを各々求める際に、1キャラクタ分のn本の幅データD10と、対象キャラクタの前後の1本以上の幅データD10とを抽出する。この例では、対象キャラクタの抽出基準を従来方式の誤差0.5以内の整数から誤差1以内の整数へと範囲を拡大し、1キャラクタ分のn本の幅データD10と、対象キャラクタの前後の1本以上の幅データD10とを抽出するようにした。従って、2~n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを従来方法に比べて、より多く抽出できるようになる。しかも、第1番目に相関が強いものをデコード結果とするだけでなく、第2番目、第3番目に相関が強いものがデコード結果となる確率が高くなるというようにデコード結果の候補キャラクタを複数出力できるようになる。これにより、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。比較部23cは、抽出部23bによって抽出された各々の2~n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタ理論値とを比較する。比較部23cは判別機能を有しており、1キャラクタ内で隣接するバー及びスペースを含むnn≧2本のエレメントの幅を加算した合計値と、1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて当該1キャラクタ分の幅データD10が適切か否かを判別する。この判別によって、キャラクタのバーの消失や分割等を判断できるようになる。また、複数のスキャンのデコード結果を組み合わせることが可能となり、汚れや、かすれがひどいバーコードにおいても読み取りが可能となる。また、バーの消失や分割等の判断結果に基づいて対象キャラクタを絞ることができ、計算量の軽減が図れ、処理時間の高速化につながる。検索部23d検索部23dは、候補キャラクタと最も相関が強い期待値キャラクタを検索する。例えば、上述の演算部23aが候補キャラクタのモジール数の実測値と、期待値キャラクタのモジール数の理想値との間の誤差を算出すると、検索部23dが、演算部23aによって算出された誤差を合計して得られる誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索する。この例では、誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索するので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。マイクロプロセッサ12には期待値格納部24が接続される。期待値格納部24には期待値キャラクタ理論値が格納されている。期待値キャラクタはCODE128規格のキャラクタの各エレメントを構成するモジュール数理論値である。これらにより、バーコード記号読取装置100を構成する。CPU23内の演算部23a、抽出部23b、比較部23c及び、検索部23dはソフトウエアでも、ハードウェアでもどちらで構築してもよい。続いて、図2A~Gを参照して、第1の実施例に係る1本データ、2~6本加算データの算出例について説明する。この実施例では、CODE128規格のバーコード記号1について説明する。CODE128規格によれば、図2Aに示す1キャラクタは、3本の黒部分のバー1,3,5及び3本の白部分のスペース2,4,6から構成される。図中、C1は対象キャラクタであり、C0は対象キャラクタC1の1つ前のキャラクタであり、C2はその1つ後ろのキャラクタである。1キャラクタの全幅は11モジュールから構成される。この例で、黒部分のバー1は4モジュールから成り、バー3及びバー5は各々1モジュールから成る。白部分のスペース2は4モジュールから成り、スペース4及び6は各々2モジュールから成る。スタートコードは3種類あり、それぞれ103種類のコードパターンが表される。CODE128規格では、アスキー128文字を表現できるようになっている。スタートコードCを使用すれば、1キャラクタで数字2桁を表現でき、非常に高い印字密度で表現できる。CODE128のバーコード記号1は8キャラクタから構成される図5A参照。バーに用いるモジュール数の和は偶数パリティであり、スペースに用いるモジュール数の和は奇数パリティとなっている。偶数パリティ及び奇数パリティを利用した自己機能を持っている。図2Bに示すW11は対象キャラクタC1の黒部分のバー1の幅である。バー1の幅はカウンタ部4により計数され、そのカウントデータ値は幅W11データを成す。W12はバー1に続くスペース2の幅である。スペース2の幅もカウンタ部4により計数され、そのカウントデータ値は幅W12データを成す。W13は対象キャラクタC1のスペース2に続くバー3の幅である。バー3の幅はカウンタ部4により計数され、そのカウントデータ値は幅W13データを成す。W14は対象キャラクタC1のバー3に続くスペース4の幅である。スペース4の幅もカウンタ部4により計数され、そのカウントデータ値は幅W14データを成す。W15はスペース4に続くバー5の幅である。バー5の幅はカウンタ部4により計数され、そのカウントデータ値は幅W15データを成す。W16は対象キャラクタC1のバー5に続くスペース6の幅である。スペース6の幅もカウンタ部4により計数され、そのカウントデータ値は幅W16データを成す。上述の6種類の幅W11データ~幅W16データは1キャラクタの1本データであり、幅データD10を構成する。図2Cに示すW21は対象キャラクタC1のバー1とスペース2の各々が演算部23aによって加算された幅以下バー1スペース2と記すである。バー1スペース2の加算幅を示すカウントデータ値は幅W21データを成す。W22は対象キャラクタC1のバー1に続くスペース2及びバー3の各々が演算部23aによって加算された幅である。スペース2バー3の加算幅を示すカウントデータ値は幅W22データを成す。W23は対象キャラクタC1のスペース2に続くバー3及びスペース4の各々が演算部23aによって加算された幅である。バー3スペース4の加算幅を示すカウントデータ値は幅W23データを成す。W24は対象キャラクタC1のバー3に続くスペース4及びバー5の各々が演算部23aによって加算された幅である。スペース4バー5の加算幅を示すカウントデータ値は幅W24データを成す。W25は対象キャラクタC1のスペース4に続くバー5及びスペース6の各々が演算部23aによって加算された幅である。バー5スペース6の加算幅を示すカウントデータ値は幅W25データを成す。上述の5種類の幅W21データ~幅W25データは1キャラクタの2本加算データであり、幅データD10を構成する。図2Dに示すW31は対象キャラクタC1のバー1、スペース2及びバー3の各々が演算部23aによって加算された幅である。バー1スペース2バー3の加算幅を示すカウントデータ値は幅W31データを成す。W32は対象キャラクタC1のバー1に続くスペース2、バー3及びスペース4の各々が演算部23aによって加算された幅である。スペース2バー3スペース4の加算幅を示すカウントデータ値は幅W32データを成す。W33は対象キャラクタC1のスペース2に続くバー3、スペース4及びバー5の各々が演算部23aによって加算された幅である。バー3スペース4バー5の加算幅を示すカウントデータ値は幅W33データを成す。W34は対象キャラクタC1のバー3に続くスペース4、バー5及びスペース6の各々が演算部23aによって加算された幅である。スペース4バー5スペース6の加算幅を示すカウントデータ値は幅W34データを成す。上述の4種類の幅W31データ~幅W34データは1キャラクタの3本加算データであり、幅データD10を構成する。図2Eに示すW41は対象キャラクタC1のバー1、スペース2、バー3及びスペース4の各々が演算部23aによって加算された幅である。バー1スペース2バー3スペース4の加算幅を示すカウントデータ値は幅W41データを成す。W42の対象キャラクタC1はバー1に続くスペース2、バー3、スペース4及びバー5の各々が演算部23aによって加算された幅である。スペース2バー3スペース4バー5の加算幅を示すカウントデータ値は幅W42データを成す。W43は対象キャラクタC1のスペース2に続くバー3、スペース4、バー5及びスペース6の各々が演算部23aによって加算された幅である。バー3スペース4バー5スペース6の加算幅を示すカウントデータ値は幅W43データを成す。上述の3種類の幅W41データ~幅W43データは1キャラクタの4本加算データであり、幅データD10を構成する。図2Fに示すW51は対象キャラクタC1のバー1、スペース2、バー3、スペース4及びバー5の各々が演算部23aによって加算された幅である。バー1スペース2バー3スペース4バー5の加算幅を示すカウントデータ値は幅W51データを成す。W52は対象キャラクタC1のバー1に続くスペース2、バー3、スペース4、バー5及びスペース6の各々が演算部23aによって加算された幅である。スペース2バー3スペース4バー5スペース6の加算幅を示すカウントデータ値は幅W52データを成す。上述の2種類の幅W51データ及び幅W52データは1キャラクタの5本加算データであり、幅データD10を構成する。図2Gに示すW61は対象キャラクタC1のバー1、スペース2、バー3、スペース4、バー5及びスペース6の各々が演算部23aによって加算された幅である。バー1スペース2バー3スペース4バー5スペース6の加算幅を示すカウントデータ値は幅W61データを成す。1種類の幅W61データは1キャラクタの6本加算データであり、幅データD10を構成する。上述のカウンタ部4から出力されるカウントデータ値から、6種類の幅W11データ~幅W16データ1本データ、5種類の幅W21データ~幅W25データ2本加算データ、4種類の幅W31データ~幅W34データ3本加算データ、3種類の幅W41データ~幅W43データ4本加算データ、2種類の幅W51データ及び幅W52データ5本加算データ及び、1種類の幅W61データ6本加算データの合計で、21種類の対象キャラクタが得られる。続いて、本発明に係る光学情報読取方法について、図3及び図4を参照し、第1の実施例に係る難読キャラクタのデコード例を説明する。この実施例では、CODE128規格に基づくバーコード記号1を読み取って、そのスタートマージンを検索し、更に、スタートマージンに続く対象キャラクタをデコード処理してバーコードデータD12を出力する場合を例に挙げる。その場合のバーコード記号1のバー及びスペースの各エレメントの誤差許容度最大誤差範囲が、±1.0モジュールに設定される。バーコード記号1については図2に示した対象キャラクタC1について説明するキャラクタデコードアルゴリズム。これらをデコード条件にして、まず、図3に示すフローチャートのステップST1でマイクロプロセッサ12はスタートマージンを検索する。このとき、光学読取部2は、バーコード記号1を読み取って、コード読取データD2を発生する。コード読取データD2は、光学読取部2からカウンタ部4へ出力される。クロック発生部3は、所定周波数のサンプリングク用のCLK信号をカウンタ部4に出力する。カウンタ部4は光学読取部2から出力されるコード読取データD2を入力すると共に、クロック発生部3から出力されるCLK信号を入力し、CLK信号に基づいてコード読取データD2をカウントし、コード読取データD2を白部分のスペースおよび黒部分のバーを含むエレメントの1本幅及び6本加算幅を示すカウントデータD4に変換する。カウントデータD4は、バーコード記号1における各バー黒部分の幅およびスペース白部分の幅を示す数値データ列となる。カウントデータD4は、幅データ格納部10に保存される。m段データバッファ5はカウンタ部4から出力されるカウントデータD4を、m段分mは任意の整数だけ一時格納する。m段は、バーコード記号1の印刷状態により任意に設定されている。x倍器7は、カウントデータD4からスタートマージンを検索するに当たり、カウントデータD4を何倍かを示すxが予め設定され、そのx倍の演算を行って、x倍データD7を出力する。セレクタ部6は、マイクロプロセッサ12の選択制御を受けて、m段データバッファ5に一時格納されたm段分のカウントデータD4のうち、比較対象とするデータを選択する。比較器8はセレクタ部6が選択した、m段データバッファ5中のk段前までの各カウントデータD4と、x倍器7から出力されるx倍データD7とを比較する。比較結果によってx倍器7からのx倍データD7の方が小さいときは、スタートマージン候補があったと判定し、スタートマージン候補検索フラグ以下でSMFデータD9というを発生する。SMFデータD9はスタートマージン格納部9に出力される。スタートマージン格納部9には比較器8から出力されるSMFデータD9、そのとき比較対象としたカウントデータ値=D10とが対応させて格納される。ステップST2でCPU23は1キャラクタ分の幅データD106本と、その前後の5本ずつ幅データD10を抽出する。図2Bに示した対象キャラクタC1によれば、黒部分のバー1の幅W11がカウンタ部4により計数され、そのカウントデータ値が幅W11データとなる。バー1に続く白部分のスペース2の幅W12もカウンタ部4により計数され、そのカウントデータ値が幅W12データとなる。スペース2に続くバー3の幅W13はカウンタ部4により計数され、そのカウントデータ値が幅W13データとなる。このバー3に続くスペース4の幅W14もカウンタ部4により計数され、そのカウントデータ値は幅W14データとなる。スペース4に続くバー5の幅W15はカウンタ部4により計数され、そのカウントデータ値が幅W15データとなる。バー5に続くスペース6の幅W16もカウンタ部4により計数され、そのカウントデータ値が幅W16データとなる。上述の6種類の幅W11データ~幅W16データは幅データD10を構成する。幅データD10はインターフェース部11を介してCPU23に出力される。CPU23では、演算部23aが各対象キャラクタの幅データD10を入力し、幅データD10に基づいて1キャラクタ内で隣接するバー及びスペースを含むnn≧2本のエレメントの幅を加算して2~n本加算パターンを各々求める。この例ではn=6である。2~n本加算エレメント幅を各々求める際に、1キャラクタ分の6本の幅データD10と、対象キャラクタの前後の5本の幅データD10とを抽出する。例えば、図2Cに示した対象キャラクタC1のバー1とスペース2の各々が演算部23aによって加算され、その加算幅W21を示すカウントデータ値が幅W21データとなる。対象キャラクタC1のバー1に続くスペース2及びバー3の各々が演算部23aによって加算され、その加算幅W22を示すカウントデータ値が幅W22データとなる。対象キャラクタC1のスペース2に続くバー3及びスペース4の各々が演算部23aによって加算され、その加算幅W23を示すカウントデータ値が幅W23データとなる。対象キャラクタC1のバー3に続くスペース4及びバー5の各々が演算部23aによって加算され、その加算幅W24を示すカウントデータ値が幅W24データとなる。対象キャラクタC1のスペース4に続くバー5及びスペース6の各々が演算部23aによって加算され、その加算幅W25を示すカウントデータ値が幅W25データとなる。上述の5種類の幅W21データ~幅W25データは幅データD10を構成する。図2Dに示した対象キャラクタC1のバー1、スペース2及びバー3の各々が演算部23aによって加算され、その加算幅W31を示すカウントデータ値が幅W31データとなる。対象キャラクタC1のバー1に続くスペース2、バー3及びスペース4の各々が演算部23aによって加算され、その加算幅W32を示すカウントデータ値が幅W32データとなる。対象キャラクタC1のスペース2に続くバー3、スペース4及びバー5の各々が演算部23aによって加算され、その加算幅W33を示すカウントデータ値が幅W33データとなる。対象キャラクタC1のバー3に続くスペース4、バー5及びスペース6の各々が演算部23aによって加算され、その加算幅W34を示すカウントデータ値が幅W34データとなる。上述の4種類の幅W31データ~幅W34データは幅データD10を構成する。図2Eに示した対象キャラクタC1のバー1、スペース2、バー3及びスペース4の各々が演算部23aによって加算され、その加算幅W41を示すカウントデータ値が幅W41データとなる。対象キャラクタC1はバー1に続くスペース2、バー3、スペース4及びバー5の各々が演算部23aによって加算され、その加算幅W42を示すカウントデータ値が幅W42データとなる。対象キャラクタC1のスペース2に続くバー3、スペース4、バー5及びスペース6の各々が演算部23aによって加算され、その加算幅W43を示すカウントデータ値が幅W43データとなる。上述の3種類の幅W41データ~幅W43データは幅データD10を構成する。図2Fに示した対象キャラクタC1のバー1、スペース2、バー3、スペース4及びバー5の各々が演算部23aによって加算され、その加算幅W51を示すカウントデータ値が幅W51データとなる。対象キャラクタC1のバー1に続くスペース2、バー3、スペース4、バー5及びスペース6の各々が演算部23aによって加算され、その加算幅W52を示すカウントデータ値が幅W52データを成す。上述の2種類の幅W51データ及び幅W52データは幅データD10を構成する。図2Gに示した対象キャラクタC1のバー1、スペース2、バー3、スペース4、バー5及びスペース6の各々が演算部23aによって加算され、その加算幅W61を示すカウントデータ値が幅W61データとなる。1種類の幅W61データは幅データD10を構成する。上述のカウンタ部4から出力されるカウントデータ値から、6種類の幅W11データ~幅W16データ1本データ、5種類の幅W21データ~幅W25データ2本加算データ、4種類の幅W31データ~幅W34データ3本加算データ、3種類の幅W41データ~幅W43データ4本加算データ、2種類の幅W51データ及び幅W52データ5本加算データ及び、1種類の幅W61データ6本加算データの合計で、21種類の対象キャラクタが得られる。ステップST3でCPU23は対象キャラクタC1の1モジュール幅を算出する。この例では、演算部23aは、先に求めた2~6本加算パターンエレメント幅の各々を1キャラクタのモジュール数に換算して2~6本加算パターンのモジュール数を求める。図2B~Gに示したように、カウンタ部4から出力されるカウントデータ値から、6種類の幅W11データ~幅W16データ、5種類の幅W21データ~幅W25データ、4種類の幅W31データ~幅W34データ、3種類の幅W41データ~幅W43データ、2種類の幅W51データ及び幅W52データ及び、1種類の幅W61データがCPU23に順次出力される。例えば、演算部23aは幅W21データを入力し、対象キャラクタC1のバー1とスペース2とを加算した加算幅W21のモジュール数を求める。モジュール数は全キャラクタ幅=11モジュールに対する加算幅W21の比率、例えば、2.4を算出する。この場合、加算幅W21のモジュール数は、バーやスペース等の各エレメントの最大誤差が1.0以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出するので、加算幅W21のモジュール数は2又は3となる。この例では、各エレメントの最大誤差範囲を±1.0モジュール以内に拡張したので、各エレメントの誤差許容度が1.0以内まで許容量を増加できるようになる。許容量を増加したので、対象キャラクタ一致を採る条件を増加できる。これにより、バーコード記号1の誤読取を防止できるようになる。ステップST4でCPU23は抽出された21種類の幅データD10を1~6本加算パターンエレメント幅に変換する。この例では、6種類の幅W11データ~幅W16データが1キャラクタの1本データに変換され、1本データに基づく対象キャラクタC1の被認識パターンとして、1本パターンが作成される。5種類の幅W21データ~幅W25データは1キャラクタの2本加算データに変換され、2本加算データに基づく対象キャラクタC1の2本加算パターン被認識パターンが作成される。4種類の幅W31データ~幅W34データは1キャラクタの3本加算データに変換され、3本加算データに基づく対象キャラクタC1の3本加算識パターンが作成される。3種類の幅W41データ~幅W43データは1キャラクタの4本加算データに変換され、4本加算データに基づく対象キャラクタC1の4本加算パターンが作成される。2種類の幅W51データ及び幅W52データは1キャラクタの5本加算データに変換され、5本加算データに基づく対象キャラクタC1の5本加算パターンが作成される。1種類の幅W61データは1キャラクタの6本加算データに変換され、6本加算データに基づく対象キャラクタC1の6本加算パターンが作成される。ステップST5でCPU23は対象キャラクタを絞り込むために、1本パターン、2~6本加算パターンの全てに対してモジュール数の誤差が1以内の対象キャラクタを検索して候補キャラクタを決定する。このとき、CPU23では抽出部23bが、演算部23aによって求められた1本パターン、2~6本加算パターンの各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出する。その際に、抽出部23bは、演算部23aによって求められた1本パターン、2~6本加算パターンの1キャラクタ分の6本の幅データD10と、対象キャラクタの前後の6-1本の幅データD10とを抽出する。ステップST6でCPU23は、候補キャラクタが1つ以上存在するか否かに基づいて制御を分岐する。対象キャラクタが1つ以上複数存在する場合は、ステップST7で1~6本加算パターンの実測値とその理想値との間の誤差を算出し、この誤差の合計が最小となった候補キャラクタをデコード結果とする。この誤差値が最小となる候補キャラクタは、期待値キャラクタと最も相関が強いキャラクタである。この例では、総合的な誤差が最も少ない対象キャラクタを候補キャラクタとして選択できるようになる。このとき、CPU23では、期待値キャラクタ理論値が期待値格納部24からCPU23の比較部23cへ読み出される。比較部23cは、抽出部23bによって抽出された各々の2~6本加算パターンエレメント幅のモジュール数の候補キャラクタと、候補キャラクタを評価するための期待値キャラクタ理論値とを比較する。この比較結果は検索部23dへ出力される。検索部23dでは、候補キャラクタと最も相関が強い期待値キャラクタが検索される。例えば、上述の演算部23aが候補キャラクタのモジール数の実測値と、期待値キャラクタのモジール数の理想値との間の誤差を算出すると、検索部23dが、演算部23aによって算出された誤差を合計して得られる誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索する。この例では、誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索するので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。以後は従来方式と同じ内容となる。例えば、図4に示すステップST8でCPU23は、デコード結果の候補キャラクタがマージン直後の対象キャラクタか否かに基づいて制御を分岐する。デコード結果の候補キャラクタがマージン直後の対象キャラクタである場合は、ステップST9に移行してCPU23はデコード結果の候補キャラクタがストップキャラクタか否かに基づいて制御を分岐する。デコード結果の候補キャラクタがストップキャラクタではない場合は、ステップST10に移行してCPU23は誤り検知パリティチェックを実行し、チェックデジットが正しいか否かに基づいて制御を分岐する。チェックデジットが正しい場合は、読み取りを完了し、ステップST11でCPU23はデコード結果となされた候補キャラクタのバーコードデータD12を出力する。なお、ステップST8でCPU23はデコード結果の候補キャラクタがマージン直後の対象キャラクタでない場合は、ステップST12に移行して、CPU23はデコード結果の候補キャラクタがスタートキャラクタか否かに基づいて制御を分岐する。上述のステップST9でCPU23はデコード結果の候補キャラクタがストップキャラクタである場合及び、ステップST12でデコード結果の候補キャラクタがスタートキャラクタである場合は、図3に示すステップST13に移行する。ステップST13で、CPU23は次キャラクタ6本後ろのデータのデコード処理を実行する。その後、ステップST2に戻る。また、ステップST12でデコード結果の候補キャラクタがスタートキャラクタでない場合及び、ステップST10でチェックデジットが誤っている場合は、ステップST14に移行して、CPU23は読み取りエラー処理を実行する。読み取りエラー処理では次のマージンを検索する等が行われる。キャラクタ認識がエラーとなった場合に、エラーキャラクタを仮に配置してバーコードデータを作成するようにしてもよい。その後、ステップST15に移行して、CPU23は終了を判別する。例えば、当該バーコード記号読取装置100に対して読取終了指令が検出され、読取終了指令が検出された場合は、バーコード記号1の読み取り制御を終了する。読取終了指令が検出されていない場合は、バーコード記号1の読み取り制御を継続するべく、ステップST1に戻って、上述した内容を繰り返すようになされる。このように第1の実施例に係るバーコード記号読取装置100によれば、バーコード記号1を読み取ってそのデコード結果を出力する場合に、演算部23aは、1キャラクタ内で隣接するバー及びスペースを含むn=6n≧2本のエレメントの幅を加算して2~6本加算パターンエレメント幅を各々求める。演算部23aは、2~6本加算パターンの各々を1キャラクタのモジュール数に換算して当該2~6本加算パターンのモジュール数を求める。抽出部23bは、演算部23aによって求められた2~6本加算パターンの各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出する。これらを前提にして、検索部23dが抽出部23bによって抽出された各々の2~6本加算パターンのモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索するようになる。この検索によって、複数の対象キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータD12を当該バーコード記号1の読取時のデコード結果として出力できるようになるので、従来方式のバーコード読み取り方法に比べて大幅にバーコード記号1の誤読取を防止できるようになる。しかも、誤差の範囲を従来方式の±0.5から±1.0に拡大し、候補キャラクタを増加させている。そして、1キャラクタ分の6本の幅データD10と、当該キャラクタC1の前後の5本の幅データD10とを抽出するので、2~6本加算パターンの各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んだ候補キャラクタを従来方法に比べてより多く抽出できるようになる。また、第1番目に相関が強い候補キャラクタをデコード結果とするだけでなく、第2番目、第3番目に相関が強い候補キャラクタがデコード結果となる確率が高くなるというようにデコード結果の候補キャラクタを複数出力できるようになる。これにより、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。これにより、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。なお、誤差の範囲を設定する際の閾値を可変することで、幅データD10の信頼性を選択することも可能となる。続いて、図5A~Gを参照して、第1の実施例に係る1本データ、2本加算データの他の算出例その1について説明する。この例では、対象キャラクタC1の両側のキャラクタC0,C2まで加算範囲を拡張したものである。対象キャラクタC1と隣接する1つ前のキャラクタC0のスペース6及びバー5の2エレメントまで加算範囲を拡張し、1つ後ろのキャラクタC2のバー1及びスペース2の2エレメントまで加算範囲を拡張する場合を前提とする。図5Aに示す対象キャラクタC1の1つ前にはキャラクタC0が設けられ、対象キャラクタC1の1つ後ろにはキャラクタC2が設けられる。各々のキャラクタC0~C2は、その各々が全幅11モジュールから構成される。3個のバー1,3,5及び3個のスペース2,4,6から構成される。バー1のモジュール数は4であり、バー3,5のモジュール数は1である。また、スペース2のモジュール数は1であり、スペース4,6のモジュール数は2である。これらのキャラクタC0~C2を有したバーコードの場合を例に挙げて、対象キャラクタの作成する場合を説明する。図5Bに示す対象キャラクタC1のW11は、黒部分のバー1の幅である。バー1の幅はカウンタ部4により計数され、そのカウントデータ値が幅W11データを成す。W12は対象キャラクタC1のバー1に続くスペース2の幅である。スペース2の幅もカウンタ部4により計数され、そのカウントデータ値が幅W12データを成す。W13は対象キャラクタC1のスペース2に続くバー3の幅である。バー3の幅はカウンタ部4により計数され、そのカウントデータ値が幅W13データを成す。W14は対象キャラクタC1のバー3に続くスペース4の幅である。スペース4の幅もカウンタ部4により計数され、そのカウントデータ値が幅W14データを成す。W15は対象キャラクタC1のスペース4に続くバー5の幅である。バー5の幅はカウンタ部4により計数され、そのカウントデータ値が幅W15データを成す。W16は対象キャラクタC1のバー5に続くスペース6の幅である。スペース6の幅もカウンタ部4により計数され、そのカウントデータ値が幅W16データを成す。上述の6種類の幅W11データ~幅W16データは1キャラクタの1本データであり、幅データD10を構成する。図5Cに示すW21は、1つ前の対象キャラクタC0のスペース6と対象キャラクタC1のバー1の各々が演算部23aによって加算された幅である。スペース6バー1の加算幅を示すカウントデータ値が幅W21データを成す。W21は1つ前のキャラクタC0のスペース6に続く対象キャラクタC1のバー1とスペース2の各々が演算部23aによって加算された幅以下バー1スペース2と記すである。バー1スペース2の加算幅を示すカウントデータ値が幅W21データを成す。W22は対象キャラクタC1のバー1に続くスペース2及びバー3の各々が演算部23aによって加算された幅である。スペース2バー3の加算幅を示すカウントデータ値が幅W22データを成す。W23は対象キャラクタC1のスペース2に続くバー3及びスペース4の各々が演算部23aによって加算された幅である。バー3スペース4の加算幅を示すカウントデータ値が幅W23データを成す。W24は対象キャラクタC1のバー3に続くスペース4及びバー5の各々が演算部23aによって加算された幅である。スペース4バー5の加算幅を示すカウントデータ値が幅W24データを成す。W25は対象キャラクタC1のスペース4に続くバー5及びスペース6の各々が演算部23aによって加算された幅である。バー5スペース6の加算幅を示すカウントデータ値が幅W25データを成す。W26はバー5に続くスペース6及び1つ後ろのキャラクタC2のバー1の各々が演算部23aによって加算された幅である。スペース6バー1の加算幅を示すカウントデータ値が幅W26データを成す。上述の7種類の幅W21データ~幅W26データは1キャラクタの2本加算データであり、幅データD10を構成する。図5Dに示すW32は、1つ前のキャラクタC0のバー5、スペース6及び、対象キャラクタC1のバー1の各々が演算部23aによって加算された幅である。バー5スペース6バー1の加算幅を示すカウントデータ値が幅W32データを成す。W31は、1つ前のキャラクタC0のスペース6、対象キャラクタC1のバー1及び、スペース2の各々が演算部23aによって加算された幅である。スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W31データを成す。W31は対象キャラクタC1のバー1、スペース2及びバー3の各々が演算部23aによって加算された幅である。バー1スペース2バー3の加算幅を示すカウントデータ値が幅W31データを成す。W32は対象キャラクタC1のバー1に続くスペース2、バー3及びスペース4の各々が演算部23aによって加算された幅である。スペース2バー3スペース4の加算幅を示すカウントデータ値が幅W32データを成す。W33は対象キャラクタC1のスペース2に続くバー3、スペース4及びバー5の各々が演算部23aによって加算された幅である。バー3スペース4バー5の加算幅を示すカウントデータ値が幅W33データを成す。W34は対象キャラクタC1のバー3に続くスペース4、バー5及びスペース6の各々が演算部23aによって加算された幅である。スペース4バー5スペース6の加算幅を示すカウントデータ値が幅W34データを成す。W35は、対象キャラクタC1のスペース4に続くバー5、スペース6、1つ後ろのキャラクタC2のバー1の各々が演算部23aによって加算された幅である。バー5スペース6バー1の加算幅を示すカウントデータ値が幅W35データを成す。W36は、対象キャラクタC1のバー3に続くスペース6の1つ後ろのキャラクタC2のバー1及びスペース2の各々が演算部23aによって加算された幅である。スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W36データを成す。上述の8種類の幅W32データ~幅W36データは1キャラクタの3本加算データであり、幅データD10を構成する。図5Eに示すW42は、1つ前のキャラクタC0のバー5、スペース6、対象キャラクタC1のバー1及びスペース2の各々が演算部23aによって加算された幅である。バー5スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W42データを成す。W41は、1つ前のキャラクタC0のスペース6、対象キャラクタC1のバー1、スペース2及びバー3の各々が演算部23aによって加算された幅である。スペース6バー1スペース2バー3の加算幅を示すカウントデータ値が幅W41データを成す。W41は対象キャラクタC1のバー1、スペース2、バー3及びスペース4の各々が演算部23aによって加算された幅である。バー1スペース2バー3スペース4の加算幅を示すカウントデータ値が幅W41データを成す。W42は対象キャラクタC1のバー1に続くスペース2、バー3、スペース4及びバー5の各々が演算部23aによって加算された幅である。スペース2バー3スペース4バー5の加算幅を示すカウントデータ値が幅W42データを成す。W43は対象キャラクタC1のスペース2に続くバー3、スペース4、バー5及びスペース6の各々が演算部23aによって加算された幅である。バー3スペース4バー5スペース6の加算幅を示すカウントデータ値が幅W43データを成す。W44は、対象キャラクタC1のバー3に続くスペース4、バー5、スペース6、1つ後ろのキャラクタC2のバー1の各々が演算部23aによって加算された幅である。スペース4バー5スペース6バー1の加算幅を示すカウントデータ値が幅W44データを成す。W45は、対象キャラクタC1の白のスペース4に続くバー5、スペース6、1つ後ろのキャラクタC2のバー1及び、スペース2の幅である。バー5スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W45データを成す。上述の7種類の幅W42データ~幅W45データは、1キャラクタの4本加算データであり、幅データD10を構成する。図5Fに示すW52は、1つ前のキャラクタC0のバー5、スペース6、対象キャラクタC1のバー1、スペース2及びバー3の各々が演算部23aによって加算された幅である。バー5スペース6バー1スペース2バー3の加算幅を示すカウントデータ値が幅W52データを成す。W51は、1つ前のキャラクタC0のスペース6キャラクタC1のバー1スペース2バー3スペース4の各々が演算部23aによって加算された幅である。スペース6バー1スペース2バー3スペース4の加算幅を示すカウントデータ値が幅W51データを成す。W51は対象キャラクタC1のバー1、スペース2、バー3、スペース4及びバー5の各々が演算部23aによって加算された幅である。バー1スペース2バー3スペース4バー5の加算幅を示すカウントデータ値が幅W51データを成す。W52は対象キャラクタC1のバー1に続くスペース2、バー3、スペース4、バー5及びスペース6の各々が演算部23aによって加算された幅である。スペース2バー3スペース4バー5スペース6の加算幅を示すカウントデータ値が幅W52データを成す。W53は、対象キャラクタC1のスペース2に続くバー3、スペース4、バー5、スペース6及び1つ後ろのキャラクタC2のバー1の各々が演算部23aによって加算された幅である。バー3スペース4バー5スペース6バー1の加算幅を示すカウントデータ値が幅W53データを成す。W54は、対象キャラクタC1のバー3に続くスペース4、バー5、スペース6、1つ後ろのキャラクタC2のバー1及びスペース2の各々が演算部23aによって加算された幅である。スペース4バー5スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W54データを成す。上述の6種類の幅W52データ及び幅W54データは1キャラクタの5本加算データであり、幅データD10を構成する。図5Gに示すW62は、1つ前のキャラクタC0のバー5、スペース6、対象キャラクタC1のバー1、スペース2、バー3及びスペース4の各々が演算部23aによって加算された幅である。バー5スペース6キャラクタC1のバー1スペース2バー3スペース4の加算幅を示すカウントデータ値が幅W62データを成す。W61は、1つ前のキャラクタC0のスペース6、対象キャラクタC1のバー1、スペース2、バー3、スペース4及びバー5の各々が演算部23aによって加算された幅である。スペース6バー1スペース2バー3スペース4バー5の加算幅を示すカウントデータ値が幅W61データを成す。W61は対象キャラクタC1のバー1、スペース2、バー3、スペース4、バー5及びスペース6の各々が演算部23aによって加算された幅である。バー1スペース2バー3スペース4バー5スペース6の加算幅を示すカウントデータ値が幅W61データを成す。W62は対象キャラクタC1のバー1に続くスペース2、バー3、スペース4、バー5、スペース6及び1つ後ろのキャラクタC2のバー1の各々が演算部23aによって加算された幅である。スペース2バー3スペース4バー5スペース6バー1の加算幅を示すカウントデータ値が幅W62データを成す。W63は対象キャラクタC1のスペース2に続くバー3、スペース4、バー5、スペース6、1つ後ろのキャラクタC2のバー1及びスペース2の各々が演算部23aによって加算された幅である。バー3スペース4バー5スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W63データを成す。上述の5種類の幅W62データ及び幅W63データは1キャラクタの6本加算データであり、幅データD10を構成する。上述のカウンタ部4から出力されるカウントデータ値に基づいて、6種類の幅W11データ~幅W16データ1本データ、7種類の幅W21データ~幅W26データ2本加算データ、8種類の幅W32データ~幅W36データ3本加算データ、7種類の幅W42データ~幅W45データ4本加算データ、6種類の幅W52データ及び幅W54データ5本加算データ及び、5種類の幅W62データ及び幅W63データ6本加算データの合計で、39種類の対象キャラクタが得られる。続いて、図6A~Gを参照して、第1の実施例に係る1本データ、2本~6本加算データの他の算出例その2について説明する。この例では、対象キャラクタC1の両側のキャラクタC0,C2まで加算範囲を拡張する場合であって、図6Aに示す対象キャラクタC1と隣接する1つ前のキャラクタC0のスペース6、バー5、スペース4、バー3及びスペース2の5エレメントまで加算範囲を拡張し、かつ、1つ後ろのキャラクタC2のバー1、スペース2、バー3、スペース4及びバー5の5エレメントまで加算範囲を拡張する場合を前提とする。これらのキャラクタC0~C2を有したバーコード記号1の場合を例に挙げて、対象キャラクタを作成する場合を説明する。図6Bに示すW11は対象キャラクタC1の黒部分のバー1の幅である。バー1の幅はカウンタ部4により計数され、そのカウントデータ値が幅W11データを成す。W12は対象キャラクタC1のバー1に続くスペース2の幅である。スペース2の幅もカウンタ部4により計数され、そのカウントデータ値が幅W12データを成す。W13はスペース2に続くバー3の幅である。バー3の幅はカウンタ部4により計数され、そのカウントデータ値が幅W13データを成す。W14は対象キャラクタC1のバー3に続くスペース4の幅である。スペース4の幅もカウンタ部4により計数され、そのカウントデータ値が幅W14データを成す。W15は対象キャラクタC1のスペース4に続くバー5の幅である。バー5の幅はカウンタ部4により計数され、そのカウントデータ値が幅W15データを成す。W16は対象キャラクタC1のバー5に続くスペース6の幅である。スペース6の幅もカウンタ部4により計数され、そのカウントデータ値が幅W16データを成す。上述の6種類の幅W11データ~幅W16データは1キャラクタの1本データであり、幅データD10を構成する。図6Cに示すW21は、1つ前のキャラクタC0のスペース6と対象キャラクタC1のバー1の各々が演算部23aによって加算された幅である。スペース6バー1の加算幅を示すカウントデータ値が幅W21データを成す。W21は1つ前のキャラクタC0のスペース6に続くバー1とスペース2の各々が演算部23aによって加算された幅以下バー1スペース2と記すである。バー1スペース2の加算幅を示すカウントデータ値が幅W21データを成す。W22は対象キャラクタC1のバー1に続くスペース2及びバー3の各々が演算部23aによって加算された幅である。スペース2バー3の加算幅を示すカウントデータ値が幅W22データを成す。W23は対象キャラクタC1のスペース2に続くバー3及びスペース4の各々が演算部23aによって加算された幅である。バー3スペース4の加算幅を示すカウントデータ値が幅W23データを成す。W24は対象キャラクタC1のバー3に続くスペース4及びバー5の各々が演算部23aによって加算された幅である。スペース4バー5の加算幅を示すカウントデータ値が幅W24データを成す。W25は対象キャラクタC1のスペース4に続くバー5及びスペース6の各々が演算部23aによって加算された幅である。バー5スペース6の加算幅を示すカウントデータ値が幅W25データを成す。W26は対象キャラクタC1のバー5に続くスペース6及び1つ後ろのキャラクタC2のバー1の各々が演算部23aによって加算された幅である。スペース6バー1の加算幅を示すカウントデータ値が幅W26データを成す。上述の7種類の幅W21データ~幅W26データは1キャラクタの2本加算データであり、幅データD10を構成する。図6Dに示すW32は、1つ前のキャラクタC0のバー5、スペース6及び、対象キャラクタC1のバー1の各々が演算部23aによって加算された幅である。バー5スペース6バー1の加算幅を示すカウントデータ値が幅W32データを成す。W31は、1つ前のキャラクタC0のスペース6対象キャラクタC1のバー1及び、スペース2の各々が演算部23aによって加算された幅である。スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W31データを成す。W31は対象キャラクタC1のバー1、スペース2及びバー3の各々が演算部23aによって加算された幅である。バー1スペース2バー3の加算幅を示すカウントデータ値が幅W31データを成す。W32は対象キャラクタC1のバー1に続くスペース2、バー3及びスペース4の各々が演算部23aによって加算された幅である。スペース2バー3スペース4の加算幅を示すカウントデータ値が幅W32データを成す。W33は対象キャラクタC1のスペース2に続くバー3、スペース4及びバー5の各々が演算部23aによって加算された幅である。バー3スペース4バー5の加算幅を示すカウントデータ値が幅W33データを成す。W34はバー3に続くスペース4、バー5及びスペース6の各々が演算部23aによって加算された幅である。スペース4バー5スペース6の加算幅を示すカウントデータ値が幅W34データを成す。W35は、対象キャラクタC1のスペース4に続くバー5、スペース6、1つ後ろのキャラクタC2のバー1の各々が演算部23aによって加算された幅である。バー5スペース6バー1の加算幅を示すカウントデータ値が幅W35データを成す。W36は、対象キャラクタC1のバー3に続くスペース6の1つ後ろのキャラクタC2のバー1及びスペース2の各々が演算部23aによって加算された幅である。スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W36データを成す。上述の8種類の幅W32データ~幅W36データは1キャラクタの3本加算データであり、幅データD10を構成する。図6Eに示すW43は、1つ前のキャラクタC0のスペース4、バー5、スペース6及び、バー1の各々が演算部23aによって加算された幅である。スペース4バー5スペース6バー1の加算幅を示すカウントデータ値が幅W43データを成す。W42は、1つ前のキャラクタC0のバー5、スペース6、対象キャラクタC1のバー1及びスペース2の各々が演算部23aによって加算された幅である。バー5スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W42データを成す。W41は、1つ前のキャラクタC0のスペース6、対象キャラクタC1のバー1、スペース2及びバー3の各々が演算部23aによって加算された幅である。スペース6バー1スペース2バー3の加算幅を示すカウントデータ値が幅W41データを成す。W41は対象キャラクタC1のバー1、スペース2、バー3及びスペース4の各々が演算部23aによって加算された幅である。バー1スペース2バー3スペース4の加算幅を示すカウントデータ値が幅W41データを成す。W42は対象キャラクタC1のバー1に続くスペース2、バー3、スペース4及びバー5の各々が演算部23aによって加算された幅である。スペース2バー3スペース4バー5の加算幅を示すカウントデータ値が幅W42データを成す。W43は対象キャラクタC1のスペース2に続くバー3、スペース4、バー5及びスペース6の各々が演算部23aによって加算された幅である。バー3スペース4バー5スペース6の加算幅を示すカウントデータ値が幅W43データを成す。W44は、対象キャラクタC1のバー3に続くスペース4、バー5、スペース6、1つ後ろのキャラクタC2のバー1の各々が演算部23aによって加算された幅である。スペース4バー5スペース6バー1の加算幅を示すカウントデータ値が幅W44データを成す。W45は、対象キャラクタC1の白のスペース4に続くバー5、スペース6、1つ後ろのキャラクタC2のバー1及び、スペース2の各々が演算部23aによって加算された幅である。バー5スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W45データを成す。W46は、対象キャラクタC1のバー5に続くスペース6、1つ後ろのキャラクタC2のバー1、スペース2及びバー3の各々が演算部23aによって加算された幅である。スペース6バー1スペース2バー3の加算幅を示すカウントデータ値が幅W46データを成す。上述の9種類の幅W43データ~幅W46データは1キャラクタの4本加算データであり、幅データD10を構成する。図6Fに示すW54は、1つ前のキャラクタC0のバー3、スペース4、バー5、スペース6キャラクタC1のバー1の各々が演算部23aによって加算された幅である。バー3スペース4バー5スペース6バー1の加算幅を示すカウントデータ値が幅W54データを成す。W53は、1つ前のキャラクタC0のスペース4、バー5、スペース6、対象キャラクタC1のバー1及びスペース2の各々が演算部23aによって加算された幅である。スペース4バー5スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W53データを成す。W52は、1つ前のキャラクタC0のバー5、スペース6、対象キャラクタC1のバー1、スペース2及びバー3の各々が演算部23aによって加算された幅である。バー5スペース6バー1スペース2バー3の加算幅を示すカウントデータ値が幅W52データを成す。W51は、1つ前のキャラクタC0のスペース6、対象キャラクタC1のバー1、スペース2、バー3及びスペース4の各々が演算部23aによって加算された幅である。スペース6バー1スペース2バー3スペース4の加算幅を示すカウントデータ値が幅W51データを成す。W51は対象キャラクタC1のバー1、スペース2、バー3、スペース4及びバー5の各々が演算部23aによって加算された幅である。バー1スペース2バー3スペース4バー5の加算幅を示すカウントデータ値が幅W51データを成す。W52は対象キャラクタC1のバー1に続くスペース2、バー3、スペース4、バー5及びスペース6の各々が演算部23aによって加算された幅である。スペース2バー3スペース4バー5スペース6の加算幅を示すカウントデータ値が幅W52データを成す。W53は、対象キャラクタC1のスペース2に続くバー3、スペース4、バー5、スペース6及び1つ後ろのキャラクタC2のバー1の各々が演算部23aによって加算された幅である。バー3スペース4バー5スペース6バー1の加算幅を示すカウントデータ値が幅W53データを成す。W54は、対象キャラクタC1のバー3に続くスペース4、バー5、スペース6、1つ後ろのキャラクタC2のバー1及びスペース2の各々が演算部23aによって加算された幅である。スペース4バー5スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W54データを成す。W55は、対象キャラクタC1のスペース4に続くバー5、スペース6、1つ後ろのキャラクタC2のバー1、スペース2及び、バー3の各々が演算部23aによって加算された幅である。バー5スペース6バー1スペース2バー3の加算幅を示すカウントデータ値が幅W55データを成す。W56は、対象キャラクタC1のバー5に続くスペース6、1つ後ろのキャラクタC2のバー1、スペース2、バー3及びスペース4の各々が演算部23aによって加算された幅である。スペース6バー1スペース2バー3スペース4の加算幅を示すカウントデータ値が幅W56データを成す。上述の10種類の幅W54データ及び幅W56データは1キャラクタの5本加算データであり、幅データD10を構成する。図6Gに示すW65は、1つ前のキャラクタC0のスペース2、バー3、スペース4、バー5、スペース6及び、対象キャラクタC1のバー1の各々が演算部23aによって加算された幅である。スペース2バー3スペース4バー5スペース6バー1の加算幅を示すカウントデータ値が幅W65データを成す。W64は、1つ前のキャラクタC0のバー3、スペース4、バー5、スペース6、対象キャラクタC1のバー1及びスペース2の各々が演算部23aによって加算された幅である。バー3スペース4バー5スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W64データを成す。W63は、1つ前のキャラクタC0のスペース4、バー5、スペース6、対象キャラクタC1のバー1、スペース2及びバー3の各々が演算部23aによって加算された幅である。スペース4バー5スペース6バー1スペース2バー3の加算幅を示すカウントデータ値が幅W63データを成す。W62は、1つ前のキャラクタC0のバー5スペース6キャラクタC1のバー1スペース2バー3スペース4の各々が演算部23aによって加算された幅である。バー5スペース6キャラクタC1のバー1スペース2バー3スペース4の加算幅を示すカウントデータ値が幅W62データを成す。W61は、1つ前のキャラクタC0のスペース6キャラクタC1のバー1スペース2バー3スペース4バー5の各々が演算部23aによって加算された幅である。スペース6キャラクタC1のバー1スペース2バー3スペース4バー5の加算幅を示すカウントデータ値が幅W61データを成す。W61は対象キャラクタC1のバー1、スペース2、バー3、スペース4、バー5及びスペース6の各々が演算部23aによって加算された幅である。バー1スペース2バー3スペース4バー5スペース6の加算幅を示すカウントデータ値が幅W61データを成す。W62は対象キャラクタC1のバー1に続くスペース2、バー3、スペース4、バー5、スペース6及び、1つ後ろのキャラクタC2のバー1の各々が演算部23aによって加算された幅である。スペース2バー3スペース4バー5スペース6バー1の加算幅を示すカウントデータ値が幅W62データを成す。W63は対象キャラクタC1のスペース2に続くバー3、スペース4、バー5、スペース6、1つ後ろのキャラクタC2のバー1及びスペース2の各々が演算部23aによって加算された幅である。バー3スペース4バー5スペース6バー1スペース2の加算幅を示すカウントデータ値が幅W63データを成す。W64は、対象キャラクタC1のバー3に続くスペース4、バー5、スペース6、1つ後ろのキャラクタC2のバー1、スペース2及びバー3の各々が演算部23aによって加算された幅である。スペース4バー5スペース61つ後ろのキャラクタC2のバー1スペース2バー3の加算幅を示すカウントデータ値が幅W64データを成す。W65は、対象キャラクタC1のスペース4に続くバー5、スペース6、1つ後ろのキャラクタC2のバー1、スペース2、バー3及びスペース4の各々が演算部23aによって加算された幅である。バー5スペース61つ後ろのキャラクタC2のバー1スペース2バー3スペース4の加算幅を示すカウントデータ値が幅W65データを成す。W66は、対象キャラクタC1のバー5に続くスペース6、1つ後ろのキャラクタC2のバー1、スペース2、バー3、スペース4及びバー5の各々が演算部23aによって加算された幅である。スペース61つ後ろのキャラクタC2のバー1スペース2バー3スペース4バー5の加算幅を示すカウントデータ値が幅W66データを成す。上述の11種類の幅W65データ及び幅W66データは1キャラクタの6本加算データであり、幅データD10を構成する。この例では、図1に示したカウンタ部4から出力されるカウントデータ値に基づいて、6種類の幅W11データ~幅W16データ1本データ、7種類の幅W21データ~幅W26データ2本加算データ、8種類の幅W32データ~幅W36データ3本加算データ、9種類の幅W43データ~幅W46データ4本加算データ、10種類の幅W54データ及び幅W56データ5本加算データ及び、11種類の幅W65データ及び幅W66データ6本加算データの合計で、51種類の対象キャラクタが得られる。続いて、図7~図10を参照して、第2の実施例に係るデコード例について説明する。ここで、図7A~Cを参照して、CODE128のバーコード記号例、その欠損例及びその再構成例について説明をする。図7Aに示すCODE128のバーコード記号1は、バーやスペース等の欠落や傷等を生じていないものである。バーコード記号1は8キャラクタから構成され、例えば、バーコードデータD12は、数字の123455678を表現する。図7Bに示すCODE128のバーコード記号1’は、バーやスペース等に欠落や傷等が生じているものである。バーコード記号1’は図7Aに示したCODE128のバーコード記号1に生じたものと仮定する。図中の3本の横向き破線は、閾値th1~th3である。各々の閾値th1~th3は、スキャン方向と直交する上中下段に設定されている。閾値th1を基準にしてバーコード記号1’をスキャンして、データを読み込むと、傷等によりキャラクタ3及び4が欠落している。閾値th2を基準にしてバーコード記号1’をスキャンしてデータを読み込むと、傷等によりキャラクタ3~6が欠落している。閾値th3を基準にしてバーコード記号1’をスキャンしてデータを読み込むと、傷等によりキャラクタ7及び8が欠落している。図7Cに示すように閾値th1を基準にしたデコード結果は、125678を示すバーコードデータD12が出力される。3及び4がデコードされていない。閾値th2を基準にしたデコード結果は、1278を示すバーコードデータD12が出力される。3~6がデコードされていない。閾値th3を基準にしたデコード結果は、123456を示すバーコードデータD12が出力される。7及び8がデコードされていない。第2の実施例では、図7Bに示したようにバーやスペース等に欠落や傷等が生じている場合であっても、125678や、1278、123456等を123455678を表現するバーコードデータD12に再構成するようになされる。この例では、スキャン方向と直交する上中下段に次々とスキャンを行って、エラーキャラクタを補正し、エラーキャラクタが無くなった時点でCDチェックデジットの照合を行って、バーコードデータD12を作成するようにした。これにより、かすれ、汚れ等により、エレメントの一部が欠落しているバーコード記号1であってもその読み取りが可能となる。また、第1の実施例では1キャラクタ内の幅データD10のみを利用した場合について説明したが、1キャラクタ内の端部の幅データD10が利用される回数が少ない。例えば、対象キャラクタC1のバー1の幅W11データは2本加算パターンの算出時、加算幅W21でのみ利用されるが、スペース2の幅W12データは、2本加算パターンの算出時、加算幅W21と加算幅W22とで利用されている。そこで、第2の実施例では当該キャラクタC1に隣接するキャラクタC0,C2も含めたエレメント部分も含めて計算を行うようにした。続いて、図8~図10を参照して、第2の実施例に係る難読キャラクタのデコード例その1~3について説明する。この実施例では、パターン認識する加算範囲を両側の2キャラクタのエレメントまで拡張した。加算範囲は、図7Aに示した対象キャラクタと隣接する1つ前のキャラクタC0のスペース6、バー5、スペース4、バー3及びスペース2の5エレメントまで拡張し、かつ、1つ後ろのキャラクタC2のバー1、スペース2、バー3、スペース4及びバー5の5エレメントまで拡張する場合を前提とする。この加算範囲の拡張によって、51種類の対象キャラクタからデコード結果を得る場合を前提とするマルチスキャンリコントラクション。これらをデコード条件にして、図8に示すフローチャートのステップST21でCPU23はスタートマージンを検索する。このとき、光学読取部2は、第1の実施例と同様にして、バーコード記号1を読み取って、コード読取データD2を発生する。コード読取データD2は、光学読取部2からカウンタ部4へ出力される。クロック発生部3は、所定周波数のサンプリングク用のCLK信号をカウンタ部4に出力する。カウンタ部4は光学読取部2から出力されるコード読取データD2を入力すると共に、クロック発生部3から出力されるCLK信号を入力し、CLK信号に基づいてコード読取データD2をカウントし、コード読取データD2を白部分のスペースおよび黒部分のバーを含むエレメントの1本幅及び2本加算幅を示すカウントデータD4に変換する。カウントデータD4は、バーコード記号1における各バー黒部分の幅およびスペース白部分の幅を示す数値データ列となる。カウントデータD4は、幅データ格納部10に保存される。なお、スタートマージンの検索については、その説明を省略する。ステップST22でCPU23は、1キャラクタ分の幅データ6本を抽出する。図15に示したキャラクタC1によれば、黒部分のバー1の幅W11がカウンタ部4により計数され、そのカウントデータ値が幅W11データとなる。バー1に続く白部分のスペース2の幅W12もカウンタ部4により計数され、そのカウントデータ値が幅W12データとなる。スペース2に続くバー3の幅W13はカウンタ部4により計数され、そのカウントデータ値が幅W13データとなる。このバー3に続くスペース4の幅W14もカウンタ部4により計数され、そのカウントデータ値は幅W14データとなる。スペース4に続くバー5の幅W15はカウンタ部4により計数され、そのカウントデータ値が幅W15データとなる。バー5に続くスペース6の幅W16もカウンタ部4により計数され、そのカウントデータ値が幅W16データとなる。上述の6種類の幅W11データ~幅W16データはバーコードデータ値D30を構成する。バーコードデータ値D30はインターフェース部11を介してCPU23に出力される。ステップST23でCPU23はバーの分割、消失の有無に基づいて制御を分岐する。バーの分割、消失の有無については、6本の幅の合計と1キャラクタ幅とを比較し、1キャラクタ分の幅データD10が適切かを判断する。ここでは、1キャラクタ内で隣接するバー及びスペースを含む6本のエレメントの幅を加算した合計値と、1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて1キャラクタ分の幅データD10が適切か否かを判別する。この例で、CPU23では比較部23cが1キャラクタ内で隣接する6本のバー1、スペース2、バー3、スペース4、バー5及びスペース6の幅W1~W6の合計と、1キャラクタの全幅を示す全幅値とを比較する。比較部23cによる比較結果によって、1キャラクタ分の幅データD10が適切か否かが判別でき、この判別に基づいてキャラクタのバーの消失や分割等を判断できるようになる。また、複数のスキャンのデコード結果を組み合わせることが可能となり、汚れや、かすれがひどいバーコードにおいても読み取りが可能となる。また、当該キャラクタC1の前後のキャラクタC0,C2の全幅からキャラクタフレームを判定できるので、ボイドやスポット等によるエレメントに過不足が有っても、デコードを継続できるようになる。また、バーの消失や分割等の判断結果に基づいて対象キャラクタを絞ることができ、計算量の軽減が図れ、処理時間の高速化につながる。バーの分割、消失が無い場合は、ステップST24でCPU23は1モジュール幅を算出し、1キャラクタ幅を記憶する。このとき、演算部23aは、6種類の幅W11データ~幅W16データに基づいて当該キャラクタC1の1モジュール幅を算出する。1キャラクタ幅は、図7Bに示した1キャラクタ内で隣接する6本のバー1、スペース2、バー3、スペース4、バー5及びスペース6の幅W1~W6を合計して求められる。ステップST25でCPU23は1キャラクタ分の幅データD10を2本加算パターンに変換する。例えば、図7Cに示した1つ前のキャラクタC0のスペース6と対象キャラクタC1のバー1の各々が演算部23aによって加算された加算幅W21を示すカウントデータ値が幅W21データとなる。同様にして、1つ前のキャラクタC0のスペース6に続くバー1とスペース2の各々が演算部23aによって加算された加算幅W21を示すカウントデータ値が幅W21データとなる。対象キャラクタC1のバー1に続くスペース2及びバー3の各々が演算部23aによって加算された加算幅W22を示すカウントデータ値が幅W22データとなる。対象キャラクタC1のスペース2に続くバー3及びスペース4の各々が演算部23aによって加算された加算幅W23を示すカウントデータ値が幅W23データとなる。対象キャラクタC1のバー3に続くスペース4及びバー5の各々が演算部23aによって加算された加算幅W24を示すカウントデータ値が幅W24データとなる。対象キャラクタC1のスペース4に続くバー5及びスペース6の各々が演算部23aによって加算された加算幅W25を示すカウントデータ値が幅W25データとなる。対象キャラクタC1のバー3に続くスペース4及び1つ後ろのキャラクタC2のバー1の各々が演算部23aによって加算された加算幅W26を示すカウントデータ値が幅W26データとなる。上述の7種類の幅W21データ~幅W26データは1キャラクタの2本加算データであり、幅データD10から構成される。その後、ステップST26でCPU23は、先に変換した2本加算パターンが一致するキャラクタを検索する。この例では、図1に示したカウンタ部4から出力されるカウントデータ値に基づいて、検索部23dが、6種類の幅W11データ~幅W16データ1本データ、7種類の幅W21データ~幅W26データ2本加算データ、8種類の幅W32データ~幅W36データ3本加算データ、9種類の幅W43データ~幅W46データ4本加算データ、10種類の幅W54データ及び幅W56データ5本加算データ及び、11種類の幅W65データ及び幅W66データ6本加算データの51種類の対象キャラクタC1に対して一致するキャラクタを検索する。その際に各エレメントの幅に対して2種類の対象キャラクタのどちらかと一致する対象キャラクタを検索し、対象キャラクタを絞り込む。この絞り込みにより、おおよそ1~4程度の候補キャラクタが検索される。ステップST27でCPU23は一致するキャラクタの存在有無に基づいて制御を分岐する。一致するキャラクタが存在する場合は、ステップST28で2本加算パターンが一致した対象キャラクタをデコード結果とする。その後、図9に示すステップST31に移行する。なお、ステップST23でバーの分割、消失が有る場合、及び、ステップST27で一致するキャラクタが存在しない場合は、ステップST29でCPU23は現在のキャラクタをエラーキャラクタとする。その後、ステップST30でCPU23は次のキャラクタ1キャラクタ幅分後ろのデータのデコード処理に移行する。その後、ステップST22に移行して、上述した内容を繰り返す。上述のステップST28でデコード結果となされた候補キャラクタについては、図9に示すステップST31でCPU23はマージン直後のキャラクタか否かに基づいて制御を分岐する。デコード結果となされた候補キャラクタが、マージン直後のキャラクタではない場合は、ステップST32に移行してCPU23はデコード結果がストップキャラクタか否かに基づいて制御を分岐する。デコード結果がストップキャラクタである場合は、ステップST33に移行してCPU23は、デコード結果にエラーキャラクタが存在しないか否かに基づいて制御を分岐する。デコード結果にエラーキャラクタが存在しない場合は、ステップST34に移行して、CPU23はデコードバッファ25に現在今のスキャンのデコード結果を上書きする。その後、ステップST35に移行してCPU23は誤り検知パリティチェックを実行して、チェックデジットが正しいか否かに基づいて制御を分岐する。チェックデジットが正しい場合は、ステップST36でCPU23は読み取りを完了し、デコードバッファ25のバーコードデータD12を出力し、デコードバッファ25をクリアする正常終了。その後、ステップST45に移行する。なお、ステップST31でマージン直後のキャラクタである場合は、ステップST37に移行してCPU23は、デコード結果がスタートキャラクタか否かに基づいて制御を分岐する。上述のステップST37でデコード結果がスタートキャラクタでない場合及び、ステップST32でデコード結果がストップキャラクタでない場合は、ステップST38に移行する。ステップST38でCPU23は、次キャラクタ6本後ろの幅データD10のデコード処理を実行する。その後、ステップST22に戻る。また、ステップST33でデコード結果にエラーキャラクタが存在している場合は、図10に示すステップST39でCPU23はデコードバッファ25の長さとデコードデータ長とが等しいか否かに基づいて制御を分岐する。デコードバッファ25の長さとデコードデータ長とが等しい場合は、ステップST41で、デコードバッファ25のエラーキャラクタ部分のデコードが成功していたらデータを書き換える。その後、ステップST42に移行して、デコードバッファ25にエラーキャラクタが存在しない否かに基づいて制御を分岐する。デコードバッファ25にエラーキャラクタが存在していない場合は、ステップST35に戻る。上述のステップST35でチェックデジットが誤っている場合は、図10に示すステップST43でデコードバッファ25をクリアした後、図9に示したステップST37でデコード結果がスタートキャラクタではない場合、図10に示したステップST39でデコードバッファ25の長さとデコードデータ長とが異なる場合は、ステップST40でデコードバッファ25をクリアした後、及び、ステップST42でデコードバッファ25にエラーキャラクタが存在する場合は、ステップST44に移行してCPU23は、読み取りエラー処理を実行する。読み取りエラー処理では次のマージンを検索する等が行われる。また、キャラクタ認識がエラーとなった場合に、エラーキャラクタを仮に配置してバーコードデータを作成するようにしてもよい。その後、図9に示すステップST45に移行して、CPU23は終了を判別する。例えば、当該バーコード記号読取装置100に対して読取終了指令が検出され、読取終了指令が検出された場合は、バーコード記号1の読み取り制御を終了する。読取終了指令が検出されていない場合は、バーコード記号1の読み取り制御を継続するべく、ステップST21に戻って、上述した内容を繰り返すようになされる。このように第2の実施例に係るバーコード記号読取装置100によれば、パターン認識する加算範囲を対象キャラクタの両側の2キャラクタC0,C2のエレメントまで拡張した。すなわち、加算範囲に関して、図7Aに示した対象キャラクタと隣接する1つ前のキャラクタC0のスペース6、バー5、スペース4、バー3及びスペース2の5エレメントまで拡張し、かつ、1つ後ろのキャラクタC2のバー1、スペース2、バー3、スペース4及びバー5の5エレメントまで拡張したので、51種類の対象キャラクタの中からデコード結果となる候補キャラクタを決定できるようになる。従って、キャラクタ内の幅データだけでパターン認識を行う従来方式に比べて、対象キャラクタの両側の2キャラクタC0,C2のエレメントも含めた部分についても計算に参画されるので、対象キャラクタの端部に、欠落、傷等の誤差が多く含まれるパターンであっても、誤読し難くなった。これにより、バー、スペース等のエレメントエレメントの幅の最大誤差が±0.5モジュール以上あっても、キャラクタとして認識できる可能性が高くなった。しかも、対象キャラクタを絞ることによって、計算量の軽減が図れ、パターン認識処理に係る時間が短縮され、データ処理の高速化につながる。続いて、図11~図13を参照して、第3の実施例に係る難読キャラクタのデコード例その1~3について説明する。この実施例では、第1の実施例で説明したキャラクタデコードアルゴリズムと、第2の実施例で説明したマルチスキャンリコントラクションとを併合した処理が行われる。これらをデコード条件にして、図11に示すフローチャートのステップST51でスタートマージンを検索する。このとき、光学読取部2は、第1の実施例と同様にして、バーコード記号1を読み取って、コード読取データD2を発生する。コード読取データD2は、光学読取部2からカウンタ部4へ出力される。クロック発生部3は、所定周波数のサンプリングク用のCLK信号をカウンタ部4に出力する。カウンタ部4は光学読取部2から出力されるコード読取データD2を入力すると共に、クロック発生部3から出力されるCLK信号を入力し、CLK信号に基づいてコード読取データD2をカウントし、コード読取データD2を白部分のスペースおよび黒部分のバーを含むエレメントの1本幅及び2本加算幅を示すカウントデータD4に変換する。カウントデータD4は、バーコード記号1における各バー黒部分の幅およびスペース白部分の幅を示す数値データ列となる。カウントデータD4は、幅データ格納部10に保存される。なお、スタートマージンの検索については、その説明を省略する。ステップST52でCPU23は6本の幅の合計と1キャラクタ幅とを比較し、1キャラクタ分の幅データD10が適切かを判断する。ここでは、1キャラクタ内で隣接するバー及びスペースを含む6本のエレメントの幅を加算した合計値と、1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて1キャラクタ分の幅データD10が適切か否かを判別する。この例で、CPU23では比較部23cが1キャラクタ内で隣接する6本のバー1、スペース2、バー3、スペース4、バー5及びスペース6の幅W1~W6の合計と、1キャラクタの全幅を示す全幅値とを比較する。比較部23cによる比較結果によって、1キャラクタ分の幅データD10が適切か否かが判別でき、この判別に基づいてキャラクタ候補を絞ることができ、計算量の軽減が図れ、処理時間の高速化につながる。ステップST53でCPU23はバーの分割、消失の有無に基づいて制御を分岐する。バーの分割、消失の有無については、比較部23cによる比較結果を利用する。対象キャラクタC1の前後のキャラクタC0,C2の全幅からキャラクタフレームを判定できるので、ボイドやスポット等によるエレメントに過不足が有っても、デコードを継続できるようになる。バーの分割、消失が無い場合は、ステップST54でCPU23は1モジュール幅を算出し、1キャラクタ幅を記憶する。このとき、演算部23aは、6種類の幅W11データ~幅W16データに基づいて対象キャラクタC1の1モジュール幅を算出する。1キャラクタ幅は、図7Bに示した1キャラクタ内で隣接する6本のバー1、スペース2、バー3、スペース4、バー5及びスペース6の幅W1~W6を合計して求められる。ステップST55でCPU23は抽出された21種類の幅データD10を1~6本加算パターンエレメント幅に変換する。この例では、6種類の幅W11データ~幅W16データが1キャラクタの1本データに変換され、1本データに基づく対象キャラクタC1の被認識パターンとして、1本パターンが作成される。5種類の幅W21データ~幅W25データは1キャラクタの2本加算データに変換され、2本加算データに基づく対象キャラクタC1の2本加算パターン被認識パターンが作成される。4種類の幅W31データ~幅W34データは1キャラクタの3本加算データに変換され、3本加算データに基づく対象キャラクタC1の3本加算識パターンが作成される。3種類の幅W41データ~幅W43データは1キャラクタの4本加算データに変換され、4本加算データに基づく対象キャラクタC1の4本加算パターンが作成される。2種類の幅W51データ及び幅W52データは1キャラクタの5本加算データに変換され、5本加算データに基づく対象キャラクタの5本加算パターンが作成される。1種類の幅W61データは1キャラクタの6本加算データに変換され、6本加算データに基づく対象キャラクタC4の6本加算パターンが作成される。ステップST56でCPU23はキャラクタを絞り込むために、1本パターン、2~6本加算パターンの全てに対してモジュール数の誤差が1以内のキャラクタを検索して候補キャラクタを決定する。このとき、CPU23では抽出部23bが、演算部23aによって求められた1本パターン、2~6本加算パターンの各々のモジュール数が誤差1以内の整数となる対象キャラクタC1等を絞り込んで候補キャラクタを抽出する。その際に、抽出部23bは、演算部23aによって求められた1本パターン、2~6本加算パターンの1キャラクタ分の6本の幅データD10と、対象キャラクタの前後の6-1本の幅データD10とを抽出する。ステップST57でCPU23は、候補キャラクタが1つ以上存在するか否かに基づいて制御を分岐する。候補キャラクタが1つ以上複数存在する場合は、ステップST58で1~6本加算パターンの実測値とその理想値との間の誤差を算出し、この誤差の合計が最小となった候補キャラクタをデコード結果とする。この誤差値が最小となる候補キャラクタは、期待値キャラクタと最も相関が強いキャラクタである。この例では、総合的な誤差が最も少ない対象キャラクタC1等を候補キャラクタとして選択できるようになる。このとき、CPU23では、期待値キャラクタ理論値が期待値格納部24からCPU23の比較部23cへ読み出される。比較部23cは、抽出部23bによって抽出された各々の2~6本加算パターンエレメント幅のモジュール数の候補キャラクタと、候補キャラクタを評価するための期待値キャラクタ理論値とを比較する。この比較結果は検索部23dへ出力される。検索部23dでは、候補キャラクタと最も相関が強い期待値キャラクタが検索される。例えば、上述の演算部23aが候補キャラクタのモジール数の実測値と、期待値キャラクタのモジール数の理想値との間の誤差を算出すると、検索部23dが、演算部23aによって算出された誤差を合計して得られる誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索する。この例では、誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索するので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。なお、ステップST57で候補キャラクタが存在しない場合は、ステップST59で現在のキャラクタをエラーキャラクタとする。その後、ステップST60で次のキャラクタキャラクタ幅分後ろのデータのデコード処理に移行する。上述のステップST58でデコード結果となされた候補キャラクタについては、図12に示すステップST61でCPU23はマージン直後の対象キャラクタか否かに基づいて制御を分岐する。デコード結果となされた候補キャラクタが、マージン直後の対象キャラクタではない場合は、ステップST62に移行してCPU23はデコード結果がストップキャラクタか否かに基づいて制御を分岐する。デコード結果がストップキャラクタである場合は、ステップST63に移行してCPU23は、デコード結果にエラーキャラクタが存在しないか否かに基づいて制御を分岐する。デコード結果にエラーキャラクタが存在しない場合は、ステップST64に移行して、CPU23はデコードバッファ25に現在今のスキャンのデコード結果を上書きする。その後、ステップST65に移行してCPU23は誤り検知パリティチェックを実行して、チェックデジットが正しいか否かに基づいて制御を分岐する。チェックデジットが正しい場合は、ステップST66でCPU23は読み取りを完了し、デコードバッファ25のバーコードデータD12を出力し、デコードバッファ25をクリアする正常終了。その後、ステップST65に移行する。なお、ステップST61でマージン直後の対象キャラクタである場合は、ステップST67に移行してCPU23は、デコード結果がスタートキャラクタか否かに基づいて制御を分岐する。上述のステップST67でデコード結果がスタートキャラクタである場合及び、ステップST62でデコード結果がストップキャラクタである場合は、ステップST68に移行する。ステップST68でCPU23は、次キャラクタ6本後ろの幅データD10のデコード処理を実行する。その後、ステップST52に戻る。また、ステップST63でデコード結果にエラーキャラクタが存在している場合は、図13に示すステップST69でCPU23はデコードバッファ25の長さとデコードデータ長とが等しいか否かに基づいて制御を分岐する。デコードバッファ25の長さとデコードデータ長とが等しい場合は、ステップST71で、デコードバッファ25のエラーキャラクタ部分のデコードが成功していたらデータを書き換える。その後、ステップST72に移行して、デコードバッファ25にエラーキャラクタが存在しない否かに基づいて制御を分岐する。デコードバッファ25にエラーキャラクタが存在していない場合は、ステップST65に戻る。上述のステップST65でチェックデジットが誤っている場合は、図13に示すステップST73でデコードバッファ25をクリアした後、図12に示したステップST67でデコード結果がスタートキャラクタではない場合、図13に示したステップST69でデコードバッファ25の長さとデコードデータ長とが異なる場合は、ステップST70でデコードバッファ25をクリアした後、及び、ステップST72でデコードバッファ25にエラーキャラクタが存在する場合は、ステップST74に移行してCPU23は、読み取りエラー処理を実行する。読み取りエラー処理では次のマージンを検索する等が行われる。また、キャラクタ認識がエラーとなった場合に、エラーキャラクタを仮に配置してバーコードデータを作成するようにしてもよい。その後、図12に示すステップST75に移行して、CPU23は終了を判別する。例えば、当該バーコード記号読取装置100に対して読取終了指令が検出され、読取終了指令が検出された場合は、バーコード記号1の読み取り制御を終了する。読取終了指令が検出されていない場合は、バーコード記号1の読み取り制御を継続するべく、ステップST51に戻って、上述した内容を繰り返すようになされる。このように、第3の実施例に係るバーコード記号読取装置100によれば、バーコード記号1を読み取ってそのデコード結果を出力する場合に、第1の実施例で説明したキャラクタデコードアルゴリズムと、第2の実施例で説明したマルチスキャンリコントラクションとを併合した処理が行われる。これを前提にして、検索部23dが抽出部23bによって抽出された各々の2~6本加算パターンのモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索するようになる。この検索によって、複数の対象キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータD12を当該バーコード記号1の読取時のデコード結果として出力できるようになるので、従来方式のバーコード読み取り方法に比べて大幅にバーコード記号1の誤読取を防止できるようになる。しかも、誤差の範囲を従来方式の±0.5から±1.0に拡大し、対象キャラクタを増加させている。そして、1キャラクタ分の6本の幅データD10と、対象キャラクタの前後の5本の幅データD10とを抽出するので、2~6本加算パターンの各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んだ候補キャラクタを従来方法に比べてより多く抽出できるようになる。また、候補キャラクタを絞ることによって、計算量の軽減が図れ、パターン認識処理に係る時間が短縮され、データ処理の高速化につながる。これにより、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。なお、誤差の範囲を設定する際の閾値を可変することで、幅データD10の信頼性を選択することも可能となる。この例では、バーコード記号の規格に関して、CODE128の場合について説明したが、これに限られることはなく、CODE39、EAN/UPC、インターリーブド2オブ5、コーダバー、RSS、RSSリミテッド、RSSエクスパンデド等の各々の方式についても、本発明を同様にして適用できるようになる。"