説明

携帯可能電子装置および携帯可能電子装置におけるデータ管理方法

【課題】 擬似的な2次元配列ファイルに最新のデータと更新前の複数のデータ(複数世代のデータ)を容易に保存しておくことができ、擬似的な2次元配列ファイルに格納されている複数のバックアップデータを簡単な手順で順に読み出すことができるICカードを提供できる。
【解決手段】 ICカード内のデータメモリに記憶されているレコードのデータを更新する場合に、当該レコードのデータ領域に記憶されているデータをバックアップ領域に退避させ、最新のデータとなる書換えデータを当該レコードのデータとしてのデータ領域に書き込む。このようなレコードをレコード番号で指定したリードコマンドに対しては、当該レコードのデータ領域に記憶されている最新のデータを読出し、カレントレコードを指定したリードコマンドに対しては、カレントレコードのバックアップ領域に記憶されているデータを読み出すようにしたものである。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、例えば、個人情報あるいは取引情報などが記憶されているICチップが内蔵されているICカードあるいはICタグなどの携帯可能電子装置、および、上記携帯可能電子装置におけるデータ管理方法などに関する。
【背景技術】
【0002】
近年、ICカードなどの携帯可能電子装置は、様々な用途に利用されている。このようなICカードには、使用用途に応じた個人情報や金銭的な取引情報などの種々のデータが記憶される。上記のようなデータは、通常、ICカード内に設けられているEEPROMやフラッシュROMなどの不揮発性メモリに書込まれる。また、ICカードは、外部装置からのコマンドに応じて不揮発性メモリへのデータ書込み処理などを実行するようになっている。
【0003】
また、一般的な接触式あるいは非接触式ICカードでは、国際標準規格であるISO/IEC7816−4に規定されている形式でデータを取り扱う。ISO/IEC7816−4では、ICカード内の不揮発性メモリ上に定義されたELEMENTARY FILE(EF)と呼ばれるファイルにデータを記録する。また、ISO/IEC 7816−4では、種々の形式のEFが規定されている。ISO/IEC 7816−4で規定されているEFのうち一般的に使用されるのは、レコード形式のEFである。ISO/IEC 7816−4には、レコード形式のEFとして、次の3種類の形式が規定されている。
【0004】
(1)固定長順編成レコードファイル
(2)可変長順編成レコードファイル
(3)固定長循環順編成レコードファイル
上記固定長順編成レコードファイルあるいは上記可変長順編成レコードファイルのEFは、ファイルID及びレコード番号により1つのデータの記録場所(領域)が確定する。従って、上記固定長順編成レコードファイルあるいは上記可変長順編成レコードファイルのEFに対して、データの読み出し、データの書き込み、若しくは、データの書き換えを行う場合、指定されたファイルID及びレコード番号により特定される領域に対して、書き込み、若しくは、書き換えなどを行う。
【0005】
一方、固定長循環順編成レコードファイルには、データが順次追記される構成となっている。このような固定長循環順編成レコードファイルでは、一般的に、データを追記する毎にデータに対するレコード番号が付け替えられる。即ち、固定長循環順編成レコードファイルでは、順次蓄積される複数のデータに対して、新しい順(若しくは古い順)にレコード番号が割り当てられる。
従来のICカードにおいては、取引履歴情報の様に、取引処理の都度データの追加が発生する様なデータは、固定長循環順編成レコードファイルに格納され、それ以外のデータは、固定長または可変長順編成レコードファイルに格納されるのが一般的である。
【0006】
しかしながら、ICカードの運用形態によっては、EF内にレコード番号で管理された複数のレコードに複数のデータを記憶させるとともに、あるレコードのデータが更新(書き換え)された後に更新前のデータを参照したいといった要求がある。
【0007】
この様な要求を実現するには、従来のICカードでは、各データ毎に、固定長循環順編成レコードファイルを個別に作成したり、管理したりする必要がある。この場合、同一EF内でのレコード管理に比べ使い勝手の悪いものとなってしまう。また、一般的な運用形態では、ICカード内のEFは、発行処理後に追加したり、削除したりすることが出来ないものが多い。このようなICカードでは、発行処理後に、上記のようなデータ管理を実現するのが難しいという問題もある。
【非特許文献1】ISO/IEC 7816−4
【発明の開示】
【発明が解決しようとする課題】
【0008】
この発明の一形態は、データの蓄積および読出しを効率的に行うことができる携帯可能電子装置および携帯可能電子装置におけるデータ管理方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
この発明の一形態としての携帯可能電子装置は、外部装置から与えられるコマンドに応じて処理を行うものにおいて、1つのデータ領域と少なくとも1つのデータ退避領域とを有するレコードを記憶する記憶手段と、前記外部装置から前記レコードのデータ更新を要求するコマンドが与えられた場合、前記レコードの前記データ領域に記憶されているデータを前記データ退避領域へ移動させ、前記データ領域のデータを更新する更新手段と、前記外部装置から前記レコードの前記データ退避領域に記憶されているデータの読出を要求するコマンドが与えられた場合、前記レコードの前記データ退避領域に記憶されているデータを読み出す読出手段とを有する。
【0010】
この発明の一形態としての携帯可能電子装置におけるデータ管理方法は、外部装置から与えられるコマンドに応じて処理を行う携帯可能電子装置における方法であって、前記外部装置から1つのデータ領域と少なくとも1つのデータ退避領域とを有するレコードのデータの更新を要求するコマンドが与えられた場合、前記レコードの前記データ領域に記憶されているデータを前記データ退避領域へ移動させ、前記データ領域のデータを更新し、前記外部装置から前記レコードの前記データ退避領域に記憶されているデータの読出を要求するコマンドが与えられた場合、前記レコードの前記データ退避領域に記憶されているデータを読み出す。
【発明の効果】
【0011】
この発明の一形態によれば、データの蓄積および読出しを効率的に行うことができる携帯可能電子装置および携帯可能電子装置におけるデータ管理方法を提供できる。
【発明を実施するための最良の形態】
【0012】
以下、この発明に係る実施の形態について図面を参照しつつ説明する。
図1は、この発明の実施の形態に係る携帯可能電子装置としてのICカード1およびICカード1を含むICカードシステムの構成例を示すブロック図である。
上記ICカード1は、外部装置としてのICカード処理装置2からの電源供給により動作可能な状態となる。動作可能となったICカード1は、上記ICカード処理装置2からのコマンドに応じて種々の処理を行う。上記ICカード処理装置2は、ICカード1を動作させるための電源を供給するとともに、当該ICカード1に対して種々の処理を要求するコマンドを供給する。上記ICカード処理装置2がICカード1に対して供給するコマンドは、用途あるいは運用形態などに応じた処理を要求するものである。
【0013】
また、上記ICカード1は、アンテナあるいは無線通信部等により上記ICカード処理装置2と非接触の状態で無線通信を行う非接触式の携帯可能電子装置(非接触式ICカード)であっても良し、上記ICカード処理装置2と物理的に接触して通信を行う接触式の携帯可能電子装置(接触式ICカード)であっても良い。さらには、上記ICカード1は、非接触式ICカードとしての通信機能と接触式ICカードとしての通信機能とを有する複合型のICカード(デュアルインターフェースICカード)であっても良い。なお、この実施の形態では、主に、非接触式ICカードを想定して説明する。非接触式ICカードと接触式ICカードとはICカード処理装置2との通信方式等が異なるだけである。このため、以下に説明する実施の形態は、接触式ICカードにも同様に適用できる。
【0014】
上記ICカード1の構成例について説明する。
図1に示すように、上記ICカード1は、CPU11、プログラムメモリ12、ワーキングメモリ13、データメモリ14、通信制御部15、電源部16、および、インターフェース(アンテナあるいはコンタクト部)17などを有している。
また、上記ICカード1は、カード状の本体Cにより構成される。上記ICカード1を形成するカード状の本体Cには、1つ(あるいは複数)のICチップ1aとインターフェース17とが埋設される。上記ICチップ1aは、CPU11、プログラムメモリ12、ワーキングメモリ13、データメモリ14、通信制御部15および電源部16などを有している。上記ICチップ1aは、上記インターフェース17に接続された状態でモジュール化され、当該ICカード1を形成するカード状の本体C内に埋設される。たとえば、図2は、非接触式ICカード全体の構成例を示す図である。図2に示す非接触式ICカードは、カード状の本体Cを有している。この本体C内には、図2に点線で示すように、1つ(あるいは複数)のICチップ1aとインターフェース17としてのアンテナとを有するモジュールMが埋め込まれている。
【0015】
上記CPU11は、ICカード1全体の制御を司るものである。上記CPU11は、上記プログラムメモリ12あるいはデータメモリ14に記憶されている制御プログラムおよび制御データなどに基づいて動作する。たとえば、上記CPU11は、上記プログラムメモリ12に記憶されている基本的な動作を司る制御プログラムを実行することにより、外部装置から与えられるコマンドに応じた処理を実行する。これにより、外部装置から上記データメモリ14へのデータの書込みを要求するコマンドが与えられれば、上記CPU11は、上記データメモリ14へのデータの書き込み処理を実行する。また、外部装置から上記データメモリ14に記憶されているデータの読み出しを要求するコマンドが与えられれば、上記CPU11は、上記データメモリ14からのデータの読み出し処理を実行する。さらに、上記CPU11は、当該ICカード1の用途などに応じてインストールされる処理プログラムを実行することにより、用途に応じた処理を実現するようになっている。
【0016】
上記プログラムメモリ12は、読み出し専用のメモリ(ROM:リードオンリーメモリ)により構成される。上記プログラムメモリ12には、予め基本動作を司る制御プログラムおよび制御データなどが記憶されている。上記プログラムメモリ12には、予め当該ICカード1の仕様に応じた制御プログラム及び制御データが記憶される。たとえば、上記CPU11は、上記プログラムメモリ12に記憶される制御プログラムにより外部から与えられるコマンドに応じた処理を実現する。
【0017】
上記ワーキングメモリ13は、揮発性のメモリ(RAM;ランダムアクセスメモリ)により構成される。上記ワーキングメモリ13は、データを一時保管するバッファメモリとして機能する。例えば、上記ワーキングメモリ13には、ICカード処理装置(外部装置)2との通信処理において、送受信されるデータが一時的に保管される。また、上記ワーキングメモリ13には、種々の書込みデータなどを一時的に保持するメモリとしても利用される。
【0018】
上記データメモリ(不揮発性メモリ)14は、データの書き込みが可能な不揮発性のメモリである。上記データメモリ14は、例えば、EEPROMあるいはフラッシュメモリなどにより構成される。上記データメモリ14には、当該ICカード1の使用目的に応じた種々の情報が記憶される。
たとえば、当該ICカードの使用目的に応じたアプリケーション(処理プログラムおよび運用データなど)は、上記データメモリ14に書込まれる。当該ICカード1が複数の使用目的に使用される場合、上記データメモリ14には、各使用目的に応じた複数のアプリケーションが記憶される。また、当該ICカード1の使用目的に応じたアプリケーションは、上記データメモリ14上に定義された使用目的ごとのプログラムファイル(DF;Dedicated File)およびデータファイル(EF;Elementary File)などの各ファイルに記憶される。このようなファイル構造は、たとえば、ISO/IEC7816−4に基づくものである。なお、各種のデータを記憶するためのデータファイル(EF)の構成例については、後で詳細に説明するものとする。
【0019】
上記通信制御部15は、上記インターフェース17を介して外部装置(たとえば、ICカード処理装置2)とのデータ通信を制御するものである。たとえば、当該ICカードが非接触型のICカードであれば、外部装置からデータを受信する場合、上記通信制御部15は、インターフェース17としてのアンテナにより受信した電波としての送信データを復調し、復調した信号を上記CPU11に供給する。また、外部装置へデータを送信する場合、上記通信制御部15は、上記CPU11から与えられるデータを変調し、変調したデータを上記インターフェース17としてのアンテナにより電波として発信する。なお、接触式ICカードでは、インターフェース17として、アンテナの代わりに、外部装置の接触端子部と物理的・電気的に接触するコンタクト部を介して外部装置とのデータ通信を行う。
【0020】
上記電源部16は、当該ICカード1の各部を動作させるための上記インターフェース17を介して受信する電力およびクロックパルスを供給する。たとえば、当該ICカードが非接触型のICカードであれば、上記電源部16は、上記インターフェース17としてのアンテナにより受信した電波から電力およびクロックパルスを生成し、当該ICカード内の各部に供給するようになっている。また、上記電源部16からの電力供給により起動した場合、上記CPU11は、当該ICカード1の処理状態をリセットする処理を行うようになっている。なお、当該ICカード1が接触型のICカードであれば、上記電源部16はインターフェース17を介して外部装置から直接的に供給される電力およびクロックパルスにより各部へ供給するようになっている。
【0021】
次に、上記ICカード処理装置2について説明する。
上記ICカード処理装置2は、図1に示すように、制御装置21およびカードリーダライタ22を有している。上記制御装置21は、パーソナルコンピュータ(PC)などにより構成される。上記制御装置21は、CPUなどの演算処理部、RAM、ROM、不揮発性メモリおよびハードディスクドライブなどの各種メモリ、通信インターフェースなどの各種インターフェースなどにより構成される。上記制御装置21では、上記演算処理部がメモリに記憶されている各種の制御プログラムを実行することにより各種の処理を実現している。また、上記制御装置21は、ICカード1とのデータ通信を行う上記カードリーダライタ22とのデータの入出力を行うようになっている。
【0022】
たとえば、上記制御装置21には、上記ICカード1を用いた各種の処理に応じた制御プログラムが予め記憶されている。上記制御装置21では、上記のような制御プログラムを実行することにより上記ICカード1を用いた各種の処理を実行する。たとえば、上記ICカード1を用いた各種の処理において、上記制御装置21は、所定のコマンドを所定の手順で供給する。上記制御装置21では、上記のような各コマンドに対するICカード1からの各レスポンス(コマンドに対する処理結果等を示す情報)に基づいて各種の処理を行うようになっている。
【0023】
上記カードリーダライタ22は、上記ICカード1とのデータ通信を行う通信手段として機能する。上記カードリーダライタ22は、上記ICカード1の通信方式に応じた通信方式によるデータ通信を行うためのものである。つまり、上記カードリーダライタ22を介して制御装置21は、上記ICカード1とのデータ通信を実現している。
【0024】
上記ICカード1が非接触型のICカードである場合、上記カードリーダライタ22は、上記ICカード1との無線によるデータ通信を行うためのアンテナおよび通信制御部(変復調回路等)などにより構成される。非接触型のICカード1へデータを送信する場合、上記カードリーダライタ22では、通信制御部により上記制御装置21から与えられる送信データを変調し、変調した信号を電波としてアンテナにより発信する。また、非接触型のICカード1からデータを受信する場合、上記カードリーダライタ22では、アンテナにより受信した電波としての信号を通信制御部により復調し、復調したデータを受信データとして上記制御装置21へ供給する。また、上記カードリーダライタ22では、上記のようなデータの送受信とともに、上記ICカード1を動作させるための電源およびクロックパルスとなる電波をアンテナにより発信するようになっている。
【0025】
また、上記ICカード1が接触型のICカードである場合、上記カードリーダライタ22は、ICカード1と物理的に接触してデータ通信を行うためのコンタクト部および通信制御部などにより構成される。接触型のICカードとのデータの送受信を行う場合、上記カードリーダライタ22では、上記コンタクト部がICカード1側に設けられているコンタクト部と物理的に接触して各種のデータ通信を行う。また、上記カードリーダライタ22では、ICカード1に物理的に接触しているコンタクト部を介して当該ICカード1に対して電力およびクロックパルスを供給するようになっている。
【0026】
次に、上記データメモリ14に記憶されるファイルについて説明する。
本実施例では、上述したようにデータメモリ14内の各ファイルがISO/IEC 7816で規定されているファイル構造となっているものとする。ISO/IEC 7816では、MF(Master File)、DF(Dedicated File)、EF(Elementary File)などからなる階層構造のファイル構成が規定されている。MFは、階層構造の最上位に位置するファイルであり、MFの下層にDFあるいはEFが設けられる。DFは、例えば、アプリケーションごとに設定されるファイルであり、当該アプリケーションで利用するデータを格納するためのデータファイルとしてのEFが下層に設けられる。各EFは、それぞれ実データを記憶するためのデータファイルである。また、実データは、データファイル内において、各レコードごとに記憶される。各レコードには、それぞれレコード番号が与えられる。
【0027】
上記のような各ファイルは、それぞれが図示しない管理テーブルに記憶される定義情報により定義される。たとえば、上記のようなデータファイルとしてのEFは、図示しない管理テーブルに記憶されるEF定義情報により定義される。EF定義情報では、当該EFを特定するための情報として、ファイルID、データメモリ14における先頭アドレス、および、データサイズなどが定義される。
【0028】
また、ISO/IEC 7816で規定されているデータファイル(EF)には、種々の形式がある。たとえば、ISO/IEC 7816には、EFの形式として、固定長順編成レコードファイル、可変長順編成レコードファイル、固定長循環順編成レコードファイルなどがある。
【0029】
上記固定長順編成レコードファイルあるいは上記可変長順編成レコードファイルは、複数のデータを格納するための複数のレコード領域(以下、単にレコードとも称する)が設定可能である。たとえば、1つのファイルに複数のデータを格納したい場合、データファイルには、複数のデータに対応する複数のレコードに各データが格納される。複数のレコードを有するファイルでは、ファイルID及びレコード番号により各レコードが特定される。たとえば、上記固定長順編成レコードファイルあるいは上記可変長順編成レコードファイルの特定のレコードに対して、データの読み出し、データの書き込み、若しくは、データの書き換えを行う場合、ICカード処理装置2は、書き込み、書き換え、若しくは、読出しなどを要求するコマンドにおいて、ファイルID及びレコード番号によりレコードを指定する。
【0030】
また、アクセス対象とするレコードを指定するには、各種のコマンドにおいて、カレントレコードを指定することも可能である。カレントレコードとは、カレント状態とするレコードである。カレントレコードを示す情報(レコードポインタ)は、常時、ワーキングメモリなどに格納され、適宜更新される。たとえば、レコード番号を指定するコマンドあるいはカレントレコードの移動(たとえば、ネクストあるいはプレビアス)を指定するコマンドに応じてレコードポインタは更新される。従って、カレントレコードを指定するコマンドを受信した場合、CPU11は、レコードポインタが示すレコード(つまり、カレントレコード)にアクセスするようになっている。
【0031】
なお、固定長循環順編成レコードファイルには、データが順次レコード領域に追記される。このような固定長循環順編成レコードファイルでは、一般的には、データが追記される毎に各データを格納する各レコードの領域に対するレコード番号が付け替えられる。即ち、固定長循環順編成レコードファイルでは、順次蓄積される複数のデータの各レコード領域に対して、新しい順(若しくは古い順)にレコード番号が割り当てられる。
【0032】
以下、本実施例で処理対象とする順編成レコードファイルの構成例について説明する。
本実施例では、上記のような順編成レコードファイルの各レコードにそれぞれバックアップ領域が設定されるものとする。また、バックアップ領域の設定方法としては、1つのデータ領域に対して1つのバックアップ領域を設定する方法(第1の構成例)と、1つのデータ領域に対して複数のバックアップ領域を設定する方法(第2の構成例)とについて説明するものとする。
【0033】
まず、レコードァイルの第1の構成例について説明する。
図3は、レコードファイルの第1の構成例を示す図である。
図3に示す第1の構成例のレコードファイルは、1つのファイルIDで特定され、複数のレコード領域(以下、単にレコードとも称する)を有している。各レコードは、レコード番号が割当てられ、データ領域とバックアップ領域とを有している。データ領域には当該レコードの最新のデータ(これが、当該レコードのデータとして取り扱われる)が格納され、バックアップ領域にはデータ領域のデータが現在のデータに書き換えられる前のデータ(つまり、更新前のデータ)が格納される。
【0034】
図3に示す例では、レコード番号「03」およびレコード番号「05」の各レコードには、バックアップデータが記憶されている。つまり、レコード番号「03」および「05」の各レコードには、データ領域とバックアップ領域とにそれぞれデータが書込まれている。これは、レコード番号「03」及び「05」の各レコードが少なくとも1回更新されていることを示している。第1の構成例のレコードでは、データを書き換える場合、当該レコードのデータ領域に格納されているデータが当該レコードのバックアップ領域に移動され、当該レコードのデータ領域に最新のデータ(書換えデータ)が書込まれる。このような構成により、各レコードには、最新のデータと最新のデータに更新する直前のデータとが常時保存される。
【0035】
上記のようなレコードファイルの各レコードに格納されているデータには、ファイルIDとレコード番号とによりアクセスが可能となっている。たとえば、図3に示す例では、ファイルID「0001」かつレコード番号「01」を指定することにより、レコード番号「01」のデータ領域に格納されているデータにアクセスすることが可能となっている。同様に、バックアップデータが記憶されているレコード番号「03」(又は「05」)のレコードに対しても、ファイルID「0001」かつレコード番号「03」(又は「05」)を指定することにより、レコード番号「03」(又は「05」)のデータ領域に格納されているデータにアクセスすることが可能となっている。
【0036】
また、レコード番号「03」(又は「05」)のバックアップ領域に格納されているデータ(更新前のデータ)には、所定の操作によりアクセスすることが可能となっている。バックアップ領域に格納されているデータにアクセスするための手法としては、種々の手法が考えられる。たとえば、バックアップ領域のデータへのアクセスを要求するコマンドコードを定義しても良いし、コマンドにおける処理パラメータでバックアップ領域を指定するように定義しても良い。また、特定のコマンドを受信した順序、あるいは、特定のコマンドを受信した回数などに基づいて、バックアップ領域のデータへのアクセスを行うようにしても良い。
【0037】
ここでは、カレントレコードを指定するコマンドによりカレントレコードのバックアップ領域のデータにアクセスする場合について説明する。
【0038】
たとえば、図3に示すようなレコードファイルを有するICカード1が、ファイルID「0001」かつレコード番号「03」のレコードを指定したデータの読出要求コマンド(リードレコードコマンド)を受信した場合、CPU11は、ファイルID「0001」かつレコード番号「03」のレコードにおけるデータ領域のデータを読み出す処理を行う。この際、当該ICカード1では、カレントレコードがファイルID「0001」かつレコード番号「03」のレコードとなる。このようなカレントレコードを示す情報は、たとえば、ワーキングメモリ13に保持される。
【0039】
この状態において、続けてカレントレコードを指定したリードレコードコマンドを受信した場合、CPU11は、カレントレコードであるファイルID「0001」かつレコード番号「03」のレコードにおけるバックアップ領域のデータを読み出す処理を行う。なお、このようなカレントレコードを指定したリードレコードコマンドによりバックアップ領域を読出した回数は、たとえば、ワーキングメモリ13に保持されるものとする。
【0040】
ここで、2度続けてカレントレコードを指定したリードレコードコマンドを受信した場合、CPU11は、バックアップ領域のデータが読出し済みであるためエラーとして処理するか、あるいは、当該レコードのデータ領域のデータを読み出す処理を行うようにするものとする。特に、前者のような形態では、ICカード処理装置2は、ICカード1からエラー通知を受けることにより、当該レコードにおけるバックアップ領域のデータを読み出したことを容易に識別できる。また、後者のような形態では、ICカード処理装置2は、カレントレコードを指定するリードコマンドを連続してICカード1に与えることにより、各レコードにおけるデータ領域のデータ、および、バックアップ領域のデータを交互に読み出すことが可能となる。
【0041】
次に、上記第1の構成例のレコードファイルにおける各レコードに対するデータの書換え処理の流れについて説明する。
図4は、第1の構成例のレコードファイルにおけるレコードに対するデータの書換え処理を説明するためのフローチャートである。
【0042】
まず、ICカード処理装置2からコマンドを受信した場合(ステップS10)、CPU11は、コマンドコードなどにより受信したコマンドがデータの書換えを要求するコマンドであるか否かを判断する(ステップS11)。この判断により受信したコマンドがデータの書換えコマンドであると判断した場合(ステップS11、YES)、CPU11は、当該コマンドで指定されたレコードを特定する(ステップS12)。たとえば、ファイルIDとレコード番号とが指定されている場合、CPU11は、指定されたファイルIDとレコード番号とにより特定されるレコードのデータを書き換えるものと判定する。
【0043】
指定されたレコードを特定すると、CPU11は、指定されたレコードにバックアップ領域が設定されているか否かを判断する(ステップS13)。この判断は、指定されたレコードにおける更新前のデータをバックアップデータとして保存するか否かを判断するものである。上記判断により指定されたレコードにバックアップ領域が設定されていると判断した場合、CPU11は、当該レコードのデータ領域に格納されているデータをバックアップ領域に移動させる(ステップS14)。ここで、CPU11は、当該レコードのデータ領域に格納されているデータを読み出し、読み出したデータをバックアップ領域に記憶する処理を行う。たとえば、上記ステップS14において、既に当該レコードのバックアップ領域にデータが格納されている場合、データ領域から読み出したデータは、バックアップ領域のデータに上書きされる(すなわち、指定されたレコードにおけるバックアップ領域のデータは、データ領域から読み出したデータに書換えられる)。
【0044】
ただし、各レコードのデータ領域とバックアップ領域とは、それぞれの意味付けが異なるだけである。従って、上記ステップS14の処理としては、当該レコードにおけるデータ領域とバックアップ領域とを交換し、交換後のデータ領域にデータを書き込むようにしても良い。つまり、データ更新処理時に、データ領域をバックアップ領域に変更し、かつ、バックアップ領域をデータ領域に変更することにより、更新前のデータ領域(更新後のバックアップ領域)に格納されているデータをバックアップデータに変更するようにしても良い。
【0045】
この場合、当該レコードにおけるデータ領域とバックアップ領域の定義付けを変更(交換)し、更新前のバックアップ領域(更新後のデータ領域)のデータを書き換えることにより、当該レコードにおけるデータ領域およびバックアップ領域の書換えが実現できる。この場合、データ領域のデータを書き換えるだけで良い(バックアップ領域のデータは書き換えなくても良い)ので、処理時間の短縮化が期待できる。
【0046】
上記データ領域に格納されているデータをバックアップ領域に移動させると、CPU11は、当該レコードのデータ領域のデータを、受信した書換えコマンドに含まれる書換えデータに書き換える(ステップS15)。このようなデータ領域のデータの書換えが正常終了すると、CPU11は、受信したコマンドに対する処理が正常終了した旨のレスポンスをICカード処理装置2に送信し(ステップS16)、処理を終了する。
【0047】
なお、上記ステップS15においてデータ領域に対するデータの書換えが失敗した場合(あるいは、受信したコマンドに含まれる書換えデータのデータ領域への書込みがリトライできない状態となった場合)、CPU11は、当該レコードのバックアップ領域に移動したデータを再度、当該レコードのデータ領域に書き込むことにより、当該レコードの復旧処理を行うようにしても良い。このようにデータ領域へのデータの書込みが失敗した場合に、バックアップ領域のデータでデータ領域のデータを復旧させる(コマンドの受信前の状態に戻す)ことにより、ICカードとしての動作を安定化させることが可能である。
【0048】
上記のように、上述した第1の構成例のレコードファイルに対する書込み処理は、あるレコードのデータを更新する場合に、当該レコードの更新前のデータをバックアップ領域に退避させ、最新のデータ(書換えデータ)を当該レコードのデータとしてのデータ領域に書き込むようにしたものである。
これにより、更新前のデータを別のレコードとして保存するコマンドを与えたりすることなく、擬似的な2次元配列ファイルによって更新前のデータを随時保存しておくことが可能となる。
【0049】
次に、上記第1の構成例のレコードファイルにおける各レコードに対するデータの読出し処理について説明する。
図5は、第1の構成例のレコードファイルにおけるレコードに対するデータの読出し処理を説明するためのフローチャートである。
まず、ICカード処理装置2からコマンドを受信した場合(ステップS20)、CPU11は、当該コマンドのコマンドコードに基づいてデータの読出しを要求するリードレコードコマンドであるか否かを判断する(ステップS21)。
【0050】
この判断により受信したコマンドがリードレコードコマンドであると判断した場合(ステップS21、YES)、CPU11は、受信したリードレコードコマンドがバックアップ領域の読出しを要求するものであるか否かを判定する(ステップS22)。バックアップ領域の読出を要求する手法には、上述したような様々な形態が考えられる。たとえば、特定のコマンドの実行手順などによりバックアップ領域の読出要求を示すようにしても良いし、コマンドの内容(コマンドデータに含まれる情報)によって直接的にバックアップ領域の読出要求を示すようにしても良い。
【0051】
また、特定のコマンドの実行手順によりバックアップ領域の読出要求を示す形態としては、特定のコマンドが連続して与えられた場合にバックアップ領域を読み出すようにしても良いし、複数種類のコマンドが特定の順序で与えられた場合にバックアップ領域を読み出すようにしても良い。また、コマンドの内容(コマンドデータに含まれる情報)によって直接的にバックアップ領域の読出を要求する形態としては、コマンドコードあるいは処理パラメータなどでバックアップ領域の読出を指定するようにすれば良い。上記のような運用形態に従って、CPU11は、受信したコマンドがバックアップ領域の読出しを要求するコマンドであるか否かを判断するようになっている。
【0052】
ここでは、図5に示す処理例のように、「カレントレコード」が指定されたリードレコードコマンドが与えられた場合に、カレントレコードのバックアップ領域を読み出すようにするものとする。このような形態であれば、CPU11は、上記ステップS22の処理として、当該コマンドにおいて読出対象とするレコードが、レコード番号で指定されているか、「カレントレコード」として指定されているかを判定する(ステップS22)。
【0053】
上記リードレコードコマンドにおいてレコードの指定が「カレントレコード」である場合、つまり、受信コマンドがバックアップ領域の読出しを要求する場合(ステップS22、YES)、CPU11は、現在のカレントレコード(指定されたレコード)にバックアップ領域が設定されているか否かを判断する(ステップS23)。
【0054】
この判断により指定されたレコードにバックアップ領域が設定されていると判断した場合(ステップS23、YES)、CPU11は、受信したコマンドの直前に受信したリードレコードコマンドによって当該レコードのバックアップ領域のデータが読出し処理済みであるか否かを判断する(ステップS24)。つまり、上記ステップS24において、上記CPU11は、前回受信したリードコマンドによってバックアップ領域のデータを読み出したか否かを判断する。言い換えると、上記ステップS24において、上記CPU11は、連続してバックアップ領域のデータの読出しを要求するコマンドを受信したか否かを判断している。
【0055】
上記判断によりカレントレコードのバックアップ領域のデータが読出し済みでないと判断した場合(ステップS24、NO)、CPU11は、当該コマンドで指定されたレコード(カレントレコード)におけるバックアップ領域のデータを読み出す(ステップS25)。カレントレコードのバックアップ領域のデータを読み出すと、CPU11は、当該コマンドの送信元であるICカード処理装置2に読み出したデータを含むレスポンスデータを送信する(ステップS26)。このように、上記ステップS20〜S26までの処理によって、当該ICカード1では、カレントレコードのバックアップ領域のデータが読み出される。
【0056】
また、図5に示す処理例では、上記ステップS22において、上記受信したコマンドにおいてレコードの指定が「カレントレコード」でない場合、つまり、受信したコマンドにおけるレコードの指定がファイルIDとレコード番号とによるものである場合(ステップS22、NO)、CPU11は、当該リードレコードコマンドが指定レコードのデータ領域のデータ(最新のデータ)の読出しを要求するものであると判定する。
【0057】
すなわち、受信したコマンドにおけるレコードの指定がファイルIDとレコード番号とによるものである場合(ステップS22、NO)、CPU11は、ファイルIDとレコード番号とにより読出対象とするレコード(指定されたレコード)を特定する(ステップS28)。つまり、CPU11は、当該コマンドで指定されたファイルIDによりレコードファイルとしてのEFを特定し、さらに、レコード番号に基づいて当該EF内におけるレコードを特定する。この際、上記CPU11は、特定されたレコードをカレントレコードに設定する。
【0058】
受信したコマンドで指定されているファイルID及びレコード番号によりレコードを特定すると、上記CPU11は、特定されたレコードのデータ領域のデータを読出し(ステップS29)、当該コマンドの送信元であるICカード処理装置2に読み出したデータを含むレスポンスデータを送信する(ステップS26)。
【0059】
また、図5に示す処理例では、ステップS23でカレントレコードにバックアップ領域が設定されていないと判断した場合(ステップS23、NO)、CPU11は、ステップS29へ進み、カレントレコードのデータ領域のデータを読み出す処理を行うものとする。ただし、ステップS23でNOと判断される場合は、バックアップ領域の読出しを要求するコマンドを受信したにも係らず、当該コマンドが指定するレコード(カレントレコード)にバックアップ領域が設定されていないと判断した場合である。このため、CPU11は、ステップS27へ進み、エラーであることを示すレスポンスを当該コマンドの送信元であるICカード処理装置2に送信するようにしても良い。
【0060】
また、図5に示す処理例では、ステップS24でバックアップ領域のデータが直前のリードコマンドによって読出し済みであると判断した場合(ステップS24、YES)、CPU11は、エラーであることを示すレスポンスを当該コマンドの送信元であるICカード処理装置2に送信する(ステップS27)。これは、バックアップ領域の読出しを要求するコマンド(カレントレコードを指定したリードレコードコマンド)が連続して与えられた場合であっても、連続して特定のレコード(カレントレコード)におけるバックアップ領域のデータの読出しを行わないようにする仕組みである。
【0061】
ただし、上記ステップS24でバックアップ領域のデータが直前のリードコマンドで読出し済みであると判断した場合(ステップS24、YES)、CPU11は、図5に点線で示すように、ステップS29へ進み、カレントレコードのデータ領域のデータを読み出す処理を行うようにしても良い。これは、バックアップ領域の読出しを要求するコマンド(カレントレコードを指定したリードレコードコマンド)が連続して与えられた場合に、特定のレコード(カレントレコード)におけるバックアップ領域のデータとデータ領域のデータとを交互に読み出すようにする仕組みである。この場合、ICカード処理装置2では、カレントレコードを指定したリードレコードコマンドを連続して与えることにより、ICカード1からカレントレコードのバックアップ領域のデータとデータ領域のデータとを交互に読み出す制御が可能となる。
【0062】
上記のような読出処理では、レコード番号を指定したリードコマンドに対しては、当該レコードのデータ領域に記憶されている最新のデータを読出し、カレントレコードを指定したリードコマンド(バックアップ領域のデータの読出しを要求するコマンド)に対しては、当該レコードのバックアップ領域に記憶されているデータを読み出すようになっている。
これにより、擬似的な2次元配列ファイルに格納されているデータを容易に読み出すことができ、レコード番号の管理などが複雑化することなく、取引履歴情報などの更新されることが予測されるデータについて最新のデータおよび更新前のデータを容易に読み出すことができる。
【0063】
次に、レコードァイルの第2の構成例について説明する。
図6は、レコードファイルの第2の構成例を示す図である。
図6に示す第2の構成例のレコードファイルは、1つのファイルIDで特定され、複数のレコード領域(以下、単にレコードとも称する)を有している。各レコードは、レコード番号が割当てられ、1つのデータ領域と複数のバックアップ領域とを有している。データ領域には当該レコードの最新のデータ(これが、当該レコードのデータとして取り扱われる)が格納され、各バックアップ領域には上記データ領域のデータの更新時に順次古いデータ(更新前のデータ)が格納される。また、1つのレコードにおける複数のバックアップ領域には、それぞれ順に更新前のデータが書込まれる。言い換えれば、第2の構成例のファイルでは、各レコード毎に、バックアップ領域の数だけ古いデータが格納される。
【0064】
たとえば、図6に示す例では、レコード番号「02」のレコードには、最新のデータがデータ領域に格納され、3つのバックアップ領域に3回分の古いデータがそれぞれ順に格納されている。これは、レコード番号「02」の各レコードが少なくとも3回更新されていることを示している。このようなレコードに対しては、データ領域のデータを更新する場合に、データ領域に格納されているデータが1世代前のデータを格納する第1のバックアップ領域に移動され、第1のバックアップ領域に格納されているデータが2世代前のデータを格納する第2のバックアップ領域に移動され、第2のバックアップ領域に格納されているデータが3世代前のデータを格納する第3のバックアップ領域に移動される。このような構成により、各レコードには、最新のデータと複数のバックアップデータが常時保存される。
【0065】
また、上記のようなレコードファイルの各レコードのデータ領域に格納されているデータには、上記第1の構成例と同様に、ファイルIDとレコード番号とを指定することによりアクセスすることが可能となっている。これに対して、各レコードの各バックアップ領域に格納されているデータには、所定の操作によりアクセスすることが可能となっている。
【0066】
各レコードの各バックアップ領域に格納されているデータにアクセスするための手法としては、種々の手法が考えられる。たとえば、バックアップ領域のデータへのアクセスを要求するコマンドコードを定義しても良いし、コマンドにおける処理パラメータでバックアップ領域を指定するように定義しても良い。また、特定のコマンドを受信した順序、あるいは、特定のコマンドを受信した回数などに基づいて、バックアップ領域のデータへのアクセスを行うようにしても良い。
【0067】
ここでは、「カレントレコード」を指定するコマンドによりバックアップ領域のデータにアクセスする場合について説明する。
たとえば、図6に示すファイルID「0001」かつレコード番号「02」のレコードを指定したデータの読出要求コマンド(リードレコードコマンド)を受信した場合、CPU11は、ファイルID「0001」かつレコード番号「02」のレコードにおけるデータ領域のデータを読み出す処理を行う。この際、当該ICカード1では、カレントレコードがファイルID「0001」かつレコード番号「02」のレコードとなる。このようなカレントレコードを示す情報は、たとえば、ワーキングメモリ13に保持される。
【0068】
この状態において、カレントレコードを指定した読出要求コマンド(リードレコードコマンド)を受信した場合、CPU11は、カレントレコードであるファイルID「0001」かつレコード番号「02」のレコードにおける第1のバックアップ領域のデータを読み出す処理を行う。なお、このようなカレントレコードを指定したリードレコードコマンドによりバックアップ領域を読出した回数は、たとえば、ワーキングメモリ13に保持されるものとする。また、再度(2度連続して)、ファイルID「0001」かつレコード番号「02」のレコードを指定したデータのリードレコードコマンドを受信した場合も、上記同様に、第1のバックアップ領域のデータを読み出すようにしても良い。
【0069】
また、続けて同じコマンドを受信した場合、つまり、2度続けてカレントレコードを指定したリードレコードコマンドを受信した場合、CPU11は、カレントレコードであるレコード番号「02」のレコードにおける第2のバックアップ領域のデータを読み出す処理を行う。なお、3度連続して、ファイルID「0001」かつレコード番号「02」のレコードを指定したデータのリードレコードコマンドを受信した場合も、上記同様に、第2のバックアップ領域のデータを読み出すようにしても良い。
【0070】
さらに、続けて同じコマンドを受信した場合、つまり、3度続けてカレントレコードを指定したリードレコードコマンドを受信した場合、CPU11は、カレントレコードであるレコード番号「02」のレコードにおける第3のバックアップ領域のデータを読み出す処理を行う。なお、4度連続して、ファイルID「0001」かつレコード番号「02」のレコードを指定したデータのリードレコードコマンドを受信した場合も、上記同様に、第3のバックアップ領域のデータを読み出すようにしても良い。
【0071】
ここで、バックアップ領域が各レコードに対して3つまでであるものとする。このような場合、4度続けてカレントレコードを指定したリードレコードコマンドを受信した場合、CPU11は、全バックアップ領域のデータが読出し済みであるため、エラーとして処理するか、あるいは、当該レコードのデータ領域のデータを読み出す処理を行うようにするものとする。特に、前者のような形態では、ICカード処理装置2は、ICカード1からエラー通知を受けることにより、当該レコードにおける全バックアップ領域のデータを読み出したことを容易に識別できる。また、後者のような形態では、ICカード処理装置2は、カレントレコードを指定するリードコマンドを連続してICカード1に与えることにより、各レコードにおけるデータ領域のデータ、および、各バックアップ領域のデータを順次循環させて読み出すことが可能となる。
【0072】
次に、上記第2の構成例のレコードファイルにおける各レコードに対するデータの書換え処理について説明する。
図7は、第2の構成例のレコードファイルにおけるレコードに対するデータの書換え処理を説明するためのフローチャートである。
【0073】
まず、ICカード処理装置2からコマンドを受信した場合(ステップS30)、CPU11は、当該コマンドのコマンドコードに基づいてデータの書換えを要求するコマンドであるか否かを判断する(ステップS31)。この判断により受信したコマンドがデータの書換えコマンドであると判断した場合(ステップS31、YES)、CPU11は、当該コマンドで指定されたレコードを特定する(ステップS32)。たとえば、ファイルIDとレコード番号とが指定されている場合、CPU11は、指定されたファイルIDとレコード番号とにより特定されるレコードのデータを書き換えるものと判定する。
【0074】
指定されたレコードを判定すると、CPU11は、指定されたレコードにバックアップ領域が設定されているか否かを判断する(ステップS33)。この判断は、指定されたレコードにおいて更新前のデータをバックアップデータとして保存するように設定されているか否かを判断するものである。上記判断により指定されたレコードにバックアップ領域が設定されていると判断した場合、CPU11は、当該レコードのデータ領域および各バックアップ領域に格納されている各データを順次次のバックアップ領域に移動させる処理を行う(ステップS34〜S36)。
【0075】
たとえば、CPU11は、まず、全バックアップ領域にデータが保存されているか否かを判断する(ステップS34)。この判断により全バックアップ領域にデータが保存されていると判断した場合、CPU11は、最も古いデータが記憶されているバックアップ領域のデータを削除する(ステップS35)。このような状態において、CPU11は、データ領域および各バックアップ領域のデータを順次各バックアップ領域に移動させる(ステップS36)。
【0076】
なお、上記ステップS34〜S36の処理は、当該レコードにおけるデータ領域及び各バックアップ領域のデータを順次次のバックアップ領域に上書きすることにより実現しても良いし、最古のデータが記憶されているバックアップ領域にデータ領域のデータを上書きすることにより実現するようにしても良い。何れの場合であっても、結果として、当該レコードでは、最古のデータが削除され、データ領域と各バックアップ領域の各データがぞれぞれバックアップ領域に格納される。
【0077】
当該レコードのデータ領域および各バックアップ領域のデータを順次各バックアップ領域に移動させると、CPU11は、当該レコードのデータ領域のデータを、受信した書換えコマンドに含まれる書換えデータに書き換える(ステップS37)。このようなデータ領域のデータの書換えが正常終了すると、CPU11は、受信したコマンドに対する処理が正常終了した旨のレスポンスをICカード処理装置2に送信し(ステップS38)、処理を終了する。
【0078】
なお、上記ステップS37においてデータ領域に対するデータの書換えが失敗した場合(あるいは、受信したコマンドに含まれる書換えデータのデータ領域への書込みがリトライできない状態となった場合)、CPU11は、データ領域からバックアップ領域へ移動させたデータを再度、当該レコードのデータ領域に書き込むことにより、当該レコードの復旧処理を行うようにしても良い。このようにデータ領域へのデータの書込みが失敗した場合に、バックアップ領域のデータでデータ領域のデータを復旧させる(コマンドの受信前の状態に戻す)ことにより、ICカード1としての動作を安定化させることが可能である。
【0079】
上記のような書込み処理は、あるレコードのデータを更新する際に、データ領域および各バックアップ領域の各データを順次それぞれバックアップ領域に退避させ、最新のデータ(書換えデータ)を当該レコードのデータとしてのデータ領域に書き込むようにしたものである。これにより、更新前のデータを別のレコードとして保存するコマンドを与えたりすることなく、擬似的な2次元配列ファイルによって最新のデータと更新前の複数のデータ(複数世代のデータ)を容易に保存しておくことが可能となる。
【0080】
また、上記のような書込み処理では、バックアップデータが全バックアップ領域の容量を超える場合、最古のデータを削除して、最新のデータからバックアップ領域の数の分だけ古い各データを各バックアップ領域に常時保存しておくようにしたものである。これにより、各レコードに設けられた各バックアップ領域に、最新のデータからバックアップ領域の数だけ古いデータまでの各世代のデータを各バックアップ領域に保存することが可能となる。
【0081】
次に、上記第2の構成例のレコードファイルにおける各レコードに対するデータの読出し処理について説明する。
図8は、第2の構成例のレコードファイルにおけるレコードに対するデータの読出し処理を説明するためのフローチャートである。
まず、ICカード処理装置2からコマンドを受信した場合(ステップS40)、CPU11は、当該コマンドのコマンドコードに基づいてレコードデータの読出しを要求するリードレコードコマンドであるか否かを判断する(ステップS41)。
【0082】
この判断により受信したコマンドがリードレコードコマンドであると判断した場合(ステップS41、YES)、CPU11は、受信したリードレコードコマンドがバックアップ領域の読出しを要求するコマンドであるか否かを判定する(ステップS42)。
【0083】
上述したように、バックアップ領域の読出を要求する手法には、様々な形態が考えられる。たとえば、特定のコマンドの実行手順などによりバックアップ領域の読出要求を示すようにしても良いし、コマンドの内容(コマンドデータに含まれる情報)によって直接的にバックアップ領域の読出要求するようにしても良い。また、特定のコマンドの実行手順によりバックアップ領域の読出要求を示す形態としては、特定のコマンドが連続して与えられた場合に各バックアップ領域を順次読み出すようにしても良いし、複数種類のコマンドが特定の順序で与えられた場合に各バックアップ領域を順次読み出すようにしても良い。また、コマンドの内容(コマンドデータに含まれる情報)によって直接的にバックアップ領域の読出要求を示す形態としては、コマンドコードあるいは処理パラメータなどで各レコードの各バックアップ領域の読出を指定するようにすれば良い。上記のような運用形態に応じて、CPU11は、受信したコマンドがバックアップ領域の読出しを要求するコマンドであるか否かを判断するようになっている。
【0084】
ここでは、図8に示す処理例のように、「カレントレコード」が指定されたリードレコードコマンドが与えられた場合に、カレントレコードの各バックアップ領域を順次読み出すようにするものとする。このような形態であれば、CPU11は、上記ステップS42の処理として、当該コマンドにおいて読出対象とするレコードが、レコード番号で指定されている(あるいは、カレント以外のレコードが指定されている)か、「カレントレコード」として指定されているかを判定する(ステップS42)。
【0085】
上記リードレコードコマンドにおいてレコードの指定が「カレントレコード」である場合、つまり、受信コマンドがバックアップ領域の読出しを要求する場合(ステップS42、YES)、CPU11は、現在のカレントレコードにバックアップ領域が設定されているか否かを判断する(ステップS43)。
【0086】
この判断によりカレントレコードにバックアップ領域が設定されていると判断した場合(ステップS43、YES)、CPU11は、受信したコマンドの前までに受信したリードレコードコマンドによって当該レコードの全バックアップ領域のデータが読出し処理済みであるか否かを判断する(ステップS44)。つまり、上記ステップS44において、上記CPU11は、前回までに受信したリードコマンドによって全バックアップ領域のデータを読み出したか否かを判断する。
【0087】
上記判断によりカレントレコードの全バックアップ領域のデータが読出し済みでないと判断した場合(ステップS44、NO)、CPU11は、当該コマンドで指定されたレコード(カレントレコード)における各バックアップ領域のデータを順次読み出す(ステップS45)。たとえば、上記CPU11は、バックアップ領域のデータを読み出すごとに、ワーキングメモリ13に設けた図示しないカウンタをカウントアップする。これにより、連続してカレントレコードを指定するリードレコードコマンドを受けるごとに、CPU11は、カウンタの値に基づいて順に各バックアップ領域のデータを読み出す。
【0088】
カレントレコードのバックアップ領域のデータを読み出すと、CPU11は、当該コマンドの送信元であるICカード処理装置2に読み出したデータを含むレスポンスデータを送信する(ステップS46)。このように、上記ステップS40〜S46までの処理によって、当該ICカード1では、カレントレコードのバックアップ領域のデータが読み出される。このような処理を繰り返すことで、当該ICカード1は、各バックアップ領域のデータを順に読み出すことが可能となっている。
【0089】
また、図8に示す処理例では、上記ステップS42において、上記受信したコマンドにおいてレコードの指定が「カレントレコード」でない場合、つまり、受信したコマンドにおけるレコードの指定がファイルIDとレコード番号とによるものである場合(ステップS42、NO)、CPU11は、当該リードレコードコマンドが指定レコードのデータ領域のデータ(最新のデータ)の読出しを要求するものであると判定する。ただし、カレントレコードを変更しないリードコマンドを受信した場合は、上記ステップS43へ進むようにしても良い。
【0090】
受信したコマンドにおけるレコードの指定がファイルIDとレコード番号とによるものである場合(ステップS42、NO)、CPU11は、ファイルIDとレコード番号とにより読出対象とするレコード(指定されたレコード)を特定する(ステップS48)。つまり、CPU11は、当該コマンドで指定されたファイルIDによりレコードファイルとしてのEFを特定し、さらに、レコード番号に基づいて当該EF内におけるレコードを特定する。この際、上記CPU11は、指定されたレコードをカレントレコードとする。
【0091】
受信したコマンドで指定されているファイルID及びレコード番号によりレコードを特定すると、上記CPU11は、特定されたレコードのデータ領域のデータを読出し(ステップS49)、当該コマンドの送信元であるICカード処理装置2に読み出したデータを含むレスポンスデータを送信する(ステップS46)。
【0092】
また、図8に示す処理例では、ステップS43でカレントレコードにバックアップ領域が設定されていないと判断した場合(ステップS43、NO)、CPU11は、ステップS49へ進み、カレントレコードのデータ領域のデータを読み出す処理を行うものとする。ただし、ステップS43でNOと判断される場合は、バックアップ領域の読出しを要求するコマンドを受信したにも係らず、当該コマンドが指定するレコード(カレントレコード)にバックアップ領域が設定されていないと判断した場合である。このため、CPU11は、ステップS47へ進み、エラーであることを示すレスポンスを当該コマンドの送信元であるICカード処理装置2に送信するようにしても良い。
【0093】
また、図8に示す処理例では、ステップS44で全バックアップ領域のデータが直前のリードコマンドによって読出し済みであると判断した場合(ステップS44、YES)、CPU11は、エラーであることを示すレスポンスを当該コマンドの送信元であるICカード処理装置2に送信する(ステップS47)。これは、バックアップ領域の読出しを要求するコマンド(カレントレコードを指定したリードレコードコマンド)が連続して与えられた場合、連続して特定のレコード(カレントレコード)における全バックアップ領域のデータが読出し済みであることをエラー通知によって通知する仕組みである。
【0094】
ただし、上記ステップS44で全バックアップ領域のデータが直前までのリードコマンドで読出し済みであると判断した場合(ステップS44、YES)、CPU11は、図8に点線で示すように、ステップS49へ進み、カレントレコードのデータ領域のデータを読み出す処理を行うようにしても良い。これは、バックアップ領域の読出しを要求するコマンド(カレントレコードを指定したリードレコードコマンド)が連続して与えられた場合に、特定のレコード(カレントレコード)における各バックアップ領域の各データとデータ領域のデータとを順に読み出すようにする仕組みである。この場合、ICカード処理装置2では、カレントレコードを指定したリードレコードコマンドを連続して与えることにより、ICカード1からカレントレコードの各バックアップ領域のデータとデータ領域のデータとを順に読み出す制御が可能となる。
【0095】
上記のような読出処理では、レコード番号を指定したリードコマンドに対しては、当該レコードのデータ領域に記憶されている最新のデータを読出し、カレントレコードを指定したリードコマンド(バックアップ領域のデータの読出しを要求するコマンド)に対しては、当該レコードのバックアップ領域に記憶されているデータを読み出すようになっている。つまり、データ領域のデータを読み出した後に連続して特定のレコードの読出しが要求される場合、各バックアップ領域のデータを順に読み出すようになっている。
【0096】
これにより、擬似的な2次元配列ファイルに格納されている複数のバックアップデータを簡単な手順で順に読み出すことができ、レコード番号の管理などが複雑化することなく、取引履歴情報などの更新されることが予測されるデータについて最新のデータおよび更新前の複数のデータを容易に読み出すことができる。
【0097】
なお、上述した第1あるいは第2の構成例のレコードファイルに対する更新処理あるいは読出処理は、種々の変形が可能である。以下、上述した実施の形態に対する変形例について説明する。
まず、第1の変形例として、各レコード毎に、全バックアップ領域のデータを一括して読み出す処理例について説明する。
【0098】
すなわち、図8に示すような第2の構成例のレコードファイルに対する読出処理では、各レコードごとに各バックアップ領域のデータを順次読み出す処理について説明している。しかしながら、ICカード1の運用形態によっては、各レコード毎に全バックアップ領域のデータを一括して読み出したい場合があると考えられる。このような場合、第2の構成例のようなレコードに対して全バックアップ領域のデータを一括して読み出す仕組みを設けることにより、効率的な処理が可能となると考えらえる。
【0099】
各レコード毎に全バックアップ領域のデータを一括して読出す処理は、たとえば、リードレコードコマンドにおいて、全バックアップ領域を一括して読み出すことを要求するパラメータを定義しておくことにより実現できる。この場合、全バックアップ領域の一括読出しを指定するパラメータがカレントレコードを指定するリードレコードコマンドに含まれていれば、CPU11は、カレントレコードの全バックアップ領域のデータを一括して読み出し、一括して読み出した全バックアップ領域のデータをレスポンスデータとして出力するようにする。
【0100】
また、各バックアップ領域のデータを順に読み出す必要がない運用形態である場合、つまり、常に全バックアップ領域のデータを読み出すような仕様とする場合、全バックアップ領域を1つのバックアップ領域として取り扱えば、図5に示す処理例と同様な処理が可能である。すなわち、バックアップ領域の読出しを要求するコマンドに対して全バックアップ領域のデータを読み出すようにすることにより、各レコード毎に全バックアップ領域のデータを一括して読出す処理が実現可能である。
【0101】
次に、第2の変形例として、1つのレコードファイル内の全レコードのバックアップ領域のデータを一括して読み出す処理例について説明する。
【0102】
すなわち、図5あるいは図8に示すような読出処理では、第1の構成例あるいは第2の構成例のレコードファイルに対して、各レコードごとにバックアップ領域のデータを読み出すようにしている。しかしながら、1つのレコードファイル内の各レコードは、互いに関連するデータを格納するものであることが想定される。このような場合、運用形態によっては、レコードファイル内の全レコードのバックアップ領域のデータを一括して読み出すことにより、処理が効率化できることがありうると考えられる。
【0103】
レコードファイル内の全レコードのバックアップ領域のデータを一括して読出す処理は、たとえば、リードコマンドにおいて、レコードファイル内の全レコードのバックアップ領域を一括して読み出すことを指定するパラメータを定義しておくことにより実現できる。この場合、レコードファイル内の全レコードのバックアップ領域の一括読出しを指定するパラメータがリードコマンドに含まれていれば、CPU11は、指定されるレコードファイル(たとえばカレント状態のレコードファイル)における全レコードのバックアップ領域のデータを一括して読み出し、読み出した全レコードのバックアップ領域のデータをレスポンスデータとして出力するようにする。これにより、第1の構成例あるいは第2の構成例のようなレコードであっても、レコードファイル内の全レコードのバックアップ領域を一括して読み出す処理が実現できる。
【0104】
次に、第3の変形例として、データ領域のデータ異常で読み出しが失敗した場合の処理例について説明する。
上述した更新処理では、データ領域のデータをバックアップ領域に移動させた後に、当該データ領域へのデータの書込みが失敗した場合、当該データ領域にバックアップ領域に移動させたデータを再度書き込むという復旧処理について説明している。同様に、読出処理においても、データ領域のデータ異常が発見された場合、バックアップ領域に格納されている最も新しいデータ(前回の更新直前のデータ)で当該データ領域を復旧させることが可能である。
【0105】
たとえば、図5のステップS29あるいは図8のステップS49として説明したデータ領域のデータの読出し処理において、データ領域のデータ異常で読出に失敗した場合、バックアップ領域に格納されている最も新しいデータをデータ領域に書き込むようにすれば良い。この場合、読出処理の結果としては、エラー通知を行うようにしても良いし、データ領域に書込んだデータを出力するようにしても良い。
【0106】
また、上記のようなデータ領域のデータの復旧処理は、ICカード処理装置2からの復旧を要求するコマンドに応じて実行するようにしても良い。すなわち、ICカード処理装置2からデータ領域のデータの読出を要求するコマンドに対して当該データ領域のデータ異常で読出に失敗した場合、ICカード1は、当該データ領域のデータが異常である旨をエラー通知とともに出力し、その後、ICカード処理装置2からのデータ領域の復旧を要求するコマンドに応じて、上記のようなデータ領域のデータの復旧処理を実行するようにしても良い。
【0107】
また、上記のような読出処理においてデータ領域のデータ異常が発見された場合、データ領域にデータを書き込むことなく、データ領域のデータの代りにバックアップ領域に格納している最も新しいデータ(前回の更新直前のデータ)を出力するようにしても良い。この場合、読み出したデータとともに、データ領域のデータの代りにバックアップ領域のデータを読み出した事を通知するようにする。これにより、データ領域がメモリ異常などにより使用不能となった場合であっても、データ領域のデータが異常であることを通知するとともに、バックアップ領域のデータをデータ領域のデータの代わりとして出力することが可能となる。
【図面の簡単な説明】
【0108】
【図1】本実施の形態に係るICカードおよびICカードを含むシステムの構成例を示すブロック図。
【図2】非接触式ICカードの全体の構成例を示す図。
【図3】レコードファイルの第1の構成例を示す図。
【図4】第1の構成例のレコードファイルに対するデータ書込み処理の例を説明するためのフローチャート。
【図5】第1の構成例のレコードファイルに対するデータ読出し処理の例を説明するためのフローチャート。
【図6】レコードファイルの第2の構成例を示す図。
【図7】第2の構成例のレコードファイルに対するデータ書込み処理の例を説明するためのフローチャート。
【図8】第2の構成例のレコードファイルに対するデータ読出し処理の例を説明するためのフローチャート。
【符号の説明】
【0109】
C…本体、M…モジュール、1…ICカード、1a…ICチップ、2…ICカード処理装置、11…CPU、12…プログラムメモリ、13…ワーキングメモリ、14…データメモリ、15…通信制御部、16…電源部、17…インターフェース、21…制御装置、22…カードリーダライタ。

