以下、本発明を実施するための最良の形態について、図面を参照しながら説明する。
図1(a)は、本発明の実施の形態に係る磁気カードリーダ1の概要を示す上面図である。図1(b)は、本発明の実施の形態に係る(多チャンネル)磁気ヘッド30と磁気カードの磁気ストライプ35との関係を示す関係平面図である。
この磁気カードリーダ1は、手動式磁気カードリーダ、例えば、スワイプ式磁気カードリーダであり、カード搬送方向と直交する面の断面形状がほぼコ字形状をなし、カード走行路を形成するフレーム20と、このフレーム20の一部(底部)として形成される走行基準面21と、磁気カード2上に形成された磁気ストライプ35に記録されている磁気情報を読み取る磁気ヘッド3と、を有している。
磁気ヘッド3は、カード走行路に臨むように配置されている。そして、磁気カード2上の磁気情報に係る信号を再生する。具体的には、磁気ヘッド3は、磁気カード2表面上の磁気ストライプ35のトラックに接触・摺動することによって、その磁気ストライプ35のトラックに記録された磁気情報を読み取り、その磁気情報に係る信号(F2F信号)を生成する。
本実施の形態では、図1(b)に示すように、磁気ヘッド3は3個の磁気コアを有する多チャンネル磁気ヘッドであり、各磁気コア31,32,33は、磁気カード2の磁気ストライプ35に設けられた3本の磁気データトラック(以下、トラックという)36,37,38にそれぞれ対応して設けられている。
上述したように、本実施の形態に示す磁気カードリーダ1は手動式磁気カードリーダであるので、磁気カード2は操作者によって図中の両方向(磁気記録の順・逆方向)矢印で示すように、走行基準面21に沿って手動で搬送させることで、磁気ヘッド3によって磁気ストライプ35のトラック36,37,38に記録されている磁気データが読み取られるようになっている。
図2は、本発明の実施の形態に係る磁気カードリーダ1及び上位装置6の電気的構成の概略を示すブロック図である。
図2において、本発明の実施の形態に係る磁気カードリーダ1は、磁気ヘッド3と、復調部4と、磁気カードリーダのCPU5と、外部通信用I/F部50と、を備えている。なお、ROMやRAMは、CPU5内に組み込まれていることとしたが、別個独立に設けても構わない。一般に、ROMには、磁気カードリーダ1の基本機能を支えるシステムプログラムが格納される。RAMは、CPU5のワーキングエリアとして機能する。
CPU5は、磁気カードリーダ1の制御中枢を司るものであって、磁気カードリーダ1の統合的な制御を行う。磁気ヘッド3による再生信号は、復調部4において復調された後(F2F信号(アナログ波形)である読み取り信号を、2値化信号(デジタル波形)に変換した後)、CPU5に送られる。なお、再生信号は、復調部4に送られる前に、波形の増幅・整形を行うAMP(増幅)回路を経由してもよい。後述するように、ISO規格フォーマット、ISO規格以外の特定のフォーマットともに、F2F変調方式で行なわれている。
CPU5は、外部通信用I/F部50,50'を介して上位装置6と通信する。上位装置6には、磁気カードリーダ1と同様に、CPU60と、上位装置6の基本機能を支えるシステムプログラムが格納されるROM61と、上位装置6のワーキングエリアとして機能するRAM62と、マウス,キーボード等からなる操作手段及びディスプレイ等からなる表示手段とを有するインターフェース部70と、外部メモリとしてのHDD(ハードディスクドライブ)と、を有している。
このHDD内には、デコード機能を有する磁気データデコード用ミドルウエア7とアプリケーションプログラム8とが設けられている。
なお、磁気データデコード用ミドルウエア7は、アプリケーションプログラム8とI/F部50等との中間で動くソフトウエアであり、汎用性のあるアプリケーションプログラム8が独自の処理機能を有するI/F部50等を制御することができるような機能を持たせている。
本実施の形態において、磁気データデコード用ミドルウエア7には、図2に示すように、デコードデータ生成処理71、フォーマット判定処理72、カード搬送方向判定処理73を備えている。
デコードデータ生成処理71は、磁気カードリーダ1のCPU5から送られてきた磁気データ(ビットデータ)を、各トラックに対応したISO規格のフォーマットまたはISO規格以外の特定のフォーマットに基づいて配列する処理である。また、磁気カードを搬送するカード搬送方向の判定を行なうために、格納された磁気データ(ビットデータ)の前後関係を入れ替えた(第2の)磁気データを生成する処理を行うようにしている。
フォーマット判定処理72は、ISO規格のフォーマットまたはISO規格以外の特定のフォーマットで配列された磁気データに基づいて、フォーマットを判定する処理である。
カード搬送方向判定処理73は、磁気カードを搬送するカード搬送方向が磁気ヘッドによって記録された磁気記録の順方向または逆方向のどちらかであるかを判定する処理である。
また、磁気データデコード用ミドルウエア7は、磁気カードリーダの制御に関する複数のアプリケーションソフトが共通して利用する汎用性の高い磁気カードリーダ制御DLLの一部として設けられてもよい。
本実施の形態では、RAM62には、図2に示すように、読取りデータ領域63及びデコードデータ領域64を備えている。
読取りデータ領域63は、磁気カードリーダ1のCPU5から送られてきた磁気データ(ビットデータ)を、第1トラック、第2トラック、第3トラックの順に格納するようになっている。
デコードデータ領域64は、後述する図3に示すように、磁気カード2に記録されている磁気データの基本配列に従って、格納されるようになっている。本実施の形態では、ISO規格のフォーマットに基づいて磁気データ(ビットデータ)を配列したISOフォワード領域65、ISOバックワード領域66と、ISO規格以外の特定のフォーマットに基づいて磁気データ(ビットデータ)を配列したAAMVAフォワード領域67、AAMVAバックワード領域68と4つの(メモリ)領域を備えている。
さらに、ISOフォワード領域65は、図2に示すように、第1トラック、第2トラック、第3トラックごとに区分けされている。同様に、ISOバックワード領域66、AAMVAフォワード領域67、AAMVAバックワード領域68には、第1、第2、第3トラックの順に(メモリ)領域が設けられている。
そして、ISOフォワード領域65には、読取りデータ領域63に格納された磁気データ(ビットデータ)を第1の磁気データとして格納されている。具体的には、第1〜第3トラックの各トラックにおいて、磁気データ(ビットデータ)の先端から後端の順番に、後述する図3に示すように、磁気カード2に記録されている磁気データの基本配列に従って、磁気データ(ビットデータ)を格納されるようになっている。つぎに、ISOバックワード領域66には、ISOフォワード領域65に格納された磁気データ(ビットデータ)の前後関係を入れ替えた第2の磁気データが格納されている。すなわち、読取りデータ領域63に格納された第1〜第3トラックの各トラックにおいて、磁気データ(ビットデータ)の後端から前端の順番に、後述する図3に示すように、磁気カード2に記録されている磁気データの基本配列に従って、磁気データ(ビットデータ)を格納されるようになっている。
同様にして、AAMVAフォワード領域67には、読取りデータ領域63に格納された磁気データ(ビットデータ)を第1の磁気データとして格納されている。AAMVAバックワード領域68には、AAMVAフォワード領域67に格納された磁気データの前後関係を入れ替えた第2の磁気データが格納されている。
上位装置6において、CPU60は、磁気カードリーダのCPU5から送られてきた磁気データ(ビットデータ)を、磁気データデコード用ミドルウエア7を用いてデコード(復号)し、アプリケーションプログラム8を実行する際の入力としてアプリケーションに通知する。具体的には、本実施形態において、磁気カードリーダ1のCPU5から送られてきた磁気データ(ビットデータ)は、磁気データデコード用ミドルウエア7を用いてISO規格やAAMVA規格で定められたフォーマットに従ったデータ(キャラクタ)へデコード(復号)処理される。アプリケーションプログラム8は、デコード(復号)されたデータを解析して、フォーマット判定やカード搬送方向判定を行う機能を有し、上位装置6に実行させる。なお、アプリケーションプログラム8に磁気データデコード用ミドルウエア7を組み込んでもよい。
このように、本実施の形態では、磁気カードリーダ1は、磁気ヘッド3によって読み取られた磁気カード2の磁気データをビットデータで磁気カードリーダ1から上位装置6へと受け渡し、上位装置6によってデコード処理を行うことから、デコード処理機能を有しない磁気カードリーダ1についても本発明を採用することができる。
なお、CPU60やHDD内のアプリケーションプログラム8は、磁気ヘッド3により読み取られた磁気情報よりスタートコードSTX(SS)やエンドコードETX(ES)やチェックコードを検出する検出手段の一例として、また、磁気情報を読み取ってエラーを検出するエラー検出手段の一例として機能する。
図3は、磁気カード2に記録されている磁気データの基本配列を示す図、図4のうち、(a)はISO規格のフォーマット、(b)はISO規格以外の特定の規格としてのAAMVA規格のフォーマットを示す図である。また、図5は、カードリーダのデータ復調動作を説明するための信号波形図である。
図3に示すように、磁気データは、各トラック毎に、スタートコードSTX(SS)、データ、エンドコードETX(ES)及びチェックコードより構成される。また、スタートコードSTX(SS)の前には、磁気データの同期を取るためのプリアンブルデータ(連続した0)が記録され、チェックコードの後には磁気データの同期を取るためのポストアンブルデータ(連続した0)が記録されている。スタートコードSTX(SS)には始まりを示す磁気データ、エンドコードETX(ES)には終了を示す磁気データが記録されている。データには実際に記録される磁気データが記録されている。また、チェックコードには記録された磁気データを読み出すときに、データエラーが生じていないかどうかを検証するための磁気データが記録されている。
磁気カード等における磁気データの記録は、Fおよび2Fという2種類の周波数の組み合わせによって記録される周波数変調方式が一般的である。かかる方式を採用している磁気カードリーダ等の記録再生装置では、磁気カードの磁気ストライプに対して相対的に磁気ヘッドを摺動させることにより、磁気記録データをアナログ再生信号の形態で再生し、このアナログ再生信号の信号波形に基づき、2値データをデコーディングしている。
図1に示すように、この構成の磁気記録データを再生するための磁気カードリーダにおいては、操作者によって磁気カード2を図中の両方向(磁気記録の順・逆方向)矢印で示すように、走行基準面21に沿って手動で搬送させることで、磁気ヘッド3を磁気カード2の磁気ストライプ35に接触させた状態で、当該磁気カード2を搬送させ、これにより、磁気ストライプ35に記録されている磁気記録データに対応するアナログ再生信号を得ている。
ここで、磁気記録のための記録電流波形は、図5(i)に示すように、周波数Fのパルス信号と、周波数2Fのパルス信号の組み合わせからなり、2値データ「0」は低い周波数Fのパルス信号により規定され、2値データ「1」は高い周波数2Fのパルス信号により規定される。従って、図5(i)では、(000010・・)と続く2値データが表されている。磁気ヘッド11から増幅器41を介して得られるアナログ再生信号Aの信号波形は、図5(ii)に示すような波形となり、記録電流波形の立ち上がりおよび立ち下がり時点が正負のピークとなって現れる。換言すると、磁気的に記録されている記録データの磁気極性の反転位置で正負のピークが現れる。このアナログ再生信号波形は、ピーク検出回路42に供給されて、ピーク位置が判別される。さらに、比較機43を介して、(iv)に示すような記録電流波形に対応するデジタル再生信号波形が得られる。このデジタル信号波形に基づき、上位装置6によって磁気記録データのデコーディングが行われる。例えば、図5(i)より、磁気ヘッド3で再生された順番に、"000010・・・・"と続くビットデータ(2値データ)が作成される。これを、上位装置6のRAMに1トラック分格納される。次に、格納されたビットデータ(2値データ)は、後述するとおり、ISO規格の第1トラックは、7ビットで各コード等が形成されているので、1番目のビットデータ(2値データ)から順に、7ビットづつ区切りをつけ、図4(a)に示すSTXコード、ETXコードのビット配列をみつけ、その間のビットデータが、図3に示すデータとなる。
本実施の形態では、ISO規格のフォーマットは、図4(a)に示すようになっており、3つのトラック(第1トラック乃至第3トラック)からなっている。
第1トラック(トラック1(IATA形式))はIATA形式とも呼ばれている。記録される磁気データは、1つのキャラクタが7ビットで構成され、キャラクタは英数字と各種記号が含まれている。磁気データとして記録されるキャラクタ数は、最小キャラクタ数(図4(a)では「SMIN」と明記)は3、最大キャラクタ数(図4(a)では「SMAX」と明記)は79となっている。なお、最大キャラクタ数は72となるタイプも存在する。
1つのキャラクタを構成する7ビットは、6つのデータビットと1つのパリティビットで構成されている。例えば、"1011011"で示されるキャラクタにおいて、第1番目のビット"1"はパリティビットとなっており、残りの6つのデータビットの正当性を検証するようになっている。そして、残りの6つのビット"011011"はデータビットであり、キャラクタを定義している。
また、スタートコードSTX(SS)は、"1000101"と定義されており、第1番目のビット"1"はパリティビットとなっている。エンドコードETX(ES)は、"0011111"と定義されており、第1番目のビット"0"はパリティビットとなっている。
第2トラック(トラック2(ABA形式))はABA形式とも呼ばれている。この第2トラックに記録される磁気データは、1つのキャラクタが5ビットで構成され、キャラクタは数字と各種記号が含まれている。キャラクタを構成する5ビットにおいて、第1番目のビットはパリティビットとなっており、残りの4つのビットはデータビットであり、キャラクタを定義している。また、キャラクタ数は、最小キャラクタ数は3、最大キャラクタ数は40となっている。第2トラックにおけるスタートコードSTX(SS)は、"01011"と定義されており、第1番目のビット"0"はパリティビットとなっている。エンドコードETX(ES)は、"11111"と定義されており、第1番目のビット"1"はパリティビットとなっている。
第3トラック(トラック3(MINTS形式))はMINTS形式と呼ばれ、1つのキャラクタは、第2トラックと同じく5ビットで構成されており、キャラクタは数字と各種記号が含まれている。キャラクタを構成する5ビットにおいて、第1番目のビットはパリティビットとなっており、残りの4つのビットはデータビットであり、キャラクタを定義している。また、キャラクタ数は、最小キャラクタ数は3、最大キャラクタ数は107となっている。第3トラックにおけるスタートコードSTX(SS)は、"01011"と定義されており、第1番目のビット"0"はパリティビットとなっている。エンドコードETX(ES)は、"11111"と定義されており、第1番目のビット"1"はパリティビットとなっている。
また、図4(a)に示すRC(Redundancy Check:誤り制御方式)は、図3に示すチェックコードに記録される磁気データを表している。第1から第3トラックでは、3トラックとも同じ、LRC方式(水平パリティチェック方式)を採用し、具体的には、スタートコードSTX(SS)、データ、エンドコードETX(ES)に記録された磁気データについて誤り検出を行い、誤り検出方式は偶数パリティチェック(ビット1の個数が偶数個になる)を用いている。
さらに、図4(a)に示すVRC(垂直パリティチェック方式)が採用されており、誤り検出方式は奇数パリティチェック(ビット1の個数が奇数個になる)を用いている。そして、LRC自身の垂直パリティチェック方式VRCは有効化されている。すなわち、LRC自身がチェックコードとして磁気データであり、この磁気データに、VRCを付加するようになっている。
次に、ISO規格以外の特定の規格としてのAAMVA規格のフォーマットについて説明する。
本実施の形態では、AAMVA規格のフォーマットは、図4(b)に示すようになっており、3つのトラック(第1トラック乃至第3トラック)からなっている。
AAMVA規格の第1トラック(トラック1)は、1つのキャラクタが7ビットで構成され、キャラクタは英数字と各種記号が含まれている。磁気データとして記録されるキャラクタ数は、最小キャラクタ数(図4(b)では「SMIN」と明記)は規定されておらず、最大キャラクタ数(図4(b)では「SMAX」と明記)は82となっている。
1つのキャラクタを構成する7ビットは、6つのデータビットと1つのパリティビットで構成され、第1番目のビットはパリティビットとなっており、残りの6つのデータビットの正当性を検証するようになっている。そして、残りの6つのビットはデータビットであり、キャラクタを定義している。
また、スタートコードSTX(SS)は、"1000101"と定義されており、第1番目のビット"1"はパリティビットとなっている。エンドコードETX(ES)は、"0011111"と定義されており、第1番目のビット"0"はパリティビットとなっている。
AAMVA規格の第2トラック(トラック2)は、1つのキャラクタが5ビットで構成され、キャラクタは数字と各種記号が含まれている。磁気データとして記録されるキャラクタ数は、最小キャラクタ数は規定されておらず、最大キャラクタ数は40となっている。
1つのキャラクタを構成する5ビットは、4つのデータビットと1つのパリティビットで構成され、第1番目のビットはパリティビットとなっており、残りの4つのビットデータの正当性を検証するようになっている。そして、残りの4つのビットはデータビットであり、キャラクタを定義している。
第2トラックにおけるスタートコードSTX(SS)は、"01011"と定義されており、第1番目のビット"0"はパリティビットとなっている。エンドコードETX(ES)は、"11111"と定義されており、第1番目のビット"1"はパリティビットとなっている。
AAMVA規格の第3トラック(トラック3)は、1つのキャラクタが7ビットで構成され、キャラクタは数字と各種記号が含まれている。磁気データとして記録されるキャラクタ数は、最小キャラクタ数は規定されておらず、最大キャラクタ数は82となっている。
1つのキャラクタを構成する7ビットは、6つのデータビットと1つのパリティビットで構成され、第1番目のビットはパリティビットとなっており、磁気データの正当性を検証するようになっている。そして、残りの6つのビットはデータビットであり、キャラクタを定義している。
また、スタートコードSTX(SS)は、"1000101"と定義されており、第1番目のビット"1"はパリティビットとなっている。エンドコードETX(ES)は、"0011111"と定義されており、第1番目のビット"0"はパリティビットとなっている。
また、図4(b)に示すRC(Redundancy Check:誤り制御方式)は、図3に示すチェックコードに記録される磁気データを表している。AAMVA規格の第1から第3トラックでは、3トラックとも同じ、LRC方式(水平パリティチェック方式)を採用し、具体的には、スタートコードSTX(SS)、データ、エンドコードETX(ES)に記録された磁気データについて誤り検出を行い、誤り検出方式は偶数パリティチェック(ビット1の個数が偶数個になる)を用いている。
さらに、図4(b)に示すVRC(垂直パリティチェック方式)が採用されており、誤り検出方式は奇数パリティチェック(ビット1の個数が奇数個になる)を用いている。そして、LRC自身の垂直パリティチェック方式VRCは有効化されている。すなわち、LRC自身がチェックコードとして磁気データであり、この磁気データに、VRCを付加するようになっている。
図6は、本実施形態に係る磁気データのフォーマット判定方法の情報処理の流れを示すフローチャートである。
まず、上位装置6のCPU60は、磁気カードリーダ1から磁気データ(ビットデータ)を受信したか否かを判断する(ステップSA1)。磁気データ(ビットデータ)を受信しない場合には待機となる(ステップSA1:NO)。
磁気データ(ビットデータ)を受信した場合(ステップSA1:YES)、上位装置6のCPU60は、受信した磁気データ(ビットデータ)をRAM62の読取データ領域63に第1トラックの先端から後端の順序で磁気データ(ビットデータ)を保存し、次に、第2トラック、第3トラックについて同様に磁気データを保存する。第1トラックから第3トラックまで磁気データを記録し保存した後、磁気データデコード用ミドルウエア7のデコードデータ生成処理71を行う。これにより、読取データ領域63に記録されている磁気データ(ビットデータ)は、ISO規格のフォーマットまたはISO規格以外のフォーマットの配列に基づいて格納される(ステップSA2)。本実施の形態では、磁気データは、図2に示すデコードデータ領域64内にある4つフォーマットの配列に基づいて格納される。より具体的には、ISOフォワード領域65は、磁気カードを搬送した方向に従って、第1の磁気データとして格納されている。ISOバックワード領域66は、第1の磁気データの前後関係を入れ替えた磁気データを第2の磁気データとして格納されている。同様に、AAMVAフォワード領域67には第1の磁気データとして、AAMVAバックワード領域68には、第2の磁気データとしてそれぞれ格納されている。
次に、上位装置6のCPU60は、フォーマット判定処理を行う(ステップSA3)。具体的には、後述する磁気データの解析により、磁気データがISO規格のフォーマットであるか、ISO規格以外のAAMVA規格のフォーマットで記録されているのかを判定する。
さらに、上位装置6のCPU60は、フォーマット判定処理によってフォーマットが判別できれば、カード搬送方向判定処理を行う(ステップSA4)。本実施の形態では、ユーザの手動により磁気カードを搬送する磁気カードリーダ(手動式の磁気カードリーダ)においては、磁気カードを搬送するカード搬送方向が磁気ヘッドによって記録された磁気記録の順方向または逆方向となる場合もある。
具体的には、本実施の形態において、図2に示すデコードデータ領域64内には、ISOフォワード領域65と、ISOバックワード領域66とを形成している。上位装置6(アプリケーションプログラム8)では、カード搬送方向が決まっていないので、2つの領域65、66の磁気データを用いて情報のやり取りを行なう必要がある。このため、処理時間がかかるという問題がある。なお、ISO規格以外のAAMVA規格のフォーマットの場合も同様である。また、カード搬送方向の判定を、センサ等を用いて行なうことは可能であるが、上記手動式の磁気カードリーダでは大型化、高価になるという問題がある。
[フォーマット判定処理]
図7は、本実施形態に係る磁気データの解析によってフォーマット判定を行う情報処理の流れを示すフローチャートであり、フォーマット判定処理(図6のステップSA3)に関するサブルーチンである。本実施の形態では、ISO規格又はAAMVA規格でフォーマットされた磁気カードのフォーマット判定を行う。具体的には、図4に示すように、ISO規格のフォーマットとAAMVA規格のフォーマットでは、第3トラックのキャラクタ構成が7ビットと5ビットと異なり、また、第1トラックの最大キャラクタ数(図4では「SMAX」)が79と82と異なることが判る。そこで、デコードの優先順位を第3トラック、第1トラックの順とする。
まず、図2に示すISOフォワード領域65に格納されている第3トラック(トラック3)の磁気データおよびISOバックワード領域66に格納されている第3トラック(トラック3)の磁気データをデコードする(ステップSB1)。
これら2つのISO規格でフォーマットされた磁気データのいずれかがデコードに成功したか失敗したかを判断する(ステップSB2)。
具体的には、デコードの成否は、配列の中に、(1)スタートコードSTX(SS)の配列、すなわち、"01011"がない。(2)つぎに、スタートコードSTX(SS)があった場合、エンドコードETX(SE)の配列、すなわち、"11111"がない。(3)さらに、エンドコードの次にあるチェックコードが誤っている。(4)スタートコードSTX(SS)、データ、エンドコードETX(SS)、チェックコードのパリティビットのパリティチェックの結果が正しいかどうかによって決定することができる。これら(1)〜(4)のチェック全てにおいてエラーがなければデコードは成功と判断し、いずれか一つでもエラーがあればデコード失敗と判断する。
次に、ステップSB2において、2つの磁気データのいずれかがデコード成功と判断した場合は、図2に示すAAMVAフォワード領域67に格納されている第3トラック(トラック3)の磁気データおよびAAMVAバックワード領域68に格納されている第3トラック(トラック3)の磁気データをデコードする(ステップSB3)。
これら2つのAAMVA規格でフォーマットされた磁気データのいずれかがデコードに成功したか失敗したかを判断する(ステップSB4)。具体的には、デコードの成否は、配列の中で、上記した(1)〜(4)のチェックについて同様に行なう。なお、(1)〜(4)のチェックは、1つのキャラクタを構成する7ビットで行なわれる。
ステップSB4において、これら(1)〜(4)のチェック全てにおいてエラーがなければデコード成功と判断した場合は、ISO規格及びAAMVA規格のいずれでもデコードに成功していることから、磁気カード2のフォーマット判定不可としてカード種類判定不能エラーをアプリケーションプログラム8に通知し、本サブルーチンを終了する。図6に示すフローチャートに戻り、カード搬送方向判定処理SA4は行なわずに、終了する。
一方、ステップSB4においてデコード失敗と判断した場合は、ISO規格でデコードに成功していることから、ISO規格のフォーマットで磁気記録されている磁気カードであるとしてアプリケーションプログラム8に通知し、本サブルーチンを終了する。図6に示すフローチャートに戻り、カード搬送方向判定処理SA4に進む。
ステップSB2に戻り、ステップSB2において、2つの磁気データの両者ともにデコード失敗と判断した場合は、図2に示すAAMVAフォワード領域67に格納されている第3トラック(トラック3)の磁気データおよびAAMVAバックワード領域68に格納されている第3トラック(トラック3)の磁気データをデコードする(ステップSB5)。
これら2つのAAMVA規格でフォーマットされた磁気データのいずれかがデコードに成功したか失敗したかを判断する(ステップSB6)。
具体的には、デコードの成否は、配列の中で、上記した(1)〜(4)のチェックについて同様に行なう。なお、(1)〜(4)のチェックは、1つのキャラクタを構成する7ビットで行なわれる。
ステップSB6において、2つの磁気データのいずれかがデコード成功と判断した場合は、ISO規格のフォーマットに基づく磁気データはデコードに失敗し、AAMVA規格のフォーマットに基づく磁気データはデコードに成功していることから、磁気カード2は、AAMVA規格のフォーマットで磁気記録されている磁気カードであるとしてアプリケーションプログラム8に通知し、本サブルーチンを終了する。図6に示すフローチャートに戻り、カード搬送方向判定処理SA4に進む。
ステップSB6において、2つの磁気データの両者ともにデコード失敗と判断した場合は、図2に示すAAMVAフォワード領域67に格納されている第1トラック(トラック1)の磁気データおよびAAMVAバックワード領域68に格納されている第1トラック(トラック1)の磁気データをデコードする(ステップSB7)。
これら2つのAAMVA規格でフォーマットされた磁気データのいずれかがデコードに成功したか失敗したかを判断する(ステップSB8)。
具体的には、デコードの成否は、配列の中で、上記した(1)〜(4)のチェックについて同様に行なう。なお、(1)〜(4)のチェックは、1つのキャラクタを構成する7ビットで行なわれる。
ステップSB8において2つの磁気データのいずれかがデコード成功と判断した場合は、トラック1に含まれるデータのキャラクタ数が所定の閾値(76キャラクタ数)以下かそれよりも大きいかを判断する(ステップSB9)。図4(a)、(b)に示すように、第1トラック(トラック1)は、どちらのフォーマットであってもスタートコード及びエンドコードは、1つのキャラクタが7ビットで構成されるため、キャラクタ数の違いのみによってフォーマット判定が可能である。
具体的には、図4(a)に示すように、ISO規格のフォーマットの場合、最大キャラクタ数は79であるが、この中には、スタートコードSTX(SS)、エンドコードETX(SE)、エンドコードの3つのキャラクタが最小キャラクタ数として含まれている。そのため、データの最大キャラクタ数は、79−3=76となる。一方、AAMVA規格のフォーマットの場合は、図4(b)に示すように、最小キャラクタ数が定義されていない。
デコードの結果、データのキャラクタ数が所定の閾値よりも大きいと判断した場合はAAMVA規格のフォーマットで磁気記録された磁気カードと、所定の閾値以下と判断した場合はISO規格のフォーマットで磁気記録された磁気カードとしてアプリケーションプログラム8に通知し、本サブルーチンを終了する。図6に示すフローチャートに戻り、カード搬送方向判定処理SA4に進む。
ステップSB8に戻り、2つの磁気データの両者ともにデコード失敗と判断した場合は、エラー通知を行うために、ISO規格のフォーマットで磁気記録された磁気カードであるとしてアプリケーションプログラム8に通知する。なお、ステップSB8において、2つの磁気データの両者ともにデコード失敗と判断した場合は、カード種類判定不能エラーとしてもよい。
[カード搬送方向判定]
図8は、本実施の形態に係る磁気データの解析によってカード搬送方向判定を行う情報処理の流れを示すフローチャートであり、カード搬送方向判定処理(図6のステップSA4)に関するサブルーチンである。なお、本実施の形態では、予め磁気カード2の磁気データのフォーマットが確定していることが前提となるため、ISO規格のフォーマットで磁気記録された磁気データについて説明する。また、本実施の形態では、上述したフォーマット判定と同じ優先順位、すなわち、デコードの優先順位を第3トラック、第1トラック、第2トラックの順とする。なお、デコードの優先順位はこれに限定されることなく、第1トラック、または第2トラックから順番に処理してもよい。また、AAMVA規格のフォーマットで磁気記録された磁気データについて行ってもよい。
まず、図2に示すISOフォワード領域65に格納されている第3トラック(トラック3)の磁気データおよびISOバックワード領域66に格納されている第3トラック(トラック3)の磁気データをデコードする(ステップSC1)。
なお、ISOフォワード領域65に格納されている第3トラック(トラック3)の磁気データは第1の磁気データであり、ISOバックワード領域66に格納されている第3トラック(トラック3)の磁気データは、第1の磁気データを第1の磁気データの前後関係を入れ替えた磁気データを第2の磁気データである。
これら2つのISO規格でフォーマットされた磁気データのいずれかがデコードに成功したか失敗したかを判断する(ステップSC2)。
具体的には、デコードの成否は、上述したフォーマット判定処理で説明したように、配列の中に、(1)スタートコードSTX(SS)の配列、すなわち、"01011"がない。(2)つぎに、スタートコードSTX(SS)があった場合、エンドコードETX(SE)の配列、すなわち、"11111"がない。(3)さらに、エンドコードの次にあるチェックコードが誤っている。(4)スタートコードSTX(SS)、データ、エンドコードETX(SS)、チェックコードのパリティビットのパリティチェックの結果が正しいかどうかによって決定することができる。これら(1)〜(4)のチェック全てにおいてエラーがなければデコードは成功と判断し、いずれか一つでもエラーがあればデコード失敗と判断する。
ステップSC2において、第1の磁気データのみによってデコードに成功すればフォワード方向であると判定する。すなわち、ユーザの手動により磁気カード2を搬送する磁気カードリーダ1(手動式の磁気カードリーダ)において、磁気カード2を搬送するカード搬送方向が磁気ヘッド3によって記録された磁気記録の順方向であると判断する。
一方、第2の磁気データのみによってデコードに成功すればバックワード方向であると判定する。この場合は、カード搬送方向が磁気記録の逆方向であると判断する。
このように、カード搬送方向が判定できた場合には、本サブルーチンを終了する。図6に示すフローチャートに戻り、終了となる。
ステップSC2に戻り、第1の磁気データ及び第2の磁気データの双方においてデコードに成功したと判断した場合、又は第1の磁気データ及び第2の磁気データの双方においてデコードに失敗したと判断した場合は、次に、第1トラック(トラック1)をISO規格のフォーマットでデコードする(ステップSC3)。
本実施の形態では、図2に示すISOフォワード領域65に格納されている第1トラック(トラック1)の第1の磁気データおよびISOバックワード領域66に格納されている第1トラック(トラック1)の第2の磁気データをデコードする。
これら2つのISO規格でフォーマットされた磁気データのいずれかが、デコードに成功したか失敗したかを判断する(ステップSC4)。具体的には、デコードの成否は、配列の中で、上記した(1)〜(4)のチェックについて同様に行なう。なお、(1)〜(4)のチェックは、キャラクタを構成する7ビットで行なわれる。
デコードの成否はステップSC2の判定と同様であり、ステップSC4において、第1の磁気データのみによってデコードに成功すればフォワード方向であると判定する一方、第2の磁気データのみによってデコードに成功すればバックワード方向であると判定する。
このように、カード搬送方向が判定できた場合には、本サブルーチンを終了する。図6に示すフローチャートに戻り、終了となる。
ステップSC4に戻り、第1の磁気データ及び第2の磁気データの双方においてデコードに成功したと判断した場合、又は第1の磁気データ及び第2の磁気データの双方においてデコードに失敗したと判断した場合は、次に、第2トラック(トラック2)をISO規格のフォーマットでデコードする(ステップSC5)。
これら2つのISO規格でフォーマットされた磁気データのいずれかが、デコードに成功したか失敗したかを判断する(ステップSC6)。
具体的には、デコードの成否は、配列の中で、上記した(1)〜(4)のチェックについて同様に行なう。なお、(1)〜(4)のチェックは、第3トラック(トラック3)と同様に、キャラクタを構成する5ビットで行なわれる。
デコードの成否はステップSC2やステップSC4の判定と同様であり、ステップSC6において、第1の磁気データのみによってデコードに成功すればフォワード方向であると判定する一方、第2の磁気データのみによってデコードに成功すればバックワード方向であると判定する。
このように、カード搬送方向が判定できた場合には、本サブルーチンを終了する。図6に示すフローチャートに戻り、終了となる。
ステップSC6に戻り、第1の磁気データ及び第2の磁気データの双方においてデコードに成功したと判断した場合、又は第1の磁気データ及び第2の磁気データの双方においてデコードに失敗したと判断した場合は、次に、第3トラック(トラック3)に記録されている全キャラクタ数を第1の磁気データと第2の磁気データとで比較する(ステップSC7)。第3トラック(トラック3)のキャラクタ数は、具体的には、図4(a)に示すように、ISO規格のフォーマットの場合、最大キャラクタ数(「SMAX」の欄)は107であり、この中には、スタートコードSTX(SS)、エンドコードETX(SE)、エンドコードの3つのキャラクタが最小キャラクタ数として含まれている。なお、デコードに失敗してキャラクタ数の算出が不可能な場合は、キャラクタ数を0とする。
ステップSC7では、例えば、第1の磁気データから得られた全キャラクタ数が第2の磁気データから得られた全キャラクタ数よりも多いと判断した場合は、フォワード>バックワードとして、フォワード方向であると判定する。一方、第1の磁気データから得られた全キャラクタ数が第2の磁気データから得られた全キャラクタ数よりも少ないと判断した場合は、フォワード<バックワードとして、バックワード方向であると判定し、本サブルーチンを終了する。図6に示すフローチャートに戻り、終了となる。
ここで、カード搬送方向が磁気記録の逆方向である場合も、偶然に、スタートコードSTX(SS)、エンドコードETX(SE)、エンドコードが出現する可能性があるので、デコードに成功することが考えられる。しかし、偶然にデコードできた場合のスタートコードSTX(SS)、データ、エンドコードETX(SE)、エンドコードの全キャラクタ数は、正しくデコードできた場合の全キャラクタ数よりは少ないことが経験則でわかっている。すなわち、カード搬送方向が磁気記録の逆方向である場合に、磁気データには、スタートSTX(SS)、エンドコードETX(SE)、チェックコードが存在する。しかし、偶然存在した場合は、図3に示すような配列で存在しておらず、データ領域内に混在して存在するようになっている。このように、データ領域内に擬似的なスタートSTX(SS)、エンドコードETX(SE)、チェックコードが存在したとしても、磁気記録の正方向の場合のデータ領域内に記録されているキャラクタ数よりは少なくなることは明らかである。
ステップSC7において、第1の磁気データから得られた全キャラクタ数と第2の磁気データから得られた全キャラクタ数が同じと判断した場合は、フォワード=バックワードとして、次に、第1トラック(トラック1)に記録されている全キャラクタ数を第1の磁気データと第2の磁気データとで比較する(ステップSC8)。
ステップSC8では、ステップSC7と同様に、第1の磁気データから得られた全キャラクタ数が第2の磁気データから得られた全キャラクタ数よりも多いと判断した場合は、フォワード方向であると判定する。一方、第1の磁気データから得られた全キャラクタ数が第2の磁気データから得られた全キャラクタ数よりも少ないと判断した場合は、バックワード方向であると判定し、本サブルーチンを終了する。図6に示すフローチャートに戻り、終了となる。
さらに、ステップSC8に戻り、第1の磁気データから得られた全キャラクタ数と第2の磁気データから得られた全キャラクタ数が同じと判断した場合は、フォワード=バックワードとして、次に、第2トラック(トラック2)に記録されている全キャラクタ数を第1の磁気データと第2の磁気データとで比較する(ステップSC9)。
ステップSC9では、ステップSC7、ステップSC8と同様に、第1の磁気データから得られた全キャラクタ数が第2の磁気データから得られた全キャラクタ数よりも多いと判断した場合は、フォワード方向であると判定する。一方、第1の磁気データから得られた全キャラクタ数が第2の磁気データから得られた全キャラクタ数よりも少ないと判断した場合は、バックワード方向であると判定し、本サブルーチンを終了する。図6に示すフローチャートに戻り、終了となる。
さらに、ステップSC9において、第1の磁気データから得られた全キャラクタ数と第2の磁気データから得られた全キャラクタ数が同じと判断した場合は、フォワード方向であると判定し、本サブルーチンを終了する。図6に示すフローチャートに戻り、終了となる。具体的には、例えば、カード搬送方向が何れの方向においてもデコードに失敗した場合には全キャラクタ数が0となる。
このように、本実施の形態では、何れの方向においてもデコードに失敗し、キャラクタ数が0であった場合、エラー内容を上位装置6に通知するために、ISO規格のフォーマットにてデコードした場合のエラー内容を通知するようにしている。なお、フォーマット判定時と同様に、「カード搬送方向判定不能エラー」として上位装置6に通知するようにしてもよい。
以上、本発明の実施形態に係る磁気データのフォーマットの判定方法によれば、図4に示すように、ISO規格とAAMVA規格のフォーマットの相違、具体的には、1つのキャラクタを構成するビット数(7ビットか5ビット)が異なる第3トラックを最優先に判定し、もし、判定が困難な場合には、データのキャラクタ数が異なる第1トラックを次に判定した(図7ではトラック2については判定していません)ので、デコードするトラックの優先順位を設けることにより、従来に比べて簡易な方法でフォーマット判定を最適に行うことができる。
また、本発明の実施形態に係るフォーマット判定方法において、図7に示すように、第3トラックにおいてISO規格,AAMVA規格の両方でのデコードが成功した場合はカード種類判定不能とし、第3トラックのデコードに失敗し、第1トラックにおいてISO規格,AAMVA規格の両方でのデコードが成功した場合は、ISO規格のフォーマットで磁気記録された磁気カードと判断する。第2トラックのみデコードに成功した場合も、ISO規格のフォーマットで磁気記録された磁気カードと判断する。全てのトラックにおけるデコードに失敗した場合も、ISO規格のフォーマットで磁気記録された磁気カードと判断して処理をすることができる。このように、本実施の形態では、ISO規格のフォーマットはAAMVA規格のフォーマットに比べて汎用的であるので、ISO規格のフォーマットで磁気記録された磁気カードとして処理している。なお、フォーマット判定不能エラーとして処理してもよい。
さらに、カード搬送方向判定において、フォワード,バックワードの双方向でデコードに成功するか、双方向ともデコードに失敗した場合は、次の優先順位のトラックのデコードの成否で方向を判断し、全てのトラックにおいて方向の判別がつかない場合は、各トラックに記録されている全キャラクタ数の大きい方を読み取り方向とする。なお、本実施の形態では、全てのトラックにおいて全キャラクタ数の大小判別がつかないときは、フォワード方向として、上位装置6に通知し、つぎのコマンド(指令)を待つようにしている。
本実施の形態では、ユーザの手動により磁気カードを搬送する磁気カードリーダ(手動式の磁気カードリーダ)において、磁気カードを搬送するカード搬送方向が磁気ヘッドによって記録された磁気記録の順方向または逆方向となる場合もある。そのため、全キャラクタ数に基づいて、カード搬送方向が判別することで、例えば、図2に示すデコードデータ領域64内にある4つの領域65から67のいずれか1つの領域に格納されている磁気データを用いればよいので、上位装置6は、カード内の磁気情報のやり取りをより効率的に行なうことができる。
[他の実施の形態]
上述したように、本実施形態では、カードを手で一方向に搬送しながら情報を読み取るスワイプ型の磁気カードリーダ1を採用するが、必ずしもこれに限られない。例えば、スワイプ型以外のカードを手で操作してカード情報を読み取る手動式でもよい。より具体的には、カードを手で挿入口へ差し込んで抜き取ることにより情報を読み取る挿入型(ディップ型)に採用することができる。また、モータで駆動される搬送機構によりカードを自動的に内部に取り込んで情報を読み取るモータ駆動式の磁気カードリーダに採用することができる。なお、モータ駆動式の磁気カードリーダでは、カード搬送方向が予め決められているので、図6に示すカード搬送方向判定処理を省略してもよい。
また、磁気カードリーダ1のファームウェアプログラムに磁気データデコード用ミドルウエアが有する機能を組み込み、磁気データのデコード機能、フォーマット判定機能及びカード搬送方向判定機能を磁気カードリーダ1にて実行し、フォーマット判定結果及びカード搬送方向判定結果を上位装置6に通知することも可能である。なお、本実施の形態では、ISO規格以外の特定のフォーマットとして、AAMVA規格のフォーマットを用いたが、これ以外のフォーマットであってもよい。