CPU卡知识入门教程——第六章 对CPU卡中文件的操作
我们有什么办法可以对文件操作呢?
比如我们要对个人基本信息文件pm.txt进行操作,在DOS下我们可以用EDIT pm.txt进行编辑,
在WINDOWS下我们可以双击pm.txt,用文本编辑器打开文件。
但在CPU卡中,我们怎么对一个文件(比如说EF1)进行操作呢?
比如说我们要打一个人,我们必须先找到那个将要倒霉被打的人。
同样,我们要对一个文件操作,首先,我们必须先找到要操作的那个文件。
那我们怎们找到CPU卡中的文件呢?
我们查找某人,可以查找他(她)的身份证号来找到他,CPU中卡的每个文件是否也有
他们的身份证号呢?
有的:那就是文件标识,CPU卡中的文件通过文件标识表标记一个文件。
找一个人,还可以通过他(她)的名字来查找,找CPU卡中的文件呢?很遗憾,
对MF和DF有关目录的文件有它们的文件名,其它文件则没有文件名。
< 文件标识符与文件名称>
文件标识符是文件的标识代码,用2个字节表示,为什么只有2个字节呢?因为2个字节足矣,2个字节
FFFF=65535。
在选择文件时只要找出该文件的标识,就可以找到该文件。同一目录下的文件标识符是唯一的。
MF的文件标识符为3F00,文件名自定义,符合银行规范名称应该是1PAY.SYS.DDF01,
当然了,社保的卡规定的就不是这个名字了。
所有文件可以通过文件标识符用SELECT命令进行选择,目录文件DF可以通过目录名称进行选择。
短文件标识符:
由于对CPU卡文件的操作要求节省空间并且方便操作。
于是好像便出现了短文件标识符这个东东。
所谓短文件标识符,在字面上的意思就是比文件标识符短。好像实际上也是这样。
大家看看,短文件标识符只用1个字节来表示,并且只用1个字节低五位来表示。
同一个目录下的文件短标识符必须是唯一的。
短文件标识符可以通过Read Binary、Update Binary命令的参数P1来实现文件的
选择:若P1的高三位为100,则低5位为短文件标识符。例如:若P1为81H,即10000001,
其中高三位为100,则所选的文件标识符为00001,十六进制文件标识表示为00 01。
短文件标识符选择还可以通过Read Record、Update Record命令参数P2来实现文件的选择,
方法是若P2的高五位不全为0,低五位为100,则高五位为短文件标识符。对于命令
Append Record低五位为000来表短文件标识符。
短文件标识符选择只能用五位来决定文件标识符,所以可选择的最大文件标识为31,
若文件需要短文件标识符进行选择,则建立文件时就需将文件标识符取在1-31之间。
< 文件的访问>
上一节中规定了那么多种文件,那么,究竟该怎么对那些文件进行访问呢?
MF:
在CPU卡被复位后自动被选择,在任何一级子目录下可通过文件标识3F00或其文件名来选择MF
DF
通过文件名或文件标识符来选择DF,在MF下可以选择任意DF。
如果当前文件是一个DF下的一个EF,同样可以通过选择DF的文件标识符或文件名来选择任意DF。
二进制文件:
在满足读条件时可使用Read Binary读取,在满足写条件时可用Update Binary来更改二进制文
件的内容。
定长记录文件:
在满足读条件时可使用Read Record读取,在满足写条件时,若记录未满则用Append Record增加
新记录,若记录已满则用Update Record来更改指定记录的内容。
循环定长记录文件:
在满足读条件时可使用Read Record读取,在满足追加条件时可使用Append Record在文件末尾追加
一个记录,当记录写满后自动覆盖最早写的记录,最后一次写入的记录,其记录号总是1,上次写入
的记录号是2,依次类推。
变长记录文件
在满足读条件时可使用Read Record读出记录,在满足写条件时若记录未满则用Append Record增加
新记录,若记录已满则用Update Record来更改指定记录的内容。变长记录文件的格式为TLV格式,
Tag为1字节的记录标识,L为1字节的记录数据长度,V为L字节的数据值。在执行Update Record更改
已存在的记录时,新写的整条记录长度必须和原来的整个记录长度相等,否则将返回错误。