【特許請求の範囲】
【請求項1】
外部装置から与えられるコマンドに応じて処理を行う携帯可能電子装置において、
1つのデータ領域と少なくとも1つのデータ退避領域とを有するレコードを記憶する記憶手段と、
前記外部装置から前記レコードのデータ更新を要求するコマンドが与えられた場合、前記レコードの前記データ領域に記憶されているデータを前記データ退避領域へ移動させ、前記データ領域のデータを更新する更新手段と、
前記外部装置から前記レコードの前記データ退避領域に記憶されているデータの読出を要求するコマンドが与えられた場合、前記レコードの前記データ退避領域に記憶されているデータを読み出す読出手段と、
を有することを特徴とする携帯可能電子装置。
【請求項2】
前記レコードは、1つのデータ領域に対応して複数のデータ退避領域を有し、
前記更新手段は、前記外部装置から前記レコードのデータ更新を要求するコマンドが与えられる毎に、前記データ領域および各データ退避領域に記憶されている各データを順次移動させ、前記データ領域のデータを更新する、
ことを特徴とする前記請求項1に記載の携帯可能電子装置。
【請求項3】
前記更新手段は、前記外部装置から前記レコードのデータ更新を要求するコマンドが与えられた場合に、前記レコードにデータが記憶されていないデータ退避領域がなければ、前記レコードの各データ退避領域に記憶されているデータのうち最も古いデータを削除して、前記データ領域のデータを前記データ退避領域に移動させ、前記データ領域のデータを更新する、
ことを特徴とする前記請求項2に記載の携帯可能電子装置。
【請求項4】
前記読出手段は、前記外部装置から前記レコードの前記データ退避領域に記憶されているデータの読出を要求するコマンドが連続して与えられる毎に、前記レコードの各データ退避領域に記憶されている各データを順次読み出す、
ことを特徴とする前記請求項2又は3に記載の携帯可能電子装置。
【請求項5】
さらに、前記外部装置から前記レコードの各データ退避領域に記憶されている全データを一括して読み出すことを要求するコマンドが与えられた場合、前記レコードの全データ退避領域に記憶されている全データを一括して読み出す一括読出手段を有する、
ことを特徴とする前記請求項2乃至4の何れか1項に記載の携帯可能電子装置。
【請求項6】
前記記憶手段は、複数のレコードからなるレコードファイルを記憶し、
さらに、前記外部装置から前記記憶手段に記憶されている前記レコードファイルの全レコードの全データ退避領域に記憶されている全データを一括して読み出すことを要求するコマンドが与えられた場合、前記記憶手段に記憶されている前記レコードファイルの全レコードの全データ退避領域に記憶されている全データを一括して読み出す一括読出手段を有する、
ことを特徴とする前記請求項2乃至4の何れか1項に記載の携帯可能電子装置。
【請求項7】
さらに、前記更新手段により前記データ領域のデータを最新のデータを更新することに失敗した場合、前記データ領域から前記データ退避領域に移動させたデータを再度前記データ領域に書き込む復旧手段を有する、
ことを特徴とする前記請求項1乃至6の何れか1項に記載の携帯可能電子装置。
【請求項8】
さらに、前記データ領域に格納されているデータの異常により前記データ領域からのデータの読出しが失敗した場合、前記データ退避領域に記憶されているデータを前記データ領域に書き込む復旧手段を有する、
ことを特徴とする前記請求項1乃至6の何れか1項に記載の携帯可能電子装置。
【請求項9】
前記データ領域のデータ異常により前記データ領域からのデータの読出しが失敗した場合、前記データ領域のデータの代わりに前記データ退避領域に記憶されているデータを読出す処理手段を有する、
ことを特徴とする前記請求項1乃至8の何れか1項に記載の携帯可能電子装置。
【請求項10】
前記処理手段は、前記データ領域のデータの代わりに前記データ退避領域に記憶されているデータを読出した場合、前記データ退避領域から読み出したデータと共に、前記データ領域のデータの読出し異常のため前記データ退避領域のデータを読み出した事を示す応答を出力する、
ことを特徴とする前記請求項9に記載の携帯可能電子装置。
【請求項11】
外部装置から与えられるコマンドに応じて処理を行う携帯可能電子装置におけるデータ管理方法であって、
前記外部装置から1つのデータ領域と少なくとも1つのデータ退避領域とを有するレコードのデータの更新を要求するコマンドが与えられた場合、前記レコードの前記データ領域に記憶されているデータを前記データ退避領域へ移動させ、前記データ領域のデータを更新し、
前記外部装置から前記レコードの前記データ退避領域に記憶されているデータの読出を要求するコマンドが与えられた場合、前記レコードの前記データ退避領域に記憶されているデータを読み出す、
ことを特徴とする携帯可能電子装置におけるデータ管理方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2009−75816(P2009−75816A)
【公開日】平成21年4月9日(2009.4.9)
【国際特許分類】
【出願番号】特願2007−243568(P2007−243568)
【出願日】平成19年9月20日(2007.9.20)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】