CN105022976B - 一种读取智能卡中的记录的方法和装置 - Google Patents

一种读取智能卡中的记录的方法和装置 Download PDF

Info

Publication number
CN105022976B
CN105022976B CN201510446378.9A CN201510446378A CN105022976B CN 105022976 B CN105022976 B CN 105022976B CN 201510446378 A CN201510446378 A CN 201510446378A CN 105022976 B CN105022976 B CN 105022976B
Authority
CN
China
Prior art keywords
current
data
record
label
terminal
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201510446378.9A
Other languages
English (en)
Other versions
CN105022976A (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Feitian Technologies Co Ltd filed Critical Feitian Technologies Co Ltd
Priority to CN201510446378.9A priority Critical patent/CN105022976B/zh
Publication of CN105022976A publication Critical patent/CN105022976A/zh
Application granted granted Critical
Publication of CN105022976B publication Critical patent/CN105022976B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Transfer Between Computers (AREA)
  • Control Of Vending Devices And Auxiliary Devices For Vending Devices (AREA)

Abstract

本发明公开一种读取智能卡中的记录的方法和装置,该方法包括:终端从智能卡中获取应用文件定位符;从应用文件定位符的起始位置开始,获取当前文件数据;在当前文件数据中获取当前记录号;根据当前记录号和根据当前文件数据得到的文件标识,生成读记录指令,向智能卡发送读记录指令,并接收返回的响应数据,存储响应数据中的当前记录;根据当前记录号和当前文件数据中的最终记录号判断当前记录是否为最后一条记录,如果否,则更新当前记录号;如果是,则判断应用文件定位符中是否存在位于当前文件数据之后的第一预设长度的数据,如果是,则将位于当前文件数据之后的第一预设长度的数据作为更新后的当前文件数据,否则结束流程。

Description

一种读取智能卡中的记录的方法和装置
技术领域
本发明涉及通信领域,尤其涉及一种读取智能卡中的记录的方法和装置。
背景技术
在终端与智能卡通信过程中,终端需要读取智能卡中的记录,以便进行脱机数据认证、持卡人验证、终端风险管理、终端行为分析和卡片行为分析等过程,现有的读取智能卡中的记录的方法耗时长,在终端中占用较多的空间。
发明内容
本发明的目的是为了克服现有技术的不足,提供一种读取智能卡中的记录的方法和装置,节省读取智能卡中的记录的时间和终端中的空间。
本发明提供的一种读取智能卡中的记录的方法,包括:
步骤S1:终端从智能卡中获取应用文件定位符;
步骤S2:所述终端从所述应用文件定位符的起始位置开始,获取第一预设长度的数据作为当前文件数据;
步骤S3:所述终端将当前文件数据中的起始记录号作为当前记录号;
步骤S4:所述终端根据当前记录号和根据当前文件数据得到的文件标识,生成读记录指令,向所述智能卡发送所述读记录指令,接收所述智能卡返回的响应数据;
步骤S5:所述终端将所述响应数据中的当前记录存储至终端存储区;
步骤S6:所述终端根据当前记录号和当前文件数据中的最终记录号判断当前记录是否为最后一条记录,如果是,则执行步骤S7,否则更新当前记录号,返回步骤S4;
步骤S7:所述终端判断所述应用文件定位符中是否存在位于当前文件数据之后的第一预设长度的数据,如果是,则将所述位于当前文件数据之后的第一预设长度的数据作为更新后的当前文件数据,并返回步骤S3,否则结束流程。
本发明提供一种读取智能卡中的记录的装置,所述装置包括:第一获取模块、第二获取模块、第三获取模块、生成模块、发送模块、接收模块、存储模块、第一判断模块和第二判断模块;
所述第一获取模块,用于从智能卡中获取应用文件定位符;
所述第二获取模块,用于从所述第一获取模块获取到的所述应用文件定位符的起始位置开始,获取第一预设长度的数据作为当前文件数据;
所述第三获取模块,用于将所述第二获取模块获取到的当前文件数据中的起始记录号作为当前记录号;
所述生成模块,用于根据第三获取模块获取到的所述当前记录号和根据所述第二获取模块获取到的当前文件数据得到的文件标识,生成读记录指令;
所述发送模块,用于向所述智能卡发送所述生成模块生成的所述读记录指令;
所述接收模块,用于接收所述智能卡返回的响应数据;
所述存储模块,用于将所述接收模块接收到的所述响应数据中的当前记录存储至终端存储区;
所述第一判断模块,用于根据当前记录号和当前文件数据中的最终记录号判断当前记录是否为最后一条记录,如果是,则触发所述第二判断模块进行工作,否则更新当前记录号,触发所述生成模块进行工作;
所述第二判断模块,用于在所述第一判断模块判断当前记录为最后一条记录时,判断所述应用文件定位符中是否存在位于当前文件数据之后的第一预设长度的数据,如果是,则将所述位于当前文件数据之后的第一预设长度的数据作为更新后的当前文件数据,并触发所述第三获取模块进行工作。
本发明与现有技术相比,具有以下优点:
本发明提供的一种读取智能卡中的记录的方法和装置,可以节省读取智能卡中的记录的时间和终端中的空间。
附图说明
图1是本发明实施例1提供的一种读取智能卡中的记录的方法的流程图;
图2是本发明实施例2提供的一种读取智能卡中的记录的方法的流程图;
图3是本发明实施例3提供的一种读取智能卡中的记录的方法的流程图;
图4是本发明实施例4提供的一种读取智能卡中的记录的装置的模块图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
本发明的实施例1提供了一种读取智能卡中的记录的方法,如图1所示,包括:
步骤101:终端从智能卡中获取应用文件定位符;
具体地,终端通过向智能卡发送取处理选项指令,接收智能卡返回的数据并从中获取应用文件定位符;
具体地,终端对智能卡返回的数据中第1个字节的数据进行判断,若为第一预设数据,则终端获取下一个字节的数据作为智能卡返回的数据长度,根据智能卡返回的数据长度计算得到应用文件定位符的长度,终端从智能卡返回的数据中第5个字节开始,根据应用文件定位符的长度获取数据,将获取到的数据作为应用文件定位符;若智能卡返回的数据中第1个字节的数据为第二预设数据,则在智能卡返回的数据中查找应用文件定位符标签,若不能查找到则确定读取失败,结束流程,若找到应用文件定位符标签,则获取应用文件定位符标签的下一个字节数据作为应用文件定位符的长度,根据应用文件定位符的长度继续获取数据作为应用文件定位符;若智能卡返回的数据中第1个字节的数据为其他值则确定读取失败,结束流程;优选地,第一预设数据为0x80,第二预设数据为0x77,应用文件定位符标签为0x94;
例如,终端接收到的智能卡返回的数据为80 0E 5C 00 08 01 01 00 10 01 0301 18 01 03 00 90 00;终端判断出智能卡返回的数据中第1个字节的数据为第一预设数据0x80,则获取下一个字节的数据作为智能卡返回的数据长度,即智能卡返回的数据长度为0x0E,将智能卡返回的数据长度减2得到应用文件定位符的长度,即应用文件定位符的长度为0x0C,终端从智能卡返回的数据中第5个字节开始,获取0x0C个字节数据作为应用文件定位符,即应用文件定位符为08 01 01 00 10 01 03 01 18 01 03 00;
步骤102:终端判断应用文件定位符的长度是否正确,如果是,则执行步骤103,否则确定读取失败,结束流程;
具体地,终端将应用文件定位符的长度除以4取余数,判断余数是否为0,如果是,则确定应用文件定位符的长度正确,否则确定应用文件定位符的长度不正确;
步骤103:终端从应用文件定位符的起始位置开始,获取第一预设长度的数据作为当前文件数据;
具体地,第一预设长度为4个字节;
例如,应用文件定位符为08 01 01 00 10 01 03 01 18 01 03 00,获取应用文件定位符的前4个字节的数据作为当前文件数据,即当前文件数据为08 01 01 00;
步骤104:终端在当前文件数据中获取脱机认证记录个数作为当前认证记录个数,在当前文件数据中获取起始记录号作为当前记录号;
具体地,终端获取当前文件数据的第2个字节的数据作为起始记录号,获取当前文件数据中的第4个字节的数据作为当前认证记录个数;
例如,当前认证记录个数为0,当前记录号为1;
本实施例中,该步骤之前还包括:终端获取当前文件数据中的起始记录号和脱机认证记录个数,判断起始记录号和脱机认证记录个数是否正确,如果是,则执行步骤104,否则确定读取失败,结束流程;
具体地,终端获取当前文件数据的第2个字节的数据作为起始记录号,获取当前文件数据的第3个字节的数据作为最终记录号,获取当前文件数据的第4个字节的数据作为脱机认证记录个数,终端判断是否起始记录号不为0并且脱机认证记录个数是否为在预设范围内,如果是,则确定起始记录号和脱机认证记录个数正确,否则确定起始记录号和脱机认证记录个数不正确;具体地,预设范围的最小值为0,最大值为文件中的记录总数,即最大值为最终记录号减去起始记录号再加1;
例如,终端获取到的当前文件数据中的起始记录号为0x01,获取到的当前文件数据中的最终记录号为0x01,当前文件数据中的脱机认证记录个数为0,则确定起始记录号和脱机认证记录个数正确;
步骤105:终端根据当前记录号和根据当前文件数据得到的文件标识,生成读记录指令,向智能卡发送生成的读记录指令,等待接收智能卡返回的响应数据;
具体地,终端获取当前文件数据的第1个字节的数据,将获取到的数据右移3位,得到文件标识;终端将当前记录号作为读记录指令的第一参数,将文件标识左移3位后再加0x04,得到的结果作为读记录指令的第二参数,根据读记录指令类别、读记录指令码、第一参数和第二参数生成读记录指令;
例如,终端获取当前文件数据的第1个字节的数据为0x08,将获取到的数据0x08右移3位,得到文件标识为二进制数00000001,终端将文件标识左移3位后再加0x04,得到第二参数0x0C;则读记录指令类别为0x00,读记录指令码为0xB2,第一参数为0x01、第二参数为0x0C,即读记录指令为00 B2 01 0C 00;智能卡返回的响应数据为:70 3E 5F 20 0F 46 554C 4C 20 46 55 4E 43 54 49 4F 4E 41 4C 57 11 47 61 73 90 01 01 00 10 D2 01 2201 01 23 45 67 89 9F 1F 16 30 31 30 32 30 33 30 34 30 35 30 36 30 37 30 38 3039 30 41 30 42 90 00;
步骤106:终端在响应数据中获取响应码,判断获取到的响应码是否正确,如果是,则执行步骤107,否则确定读取失败,结束流程;
具体地,终端在响应数据中获取最后2个字节的数据作为响应码,判断响应码是否为第三预设数据,如果是,则确定响应码正确,否则确定响应码不正确;例如,第三预设数据为0x9000;
步骤107:终端判断响应数据的格式是否正确,如果是,则执行步骤108,否则确定读取失败,结束流程;
具体地,该步骤包括:
步骤107-1:终端判断当前认证记录个数是否为0,如果是,则执行步骤107-3,否则执行步骤107-2;
步骤107-2:终端判断响应数据的第1个字节是否为模板标签,如果是,则执行步骤107-3,否则确定响应数据的格式不正确;
例如,模板标签为0x70;
步骤107-3:终端判断响应数据的当前记录中的各数据元是否满足TLV格式,如果是,则确定响应数据的格式正确,否则确定响应数据的格式不正确;
例如,终端判断响应数据的当前记录中的各数据元是否满足TLV格式,包括:
步骤A0:终端获取响应数据的第2个字节的数据,判断获取到的数据的值,若该数据小于0x80,则将获取到的数据作为响应数据长度,获取响应数据长度的下一个字节的数据作为当前数据元标签,执行步骤A1;若该数据为0x81,则终端获取响应数据的第3个字节的数据作为响应数据长度,获取响应数据长度的下一个字节的数据作为当前数据元标签,执行步骤A1;若该数据为0x82,则终端获取响应数据的第3个字节和第4个字节的数据作为响应数据长度,获取响应数据长度的下一个字节的数据作为当前数据元标签,执行步骤A1;若该数据为其他值,则响应数据格式错误,结束;
步骤A1:终端判断当前数据元标签是否为第五预设数据,如果是,则获取当前数据元标签的下一个字节的数据作为当前数据元标签,返回步骤A1,否则执行步骤A2;
例如,第五预设数据为0x00或者0xFF;
步骤A2:终端将当前数据元标签与第六预设数据进行与运算,判断运算结果是否为第六预设数据,如果是,则获取当前数据元标签的下一个字节的数据,根据获取到的数据和当前数据元标签更新当前数据元标签,执行步骤A3;否则执行步骤A3;
具体地,第六预设数据为0x1F;
步骤A3:终端获取当前数据元标签的下一个字节的数据作为当前数据元长度;
步骤A4:终端对当前数据元长度进行判断,若当前数据元长度小于第二预设长度,则执行步骤A5;若当前数据元长度为第三预设长度,则获取当前数据元长度的下一个字节的数据作为当前数据元长度,执行步骤A5;若当前数据元长度为第四预设长度,则获取当前数据元长度的后两个字节的数据作为当前数据元长度,执行步骤A5;若为其他值则确定响应数据的格式不正确;
具体地,第二预设长度为0x80,第三预设长度为0x81,第四预设长度为0x82;
步骤A5:终端在当前数据元长度之后的数据中,根据当前数据元长度获取数据,判断是否能获取到数据,如果是,则将获取到的数据作为当前数据元内容,执行步骤A6,否则确定响应数据的格式不正确;
步骤A6:终端根据获取到的当前数据元标签、当前数据元长度和当前数据元内容更新响应数据长度,根据更新后的响应数据长度判断是否还存在未获取到的数据元,如果是,则将当前数据元内容的下一个字节的数据作为下一个当前数据元标签,返回步骤A1,否则确定响应数据的格式正确;
例如,终端判断更新后的响应数据长度是否为0,如果是,则确定不存在未获取到的数据元,否则确定还存在未获取到的数据元;
步骤108:终端判断响应数据中的当前记录中是否存在相同的数据元,如果是,则确定读取失败,结束流程,否则执行步骤109;
终端判断响应数据中的当前记录中是否存在相同的数据元,具体为:
步骤C1:终端获取当前记录中的第一个数据元的标签作为当前标签;
步骤C2:终端将当前标签与依次与当前记录中的其他数据元的标签进行比较,判断当前记录中的其他数据元的标签中是否存在与当前标签相同的标签,如果是,则确定当前记录中存在相同的数据元,否则执行步骤C3;
步骤C3:终端判断当前记录中是否存在位于当前标签之后的数据元的标签,如果是,则将当前标签之后的数据元的标签作为更新后的当前标签,返回步骤C2,否则确定当前记录中不存在相同的数据元;
例如,终端如步骤A0至A6所述的方法获取响应数据的当前记录中的数据元的标签,获取到的标签分别为0x5F 20、0x57和0x9F 1F,则终端判断出不存在相同的标签,即当前记录中不存在相同的数据元;
步骤109:终端将响应数据中的当前记录存储至终端存储区;
具体地,终端将响应数据中除模板标签、响应数据长度和响应码之外的数据作为当前记录,存储至终端存储区;
步骤110:终端根据当前认证记录个数判断响应数据中的当前记录是否为进行脱机认证的记录,如果是,则执行步骤111,否则执行步骤112;
具体地,终端判断当前认证记录个数是否为0,如果是,则确定响应数据中的当前记录为进行脱机认证的记录,否则确定响应数据中的当前记录不为进行脱机认证的记录;
步骤111:终端将响应数据中的当前记录存储至静态数据认证列表中,更新当前认证记录个数,执行步骤112;
具体地,步骤111为:终端判断当前文件数据的文件短标识是否不大于10,如果是,则将响应数据中除模板标签、响应数据长度和响应码之外的数据作为当前记录,存储至静态数据认证列表中;否则将响应数据中除响应码之外的数据作为当前记录,存储至静态数据认证列表中;更新当前认证记录个数为将当前认证记录个数自减1;
步骤112:终端根据当前记录号和当前文件数据中的最终记录号判断当前记录是否为最后一条记录,如果是,则执行步骤113,否则更新当前记录号,返回步骤105;
具体地,终端判断当前记录号是否与当前文件数据中的最终记录号一致,如果是,则确定当前记录为最后一条记录,否则确定当前记录不为最后一条记录;更新当前记录号为将当前记录号自加1;
步骤113:终端判断应用文件定位符中是否存在位于当前文件数据之后的第一预设长度的数据,如果是,则将位于当前文件数据之后的第一预设长度的数据作为更新后的当前文件数据,并返回步骤104,否则执行步骤114;
例如,当前文件数据为08 01 01 00,当前文件数据之后还存在数据组10 01 0301 18 01 03 00,则终端将10 01 03 01作为当前文件数据,返回步骤104;
步骤114:终端判断终端存储区中是否存在相同的数据元,如果是,则确定读取失败,结束流程,否则执行步骤115;
终端判断终端存储区中是否存在相同的数据元,具体为:
步骤E1:终端获取终端存储区中的第一个数据元的标签作为当前标签;
步骤E2:终端将当前标签依次与终端存储区中的其他数据元的标签进行比较,判断终端存储区中的其他数据元的标签中是否存在与当前标签相同的标签,如果是,则确定终端存储区中存在相同的数据元,否则执行步骤E3;
步骤E3:终端判断终端存储区中是否存在位于当前标签之后的数据元的标签,如果是,则将当前标签之后的数据元的标签作为更新后的当前标签,返回步骤E2,否则确定终端存储区中不存在相同的数据元;
步骤115:终端判断是否已接收到所有的强制数据,如果是,则确定读取成功,结束流程,否则确定读取失败,结束流程;
具体地,终端判断是否能够在终端存储区中查找到强制数据的标签,如果是,则确定已接收到所有的强制数据,否则确定未接收到所有的强制数据;例如,强制数据包括失效日期、主账户、第一卡片风险管理数据对象列表和第二卡片风险管理数据对象列表。
本实施例提供的一种读取智能卡中的记录的方法,节省读取智能卡中的记录的时间和终端中的空间;进一步地,本实施例提供的一种读取智能卡中的记录的方法,可以保证读取到的记录的完整性与正确性。
实施例2
本发明的实施例2提供了一种读取智能卡中的记录的方法,如图2所示,包括:
步骤201:终端从智能卡中获取应用文件定位符;
具体地,终端通过向智能卡发送取处理选项指令,接收智能卡返回的数据并从中获取应用文件定位符;
具体地,终端对智能卡返回的数据中第1个字节的数据进行判断,若为第一预设数据,则终端获取下一个字节的数据作为智能卡返回的数据长度,根据智能卡返回的数据长度计算得到应用文件定位符的长度,终端从智能卡返回的数据中第5个字节开始,根据应用文件定位符的长度获取数据,将获取到的数据作为应用文件定位符;若智能卡返回的数据中第1个字节的数据为第二预设数据,则在智能卡返回的数据中查找应用文件定位符标签,若不能查找到则确定读取失败,结束流程,若找到应用文件定位符标签,则获取应用文件定位符标签的下一个字节数据作为应用文件定位符的长度,根据应用文件定位符的长度继续获取数据作为应用文件定位符;若智能卡返回的数据中第1个字节的数据为其他值则确定读取失败,结束流程;优选地,第一预设数据为0x80,第二预设数据为0x77,应用文件定位符标签为0x94;
例如,终端接收到的智能卡返回的数据为80 0E 5C 00 08 01 01 00 10 01 0301 18 01 03 00 90 00;终端判断出智能卡返回的数据中第1个字节的数据为第一预设数据0x80,则获取下一个字节的数据作为智能卡返回的数据长度,即智能卡返回的数据长度为0x0E,将智能卡返回的数据长度减2得到应用文件定位符的长度,即应用文件定位符的长度为0x0C,终端从智能卡返回的数据中第5个字节开始,获取0x0C个字节数据作为应用文件定位符,即应用文件定位符为08 01 01 00 10 01 03 01 18 01 03 00;
步骤202:终端判断获取到的应用文件定位符的长度是否正确,如果是,则执行步骤203,否则确定读取失败,结束流程;
具体地,终端将应用文件定位符的长度除以4取余数,判断余数是否为0,如果是,则确定应用文件定位符的长度正确,否则确定应用文件定位符的长度不正确;
步骤203:终端从应用文件定位符的起始位置开始,获取第一预设长度的数据作为当前文件数据;
具体地,第一预设长度为4个字节;
步骤204:终端获取当前文件数据中的起始记录号和脱机认证记录个数,判断起始记录号和脱机认证记录个数是否正确,如果是,则执行步骤205,否则确定读取失败,结束流程;
具体地,步骤204为:终端获取当前文件数据的第2个字节的数据作为起始记录号,获取当前文件数据的第3个字节的数据作为最终记录号,获取当前文件数据的第4个字节的数据作为脱机认证记录个数,终端判断起始记录号是否不为0并且脱机认证记录个数是否为在预设范围内,如果是,则确定起始记录号和脱机认证记录个数正确,否则确定起始记录号和脱机认证记录个数不正确;具体地,预设范围的最小值为0,最大值为文件中的记录总数,最大值即最终记录号减去起始记录号再加1;
例如,当前文件数据为10 01 03 01,终端获取到的当前文件数据中的起始记录号为0x01,获取到的当前文件数据中的最终记录号为0x03,当前文件数据中的脱机认证记录个数为0x01,则确定起始记录号和脱机认证记录个数正确;
步骤205:终端在当前文件数据中获取脱机认证记录个数作为当前认证记录个数,在当前文件数据中获取起始记录号作为当前记录号;
具体地,终端获取当前文件数据的第2个字节的数据作为起始记录号,获取当前文件数据中的第4个字节的数据作为当前认证记录个数;
例如,当前认证记录个数为1,当前记录号为1;
步骤206:终端根据当前记录号和根据当前文件数据得到的文件标识,生成读记录指令,向智能卡发送生成的读记录指令,等待接收智能卡返回的响应数据;
具体地,终端获取当前文件数据的第1个字节的数据,将获取到的数据右移3位,得到文件标识;终端将当前记录号作为读记录指令的第一参数,将文件标识左移3位后再加0x04,将得到的结果作为读记录指令的第二参数,根据读记录指令类别、读记录指令码、第一参数和第二参数生成读记录指令;
例如,终端获取当前文件数据的第1个字节的数据为0x10,将获取到的数据0x10右移3位,得到文件标识为二进制数00000010,当终端将文件标识左移3位后再加0x04,得到第二参数0x14;则读记录指令类别为0x00,读记录指令码为0xB2,第一参数为0x01、第二参数为0x14,即读记录指令为00 B2 01 14 00;智能卡返回的响应数据为:70 40 5A 08 47 6173 90 01 01 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 5F 34 01 01 90 00;
步骤207:终端在响应数据中获取响应码,判断获取到的响应码是否正确,如果是,则执行步骤208,否则确定读取失败,结束流程;
具体地,终端在响应数据中获取最后2个字节的数据作为响应码,判断响应数据中的响应码是否为第三预设数据,如果是,则确定响应码正确,否则确定响应码不正确;例如,第三预设数据为0x9000;
步骤208:终端判断响应数据的格式是否正确,如果是,则执行步骤209,否则确定读取失败,结束流程;
具体地,该步骤包括:
步骤208-1:终端判断当前认证记录个数是否为0,如果是,则执行步骤208-3,否则执行步骤208-2;
步骤208-2:终端判断响应数据的第1个字节是否为模板标签,如果是,则执行步骤208-3,否则响应数据的格式不正确;
例如,模板标签为0x70;
步骤208-3:终端判断响应数据的当前记录中的各数据元是否满足TLV格式,如果是,则确定响应数据正确,否则确定响应数据不正确;
步骤209:终端判断响应数据中的当前记录中是否存在相同的数据元,如果是,则确定读取失败,结束流程,否则执行步骤210;
终端判断响应数据中的当前记录中是否存在相同的数据元,具体为:
步骤C1:终端获取当前记录中的第一个数据元的标签作为当前标签;
步骤C2:终端将当前标签与依次与当前记录中的其他数据元的标签进行比较,判断当前记录中的其他数据元的标签中是否存在与当前标签相同的标签,如果是,则确定当前记录中存在相同的数据元,否则执行步骤C3;
步骤C3:终端判断当前记录中是否存在位于当前标签之后的数据元的标签,如果是,则将当前标签之后的数据元的标签作为更新后的当前标签,返回步骤C2,否则确定当前记录中不存在相同的数据元;
例如,终端如步骤A0至A6所述的方法获取响应数据的当前记录中的数据元的标签,获取到的标签分别为0x 5A和0x5F 34,则终端判断出不存在相同的标签,即当前记录中不存在相同的数据元;
步骤210:终端判断响应数据中的当前记录中是否存在与终端存储区中的记录相同的数据元,如果是,则确定读取失败,结束流程,否则执行步骤211;
终端判断响应数据中的当前记录中是否存在与终端存储区中的记录相同的数据元,具体为:
步骤D1:终端获取当前记录中的一个数据元的标签作为当前标签;
步骤D2:终端将当前标签依次与终端存储区中的记录中的数据元的标签进行比较,判断终端存储区中的记录中的数据元的标签中是否存在与当前标签相同的标签,如果是,则确定当前记录中存在与终端存储区中的记录相同的数据元,否则执行步骤D3;
步骤D3:终端判断当前记录中是否存在未被判断的数据元的标签,如果是,则获取当前记录中的一个未被判断的数据元的标签作为更新后的当前标签,返回步骤D2,否则确定当前记录中不存在相同的数据元;
例如,终端存储区中的记录为:……9F 32 01 03 92 14 CF B8 D4 88 5D 96 0967 17 9F 98 2D 42 CE 54 EC C2 05 46 83 5A 08 47 61 73 90 01 01 00 10……,终端如步骤A0至A6所述的方法获取终端存储区中的数据元的标签,获取到的数据元的标签为:9F32、92和5A;当前记录中的数据元的标签分别为0x 5A和0x5F 34,则当前记录中的第一个数据元的标签和终端存储区中的记录中的数据元的标签相同,均为5A,则确定当前记录中存在与终端存储区中的记录相同的数据元,则确定读取失败,结束流程;
步骤211:终端将响应数据中的当前记录存储至终端存储区;
具体地,终端将响应数据中除模板标签、响应数据长度和响应码之外的数据作为当前记录,存储至终端存储区;
步骤212:终端根据当前认证记录个数判断响应数据中的当前记录是否为进行脱机认证的记录,如果是,则执行步骤213,否则执行步骤214;
具体地,步骤212为:终端判断当前认证记录个数是否为0,如果是,则确定响应数据中的当前记录为进行脱机认证的记录,否则确定响应数据中的当前记录不为进行脱机认证的记录;
步骤213:终端将响应数据中存储至静态数据认证列表中,更新当前认证记录个数,执行步骤214;
具体地,步骤213为:终端判断当前文件数据的文件短标识是否不大于10,如果是,则将响应数据中除模板标签、响应数据长度和响应码之外的数据作为当前记录,存储至静态数据认证列表中;否则将响应数据中除响应码之外的数据作为当前记录,存储至静态数据认证列表中;更新当前认证记录个数为将当前认证记录个数自减1;
步骤214:终端根据当前记录号和当前文件数据中的最终记录号判断读取到的记录是否为最后一条记录,如果是,则执行步骤215,否则更新当前记录号,返回步骤206;
具体地,步骤214为:终端判断当前记录号是否与当前文件数据中的最终记录号一致,如果是,则确定读取到的记录为最后一条记录,否则确定读取到的记录不为最后一条记录;更新当前记录号为将当前记录号自加1;
步骤215:终端判断应用文件定位符中是否存在位于当前文件数据之后的第一预设长度的数据,如果是,则将位于当前文件数据之后的第一预设长度的数据作为更新后的当前文件数据,返回步骤204,否则执行步骤216;
步骤216:终端判断是否已接收到所有的强制数据,如果是,则确定读取成功,结束流程,否则确定读取失败,结束流程;
具体地,步骤216为:终端判断是否能够在终端存储区中的记录中查找到强制数据的标签,如果是,则确定已接收到所有的强制数据,否则确定未接收到所有的强制数据;
例如,强制数据包括失效日期、主账户、第一卡片风险管理数据对象列表和第二卡片风险管理数据对象列表;失效日期的标签为5F24,主账户的标签为5A,第一卡片风险管理数据对象列表的标签为8C,第二卡片风险管理数据对象列表的标签为8D,终端在终端存储区中的记录中查找上述四个标签,若均能找到则确定已接收到所有的强制数据,若至少有一个标签未查找到则确定未接收到所有的强制数据。
本实施例提供的一种读取智能卡中的记录的方法,节省读取智能卡中的记录的时间和终端中的空间;进一步地,本实施例提供的一种读取智能卡中的记录的方法,可以保证读取到的记录的完整性与正确性。
实施例3
本发明的实施例3提供了一种读取智能卡中的记录的方法,如图3所示,包括:
步骤301:终端从智能卡中获取应用文件定位符;
具体地,终端通过向智能卡发送取处理选项指令,接收智能卡返回的数据并从中获取应用文件定位符;
具体地,终端对智能卡返回的数据中第1个字节的数据进行判断,若为第一预设数据,则终端获取下一个字节的数据作为智能卡返回的数据长度,根据智能卡返回的数据长度计算得到应用文件定位符的长度,终端从智能卡返回的数据中第5个字节开始,根据应用文件定位符的长度获取数据,将获取到的数据作为应用文件定位符;若智能卡返回的数据中第1个字节的数据为第二预设数据,则在智能卡返回的数据中查找应用文件定位符标签,若不能查找到则确定读取失败,结束流程,若找到应用文件定位符标签,则获取应用文件定位符标签的下一个字节数据作为应用文件定位符的长度,根据应用文件定位符的长度继续获取数据作为应用文件定位符;若智能卡返回的数据中第1个字节的数据为其他值则确定读取失败,结束流程;优选地,第一预设数据为0x80,第二预设数据为0x77,应用文件定位符标签为0x94;
例如,终端接收到的智能卡返回的数据为80 0E 5C 00 08 01 01 00 10 01 0301 18 01 03 00 90 00;终端判断出智能卡返回的数据中第1个字节的数据为第一预设数据0x80,则获取下一个字节的数据作为智能卡返回的数据长度,即智能卡返回的数据长度为0x0E,将智能卡返回的数据长度减2得到应用文件定位符的长度,即应用文件定位符的长度为0x0C,终端从智能卡返回的数据中第5个字节开始,获取0x0C个字节数据作为应用文件定位符,即应用文件定位符为08 01 01 00 10 01 03 01 18 01 03 00;
步骤302:终端判断获取到的应用文件定位符的长度是否正确,如果是,则执行步骤303,否则确定读取失败,结束流程;
具体地,终端将应用文件定位符的长度除以4再取余数,判断余数是否为0,如果是,则确定应用文件定位符的长度正确,否则确定应用文件定位符的长度不正确;
步骤303:终端从应用文件定位符的起始位置开始,获取第一预设长度的数据作为当前文件数据;
具体地,第一预设长度为4个字节;
步骤304:终端获取当前文件数据中的起始记录号和脱机认证记录个数,判断起始记录号和脱机认证记录个数是否正确,如果是,则执行步骤305,否则确定读取失败,结束流程;
具体地,终端获取当前文件数据的第2个字节的数据作为起始记录号,获取当前文件数据的第3个字节的数据作为最终记录号,获取当前文件数据的第4个字节的数据作为脱机认证记录个数,终端判断起始记录号是否不为0并且脱机认证记录个数是否为在预设范围内,如果是,则确定起始记录号和脱机认证记录个数正确,否则确定起始记录号和脱机认证记录个数不正确;具体地,预设范围的最小值为0,最大值为文件中的记录总数,即最终记录号减去起始记录号再加1;
例如,当前文件数据为10 01 03 01,终端获取到的当前文件数据中的起始记录号为0x01,获取到的当前文件数据中的最终记录号为0x03,当前文件数据中的脱机认证记录个数为0x01,则确定起始记录号和脱机认证记录个数正确;
步骤305:终端在当前文件数据中获取脱机认证记录个数作为当前认证记录个数,在当前文件数据中获取起始记录号作为当前记录号;
具体地,终端获取当前文件数据的第2个字节的数据作为起始记录号,获取当前文件数据中的第4个字节的数据作为当前认证记录个数;
例如,当前认证记录个数为1,当前记录号为1;
步骤306:终端根据当前记录号和根据当前文件数据得到的文件标识,生成读记录指令,向智能卡发送生成的读记录指令,等待接收智能卡返回的响应数据;
具体地,终端获取当前文件数据的第1个字节的数据,将获取到的数据右移3位,得到文件标识;终端将当前记录号作为读记录指令的第一参数,将文件标识左移3位后再加0x04,得到的结果作为读记录指令的第二参数,根据读记录指令类别、读记录指令码、第一参数和第二参数生成读记录指令;
例如,终端获取当前文件数据的第1个字节的数据为0x10,将获取到的数据0x10右移3位,得到文件标识为二进制数00000010,当终端将文件标识左移3位后再加0x04,得到第二参数0x14;则读记录指令类别为0x00,读记录指令码为0xB2,第一参数为0x01、第二参数为0x14,即读记录指令为00 B2 01 14 00;智能卡返回的响应数据为:70 40 5A 08 47 6173 90 01 01 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 5F 34 01 01 90 00;
步骤307:终端在响应数据中获取响应码,判断获取到的响应码是否正确,如果是,则执行步骤308,否则确定读取失败,结束流程;
具体地,终端在响应数据中获取最后2个字节的数据作为响应码,判断响应数据中的响应码是否为第二预设数据,如果是,则确定响应码正确,否则确定响应码不正确;例如,第二预设数据为0x9000;
步骤308:终端判断响应数据的格式是否正确,如果是,则执行步骤309,否则确定读取失败,结束流程;
具体地,该步骤包括:
步骤308-1:终端判断当前认证记录个数是否为0,如果是,则执行步骤308-3,否则执行步骤308-2;
步骤308-2:终端判断响应数据的第1个字节是否为模板标签,如果是,则执行步骤308-3,否则响应数据的格式不正确;
例如,模板标签为0x70;
步骤308-3:终端判断响应数据的当前记录中的各数据元是否满足TLV格式,如果是,则确定响应数据正确,否则确定响应数据不正确;
步骤309:终端在响应数据中的当前记录中获取第一个数据元作为当前数据元;
具体地,当前数据元包括当前数据元标签、当前数据元长度和当前数据元内容,该步骤包括:
步骤B0:终端获取响应数据的第2个字节的数据,判断获取到的数据的值,若该数据小于第二预设长度,则将获取到的数据作为响应数据长度,获取响应数据长度的下一个字节的数据作为当前数据元标签,执行步骤B1;若该数据为第三预设长度,则终端获取响应数据的第3个字节的数据作为响应数据长度,获取响应数据长度的下一个字节的数据作为当前数据元标签,执行步骤B1;若该数据为第四预设长度,则终端获取响应数据的第3个字节和第4个字节的数据作为响应数据长度,获取响应数据长度的下一个字节的数据作为当前数据元标签,执行步骤B1;
具体地,第二预设长度为0x80,第三预设长度为0x81,第四预设长度为0x82;
步骤B1:终端判断当前数据元标签是否为第五预设数据,如果是,则获取当前数据元标签的下一个字节的数据作为当前数据元标签,返回步骤B1,否则执行步骤B2;
例如,第五预设数据为0x00或者0xFF;
步骤B2:终端将当前数据元标签与第六预设数据进行与运算,判断运算结果是否为第六预设数据,如果是,则获取当前数据元标签的下一个字节的数据,根据获取到的数据和当前数据元标签更新当前数据元标签,执行步骤B3;否则执行步骤B3;
具体地,第六预设数据为0x1F;
步骤B3:终端获取当前数据元标签的下一个字节的数据作为当前数据元长度;
步骤B4:终端对当前数据元长度进行判断,若当前数据元长度小于第二预设长度,则执行步骤B5;若当前数据元长度为第三预设长度,则获取当前数据元长度的下一个字节的数据作为当前数据元长度,执行步骤B5;若当前数据元长度为第四预设长度,则获取当前数据元长度的后两个字节的数据作为当前数据元长度,执行步骤B5;
具体地,第二预设长度为0x80,第三预设长度为0x81,第四预设长度为0x82;
步骤B5:终端在当前数据元长度之后的数据中,根据当前数据元长度获取数据作为当前数据元内容,执行步骤310;
例如,终端在当前记录中获取到的当前数据元标签为0x5A,获取到的当前数据元长度为0x08,当前数据元内容为47 61 73 90 01 01 00 10;
步骤310:终端判断终端存储区中的记录中是否存在与当前数据元相同的数据元,如果是,则确定读取失败,结束流程,否则执行步骤311;
具体地,终端获取当前数据元标签,判断在终端存储区中的记录中是否存在相同的标签,如果是,则确定当前数据元与终端存储区中的记录中的数据元相同,否则确定当前数据元不与终端存储区中的记录中的数据元相同;
例如,当前数据元标签为0x5A,终端判断在终端存储区中的记录中不存在相同的标签,即当前数据元与终端存储区中的记录中的数据元不相同;
步骤311:终端将当前数据元存储至终端存储区;
步骤312:终端判断在响应数据中的当前记录中是否存在位于当前数据元之后的数据元,如果是,则将位于当前数据元之后的下一个数据元作为更新后的当前数据元,返回步骤310,否则执行步骤313;
具体地,终端根据获取到的当前数据元标签、当前数据元长度和当前数据元内容更新响应数据长度,根据更新后的响应数据长度判断当前数据元之后是否还存在数据元,如果是,则将当前数据元的下一个数据元作为当前数据元,返回步骤310,否则执行步骤313;
例如,终端判断更新后的响应数据长度判断是否为0,如果是,则确定不存在未获取到的数据元,否则确定还存在未获取到的数据元;终端将当前数据元内容的下一个字节的数据作为下一个当前数据元标签,按照步骤B1至B5的方法获取到当前数据元的下一个数据元;
例如,终端在当前数据元之后获取到的下一个数据元标签为5F 34,获取到的下一个数据元5F 34 01 01作为当前数据元,返回步骤310;
步骤313:终端根据当前认证记录个数判断响应数据中的当前记录是否为进行脱机认证的记录,如果是,则执行步骤314,否则执行步骤315;
具体地,终端判断当前认证记录个数是否为0,如果是,则确定响应数据中的为进行脱机认证的记录,否则确定响应数据中的不为进行脱机认证的记录;
步骤314:终端将响应数据中的当前记录存储至静态数据认证列表中,更新当前认证记录个数,执行步骤315;
具体地,终端判断当前文件数据的文件短标识是否不大于10,如果是,则将响应数据中除模板标签、响应数据长度和响应码之外的数据作为当前记录,存储至静态数据认证列表中;否则将响应数据中除响应码之外的数据作为当前记录,存储至静态数据认证列表中;更新当前认证记录个数为将当前认证记录个数自减1;
步骤315:终端根据当前记录号和当前文件数据中的最终记录号判断读取到的记录是否为最后一条记录,如果是,则执行步骤316,否则更新当前记录号,返回步骤306;
具体地,终端判断当前记录号是否与当前文件数据中的最终记录号一致,如果是,则确定读取到的记录为最后一条记录,否则确定读取到的记录不为最后一条记录;更新当前记录号为将当前记录号自加1;
例如,当前记录号为1,最终记录号为0x03,则终端判断出读取到的记录不为最后一条记录,将当前记录号更新为2,返回步骤305;
步骤316:终端判断应用文件定位符中是否存在位于当前文件数据之后的第一预设长度的数据,如果是,则将位于当前文件数据之后的第一预设长度的数据作为更新后的当前文件数据,并返回步骤304,否则执行步骤317;
例如,当前文件数据为10 01 03 01,当前文件数据之后还存在数据组18 01 0300,则终端将18 01 03 00作为当前文件数据,返回步骤304;
步骤317:终端判断是否已接收到所有的强制数据,如果是,则确定读取成功,结束流程,否则确定读取失败,结束流程;
具体地,终端判断是否能够在终端存储区中的记录中查找到强制数据的标签,如果是,则确定已接收到所有的强制数据,否则确定未接收到所有的强制数据;
例如,强制数据包括失效日期、主账户、第一卡片风险管理数据对象列表和第二卡片风险管理数据对象列表;失效日期的标签为5F 24,主账户的标签为5A,第一卡片风险管理数据对象列表的标签为8C,第二卡片风险管理数据对象列表的标签为8D,终端在终端存储区中的记录中查找上述四个标签,若均能找到则确定已接收到所有的强制数据,若至少有一个标签未查找到则确定未接收到所有的强制数据。
例如,终端存储区中的记录为:5F 20 0F 46 55 4C 4C 20 46 55 4E 43 54 494F 4E 41 4C 57 11 47 61 73 90 01 01 00 10 D2 01 22 01 01 23 45 67 89 9F 1F 1630 31 30 32 30 33 30 34 30 35 30 36 30 37 30 38 30 39 30 41 30 42 5A 08 47 6173 90 01 01 00 10 5F 34 01 01 5F 25 03 95 07 01 5F 24 03 20 12 31 5F 28 02 0840 9F 07 02 FF C0 8E 12 00 00 00 00 00 00 00 00 41 03 42 03 5E 03 43 03 1F 009F 08 02 00 8C 5F 30 02 02 01 9F 42 02 08 40 8C 14 95 05 9B 02 9F 02 06 9F 1A02 5F 2A 02 9A 03 9C 01 9F 37 04 8D 16 95 05 9B 02 8A 02 9F 02 06 9F 1A 02 5F2A 02 9A 03 9C 01 9F 37 04 9F 0E 05 00 50 88 00 00 9F 0F 05 F0 20 04 98 00 9F0D 05 F0 20 04 00 00 8F 01 57 90 60 56 69 91 43 20 B9 6C B5 44 25 EF 78 41 C875 C7 67 DD 82 B3 5F E5 C1 35 2B A2 8D 15 C1 AC 99 F7 A6 8D 38 D9 DC 25 F5 6E4A 76 E8 EF 79 65 C6 28 EB F0 83 45 5B 68 0E 62 AE 98 ED 24 A0 80 4A 7A 76 C598 98 25 77 2B 22 5B B7 EE A5 7D 20 4C C6 70 39 D4 50 12 B8 FB A3 13 E5 5A 487B BA CC C1 9F 32 01 03 92 14 CF B8 D4 88 5D 96 09 67 17 9F 98 2D 42 CE 54 ECC2 05 46 83 93 50 11 0B B9 DF 2D 21 98 19 06 B2 9A 30 14 11 F9 FA 60 CF 49 4DBA BA BF 54 B1 79 7C 9C 4B 5D 99 B5 E6 7A B7 30 49 E7 71 FC 5F DC 23 E5 83 50B7 81 00 53 24 D3 1D C8 7A D0 FB F6 36 73 38 08 05 6D 66 0746 32 71 1E 7C BF14 07 37 96 E1 B6 0D 4D;终端在终端存储区中的记录中能查找到失效日期的标签5F24,主账户的标签5A,第一卡片风险管理数据对象列表的标签8C和第二卡片风险管理数据对象列表的标签8D,则确定已接收到所有的强制数据。
本实施例提供的一种读取智能卡中的记录的方法,节省读取智能卡中的记录的时间和终端中的空间;进一步地,本实施例提供的一种读取智能卡中的记录的方法,可以保证读取到的记录的完整性与正确性。
实施例4
本发明的实施例4提供了一种读取智能卡中的记录的装置,如图4所示,包括:第一获取模块401、第二获取模块402、第三获取模块403、生成模块404、发送模块405、接收模块406、存储模块407、第一判断模块408和第二判断模块409;
第一获取模块401,用于从智能卡中获取应用文件定位符;
第二获取模块402,用于从第一获取模块401获取到的应用文件定位符的起始位置开始,获取第一预设长度的数据作为当前文件数据;
第三获取模块403,用于将第二获取模块402获取到的当前文件数据中的起始记录号作为当前记录号;
生成模块404,用于根据第三获取模块403获取到的当前记录号和根据第二获取模块402获取到的当前文件数据得到的文件标识,生成读记录指令;
发送模块405,用于向智能卡发送生成模块404生成的读记录指令;
接收模块406,用于接收智能卡返回的响应数据;
存储模块407,用于将接收模块406接收到的响应数据中的当前记录存储至终端存储区;
第一判断模块408,用于根据当前记录号和当前文件数据中的最终记录号判断当前记录是否为最后一条记录,如果是,则触发第二判断模块409进行工作,否则更新当前记录号,触发生成模块404进行工作;
第二判断模块409,用于在第一判断模块408判断当前记录为最后一条记录时,判断应用文件定位符中是否存在位于当前文件数据之后的第一预设长度的数据,如果是,则将位于当前文件数据之后的第一预设长度的数据作为更新后的当前文件数据,并触发第三获取模块403进行工作。
装置还包括第三判断模块,用于判断应用文件定位符的长度是否正确,如果是,则触发第二获取模块402进行工作。
装置还包括第四判断模块,用于获取当前文件数据中的起始记录号和脱机认证记录个数,判断起始记录号和脱机认证记录个数是否正确,如果是,则触发第三获取模块403进行工作。
装置还包括第五判断模块,用于在响应数据中获取响应码,判断响应码是否正确,如果是,则触发存储模块407进行工作。
装置还包括第六判断模块,用于判断响应数据的格式是否正确,如果是,则触发存储模块407进行工作。
第三获取模块403还用于在当前文件数据中获取脱机认证记录个数并将其作为当前认证记录个数;
第六判断模块包括:第一判断单元、第二判断单元和第三判断单元;
第一判断单元,用于判断当前认证记录个数是否为0,如果是,触发第三判断单元进行工作,否则触发第二判断单元进行工作;
第二判断单元,用于在第一判断单元判断出当前认证记录个数不为0时,判断响应数据的第1个字节数据是否为模板标签,如果是,触发第三判断单元进行工作,否则确定响应数据的格式不正确;
第三判断单元,用于在第一判断单元判断出当前认证记录个数为0时,或者第二判断单元判断响应数据的第1个字节为模板标签时,判断响应数据的当前记录中的各数据元是否满足TLV格式,如果是,则确定响应数据的格式正确,否则确定响应数据的格式不正确。
装置还包括第七判断模块,用于判断响应数据中的当前记录中是否存在相同的数据元,如果是,则确定读取失败,否则触发存储模块407进行工作。
第七判断模块包括:第一获取单元、第四判断单元和第五判断单元;
第一获取单元,用于获取当前记录中的第一个数据元的标签作为当前标签;
第四判断单元,用于将当前标签依次与当前记录中的其他数据元的标签进行比较,判断当前记录中的其他数据元的标签中是否存在与当前标签相同的标签,如果是,则确定当前记录中存在相同的数据元,否则触发第五判断单元进行工作;
第五判断单元,用于当第四判断单元判断出当前记录中的其他数据元的标签中不存在与当前标签相同的标签时,判断当前记录中是否存在位于当前标签之后的数据元的标签,如果是,则将当前标签之后的数据元的标签作为更新后的当前标签,触发第四判断单元进行工作,否则确定当前记录中不存在相同的数据元。
装置还包括第八判断模块,用于判断响应数据中的当前记录中的数据元是否存在与终端存储区中的记录中的数据元相同的数据元,如果是,则确定读取失败,否则触发存储模块407进行工作。
第八判断模块包括:第二获取单元、第六判断单元和第七判断单元;
第二获取单元,用于获取当前记录中的一个数据元的标签作为当前标签;
第六判断单元,用于将当前标签与依次与终端存储区中的记录中的数据元的标签进行比较,判断终端存储区中的记录中的数据元的标签中是否存在与当前标签相同的标签,如果是,则确定当前记录中存在与终端存储区中的记录相同的数据元,否则触发第七判断单元进行工作;
第七判断单元,用于当第六判断单元判断出终端存储区中的记录中的数据元的标签中不存在与当前标签相同的标签时,判断当前记录中是否存在未被判断的数据元的标签,如果是,则获取当前记录中的一个未被判断的数据元的标签作为更新后的当前标签,触发第六判断单元进行工作,否则确定当前记录中不存在与终端存储区中的记录相同的数据元。
存储模块407包括:第三获取单元、存储单元和第八判断单元;
第三获取单元,用于在响应数据中的当前记录中获取第一个数据元作为当前数据元;
存储单元,用于将当前数据元存储至终端存储区;
第八判断单元,用于判断在响应数据中的当前记录中是否存在位于当前数据元之后的数据元,如果是,则将位于当前数据元之后的下一个数据元作为更新后的当前数据元,触发存储单元进行工作,否则触发第一判断模块408进行工作。
存储模块407还包括第九判断单元,用于判断当前数据元是否与终端存储区中的记录中的数据元相同,如果是,则确定读取失败,否则触发存储单元进行工作。
第九判断单元具体用于获取当前数据元标签,判断在终端存储区中的记录中是否存在相同的标签,如果是,则确定当前数据元与终端存储区中的记录中的数据元相同,否则确定当前数据元与终端存储区中的记录中的数据元不相同。
第三获取模块403还用于在当前文件数据中获取脱机认证记录个数并将其作为当前认证记录个数;
装置还包括第九判断模块,用于根据当前认证记录个数,判断响应数据中的当前记录是否为进行脱机认证的记录,如果是,则将响应数据中的当前记录存储至静态数据认证列表中,更新当前认证记录个数,触发第二判断模块409进行工作,否则触发第二判断模块409进行工作。
装置还包括第十判断模块,用于判断终端存储区中是否存在相同的数据元。
第十判断模块包括:第四获取单元、第十判断单元和第十一判断单元;
第四获取单元,用于获取终端存储区中的第一个数据元的标签作为当前标签;
第十判断单元,用于将当前标签与依次与终端存储区中的其他数据元的标签进行比较,判断终端存储区中的其他数据元的标签中是否存在与当前标签相同的标签,如果是,则确定终端存储区中存在相同的数据元,否则触发第十一判断单元进行工作;
第十一判断单元,当第十判断单元判断出终端存储区中的其他数据元的标签中不存在与当前标签相同的标签时,判断终端存储区中是否存在位于当前标签之后的数据元的标签,如果是,则将当前标签之后的数据元的标签作为更新后的当前标签,触发第十判断单元进行工作,否则确定终端存储区中不存在相同的数据元。
装置还包括第十一判断模块,用于判断终端存储区的记录中是否存在强制数据。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

Claims (30)

1.一种读取智能卡中的记录的方法,其特征在于,所述方法包括:
步骤S1:终端从智能卡中获取应用文件定位符;
步骤S2:所述终端从所述应用文件定位符的起始位置开始,获取第一预设长度的数据作为当前文件数据;
步骤S3:所述终端将当前文件数据中的起始记录号作为当前记录号;
步骤S4:所述终端根据当前记录号和根据当前文件数据得到的文件标识,生成读记录指令,向所述智能卡发送所述读记录指令,接收所述智能卡返回的响应数据;
步骤S5:所述终端将所述响应数据中的当前记录存储至终端存储区;
步骤S6:所述终端根据当前记录号和当前文件数据中的最终记录号判断当前记录是否为最后一条记录,如果是,则执行步骤S7,否则更新当前记录号,返回步骤S4;
步骤S7:所述终端判断所述应用文件定位符中是否存在位于当前文件数据之后的第一预设长度的数据,如果是,则将所述位于当前文件数据之后的第一预设长度的数据作为更新后的当前文件数据,并返回步骤S3,否则结束流程;
所述步骤S5之前包括:所述终端判断所述响应数据中的当前记录中是否存在相同的数据元,如果是,则确定读取失败,结束流程,否则执行步骤S5;
所述终端判断所述响应数据中的当前记录中是否存在相同的数据元,具体为:
步骤C1:所述终端获取当前记录中的第一个数据元的标签作为当前标签;
步骤C2:所述终端将当前标签依次与当前记录中的其他数据元的标签进行比较,判断当前记录中的其他数据元的标签中是否存在与当前标签相同的标签,如果是,则确定当前记录中存在相同的数据元,否则执行步骤C3;
步骤C3:所述终端判断当前记录中是否存在位于当前标签之后的数据元的标签,如果是,则将当前标签之后的数据元的标签作为更新后的当前标签,返回步骤C2,否则确定当前记录中不存在相同的数据元。
2.根据权利要求1所述的方法,其特征在于,所述步骤S2之前包括:所述终端判断所述应用文件定位符的长度是否正确,如果是,则执行步骤S2,否则确定读取失败,结束流程。
3.根据权利要求1所述的方法,其特征在于,所述步骤S3之前包括:所述终端获取当前文件数据中的起始记录号和脱机认证记录个数,判断所述起始记录号和所述脱机认证记录个数是否正确,如果是,则执行步骤S3,否则确定读取失败,结束流程。
4.根据权利要求1所述的方法,其特征在于,所述步骤S5之前包括:所述终端在所述响应数据中获取响应码,判断所述响应码是否正确,如果是,则执行步骤S5,否则确定读取失败,结束流程。
5.根据权利要求1所述的方法,其特征在于,所述步骤S5之前包括:所述终端判断所述响应数据的格式是否正确,如果是,则执行步骤S5,否则确定读取失败,结束流程。
6.根据权利要求5所述的方法,其特征在于,所述步骤S3还包括:所述终端在当前文件数据中获取脱机认证记录个数并将其作为当前认证记录个数,
所述终端判断所述响应数据的格式是否正确,具体包括:
步骤S5-1:所述终端判断当前认证记录个数是否为0,如果是,则执行步骤S5-3,否则执行步骤S5-2;
步骤S5-2:所述终端判断所述响应数据的第1个字节数据是否为模板标签,如果是,则执行步骤S5-3,否则确定所述响应数据的格式不正确;
步骤S5-3:所述终端判断所述响应数据的当前记录中的各数据元是否满足TLV格式,如果是,则确定所述响应数据的格式正确,否则确定所述响应数据的格式不正确。
7.根据权利要求1所述的方法,其特征在于,所述步骤S5之前包括:所述终端判断所述响应数据中的当前记录中的数据元是否存在与终端存储区中的记录中的数据元相同的数据元,如果是,则确定读取失败,结束流程,否则执行步骤S5。
8.根据权利要求7所述的方法,其特征在于,所述终端判断所述响应数据中的当前记录中是否存在与终端存储区中的记录相同的数据元,具体为:
步骤D1:所述终端获取当前记录中的一个数据元的标签作为当前标签;
步骤D2:所述终端将当前标签与依次与终端存储区中的记录中的数据元的标签进行比较,判断终端存储区中的记录中的数据元的标签中是否存在与当前标签相同的标签,如果是,则确定当前记录中存在与终端存储区中的记录相同的数据元,否则执行步骤D3;
步骤D3:所述终端判断当前记录中是否存在未被判断的数据元的标签,如果是,则获取当前记录中的一个未被判断的数据元的标签作为更新后的当前标签,返回步骤D2,否则确定当前记录中不存在与终端存储区中的记录相同的数据元。
9.根据权利要求1所述的方法,其特征在于,所述步骤S5包括:
步骤S5-1:所述终端在所述响应数据中的当前记录中获取第一个数据元作为当前数据元;
步骤S5-2:所述终端将当前数据元存储至所述终端存储区;
步骤S5-3:所述终端判断在响应数据中的当前记录中是否存在位于当前数据元之后的数据元,如果是,则将位于当前数据元之后的下一个数据元作为更新后的当前数据元,返回步骤S5-2,否则执行步骤S6。
10.根据权利要求9所述的方法,其特征在于,所述步骤S5-2之前包括:所述终端判断当前数据元是否与所述终端存储区中的记录中的数据元相同,如果是,则确定读取失败,结束流程,否则执行步骤S5-2。
11.根据权利要求10所述的方法,其特征在于,所述终端判断当前数据元是否与所述终端存储区中的记录中的数据元相同,具体为:所述终端获取当前数据元的标签,判断在所述终端存储区中的记录中是否存在相同的标签,如果是,则确定当前数据元与所述终端存储区中的记录中的数据元相同,否则确定当前数据元与所述终端存储区中的记录中的数据元不相同。
12.根据权利要求1所述的方法,其特征在于,所述步骤S3还包括:所述终端在当前文件数据中获取脱机认证记录个数并将其作为当前认证记录个数,
所述步骤S5之后还包括:所述终端根据当前认证记录个数,判断所述响应数据中的当前记录是否为进行脱机认证的记录,如果是,则所述终端将所述响应数据中的当前记录存储至静态数据认证列表中,更新当前认证记录个数,执行步骤S7,否则执行步骤S7。
13.根据权利要求1所述的方法,其特征在于,所述步骤S7中判断为否时还包括:所述终端判断所述终端存储区中是否存在相同的数据元,如果是,则确定读取失败,结束流程,否则确定读取成功,结束流程。
14.根据权利要求13所述的方法,其特征在于,所述终端判断所述终端存储区中是否存在相同的数据元,具体为:
步骤E1:所述终端获取所述终端存储区中的第一个数据元的标签作为当前标签;
步骤E2:所述终端将当前标签与依次与所述终端存储区中的其他数据元的标签进行比较,判断所述终端存储区中的其他数据元的标签中是否存在与当前标签相同的标签,如果是,则确定所述终端存储区中存在相同的数据元,否则执行步骤E3;
步骤E3:所述终端判断所述终端存储区中是否存在位于当前标签之后的数据元的标签,如果是,则将当前标签之后的数据元的标签作为更新后的当前标签,返回步骤E2,否则确定所述终端存储区中不存在相同的数据元。
15.根据权利要求1所述的方法,其特征在于,所述步骤S7判断为否时还包括:所述终端判断所述终端存储区的记录中是否存在强制数据,如果是,则确定读取成功,结束流程,否则确定读取失败,结束流程。
16.一种读取智能卡中的记录的装置,其特征在于,所述装置包括:第一获取模块、第二获取模块、第三获取模块、生成模块、发送模块、接收模块、存储模块、第一判断模块和第二判断模块;
所述第一获取模块,用于从智能卡中获取应用文件定位符;
所述第二获取模块,用于从所述第一获取模块获取到的所述应用文件定位符的起始位置开始,获取第一预设长度的数据作为当前文件数据;
所述第三获取模块,用于将所述第二获取模块获取到的当前文件数据中的起始记录号作为当前记录号;
所述生成模块,用于根据第三获取模块获取到的所述当前记录号和根据所述第二获取模块获取到的当前文件数据得到的文件标识,生成读记录指令;
所述发送模块,用于向所述智能卡发送所述生成模块生成的所述读记录指令;
所述接收模块,用于接收所述智能卡返回的响应数据;
所述存储模块,用于将所述接收模块接收到的所述响应数据中的当前记录存储至终端存储区;
所述第一判断模块,用于根据当前记录号和当前文件数据中的最终记录号判断当前记录是否为最后一条记录,如果是,则触发所述第二判断模块进行工作,否则更新当前记录号,触发所述生成模块进行工作;
所述第二判断模块,用于在所述第一判断模块判断当前记录为最后一条记录时,判断所述应用文件定位符中是否存在位于当前文件数据之后的第一预设长度的数据,如果是,则将所述位于当前文件数据之后的第一预设长度的数据作为更新后的当前文件数据,并触发所述第三获取模块进行工作;
所述装置还包括第七判断模块,用于判断所述响应数据中的当前记录中是否存在相同的数据元,如果是,则确定读取失败,否则触发所述存储模块进行工作;
所述第七判断模块包括:第一获取单元、第四判断单元和第五判断单元;
所述第一获取单元,用于获取当前记录中的第一个数据元的标签作为当前标签;
所述第四判断单元,用于将当前标签依次与当前记录中的其他数据元的标签进行比较,判断当前记录中的其他数据元的标签中是否存在与当前标签相同的标签,如果是,则确定当前记录中存在相同的数据元,否则触发所述第五判断单元进行工作;
所述第五判断单元,用于当所述第四判断单元判断出当前记录中的其他数据元的标签中不存在与当前标签相同的标签时,判断当前记录中是否存在位于当前标签之后的数据元的标签,如果是,则将当前标签之后的数据元的标签作为更新后的当前标签,触发所述第四判断单元进行工作,否则确定当前记录中不存在相同的数据元。
17.根据权利要求16所述的装置,其特征在于,所述装置还包括第三判断模块,用于判断所述应用文件定位符的长度是否正确,如果是,则触发所述第二获取模块进行工作。
18.根据权利要求16所述的装置,其特征在于,所述装置还包括第四判断模块,用于获取当前文件数据中的起始记录号和脱机认证记录个数,判断所述起始记录号和所述脱机认证记录个数是否正确,如果是,则触发所述第三获取模块进行工作。
19.根据权利要求16所述的装置,其特征在于,所述装置还包括第五判断模块,用于在所述响应数据中获取响应码,判断所述响应码是否正确,如果是,则触发所述存储模块进行工作。
20.根据权利要求16所述的装置,其特征在于,所述装置还包括第六判断模块,用于判断所述响应数据的格式是否正确,如果是,则触发所述存储模块进行工作。
21.根据权利要求20所述的装置,其特征在于,所述第三获取模块还用于在当前文件数据中获取脱机认证记录个数并将其作为当前认证记录个数;
所述第六判断模块包括:第一判断单元、第二判断单元和第三判断单元;
所述第一判断单元,用于判断当前认证记录个数是否为0,如果是,触发所述第三判断单元进行工作,否则触发所述第二判断单元进行工作;
所述第二判断单元,用于在所述第一判断单元判断出当前认证记录个数不为0时,判断所述响应数据的第1个字节数据是否为模板标签,如果是,触发所述第三判断单元进行工作,否则确定所述响应数据的格式不正确;
所述第三判断单元,用于在所述第一判断单元判断出当前认证记录个数为0时,或者所述第二判断单元判断所述响应数据的第1个字节为模板标签时,判断所述响应数据的当前记录中的各数据元是否满足TLV格式,如果是,则确定所述响应数据的格式正确,否则确定所述响应数据的格式不正确。
22.根据权利要求16所述的装置,其特征在于,所述装置还包括第八判断模块,用于判断所述响应数据中的当前记录中的数据元是否存在与终端存储区中的记录中的数据元相同的数据元,如果是,则确定读取失败,否则触发所述存储模块进行工作。
23.根据权利要求22所述的装置,其特征在于,所述第八判断模块包括:第二获取单元、第六判断单元和第七判断单元;
所述第二获取单元,用于获取当前记录中的一个数据元的标签作为当前标签;
所述第六判断单元,用于将当前标签与依次与终端存储区中的记录中的数据元的标签进行比较,判断终端存储区中的记录中的数据元的标签中是否存在与当前标签相同的标签,如果是,则确定当前记录中存在与终端存储区中的记录相同的数据元,否则触发所述第七判断单元进行工作;
所述第七判断单元,用于当所述第六判断单元判断出终端存储区中的记录中的数据元的标签中不存在与当前标签相同的标签时,判断当前记录中是否存在未被判断的数据元的标签,如果是,则获取当前记录中的一个未被判断的数据元的标签作为更新后的当前标签,触发所述第六判断单元进行工作,否则确定当前记录中不存在与终端存储区中的记录相同的数据元。
24.根据权利要求16所述的装置,其特征在于,所述存储模块包括:第三获取单元、存储单元和第八判断单元;
所述第三获取单元,用于在所述响应数据中的当前记录中获取第一个数据元作为当前数据元;
所述存储单元,用于将当前数据元存储至所述终端存储区;
所述第八判断单元,用于判断在响应数据中的当前记录中是否存在位于当前数据元之后的数据元,如果是,则将位于当前数据元之后的下一个数据元作为更新后的当前数据元,触发所述存储单元进行工作,否则触发所述第一判断模块进行工作。
25.根据权利要求24所述的装置,其特征在于,所述存储模块还包括第九判断单元,用于判断当前数据元是否与所述终端存储区中的记录中的数据元相同,如果是,则确定读取失败,否则触发所述存储单元进行工作。
26.根据权利要求25所述的装置,其特征在于,所述第九判断单元具体用于获取当前数据元标签,判断在所述终端存储区中的记录中是否存在相同的标签,如果是,则确定当前数据元与所述终端存储区中的记录中的数据元相同,否则确定当前数据元与所述终端存储区中的记录中的数据元不相同。
27.根据权利要求16所述的装置,其特征在于,所述第三获取模块还用于在当前文件数据中获取脱机认证记录个数并将其作为当前认证记录个数;
所述装置还包括第九判断模块,用于根据当前认证记录个数,判断所述响应数据中的当前记录是否为进行脱机认证的记录,如果是,则将所述响应数据中的当前记录存储至静态数据认证列表中,更新当前认证记录个数,触发所述第二判断模块进行工作,否则触发所述第二判断模块进行工作。
28.根据权利要求16所述的装置,其特征在于,所述装置还包括第十判断模块,用于判断所述终端存储区中是否存在相同的数据元。
29.根据权利要求28所述的装置,其特征在于,所述第十判断模块包括:第四获取单元、第十判断单元和第十一判断单元;
所述第四获取单元,用于获取所述终端存储区中的第一个数据元的标签作为当前标签;
所述第十判断单元,用于将当前标签与依次与所述终端存储区中的其他数据元的标签进行比较,判断所述终端存储区中的其他数据元的标签中是否存在与当前标签相同的标签,如果是,则确定所述终端存储区中存在相同的数据元,否则触发所述第十一判断单元进行工作;
所述第十一判断单元,当所述第十判断单元判断出所述终端存储区中的其他数据元的标签中不存在与当前标签相同的标签时,判断终端存储区中是否存在位于当前标签之后的数据元的标签,如果是,则将当前标签之后的数据元的标签作为更新后的当前标签,触发所述第十判断单元进行工作,否则确定所述终端存储区中不存在相同的数据元。
30.根据权利要求16所述的装置,其特征在于,所述装置还包括第十一判断模块,用于判断所述终端存储区的记录中是否存在强制数据。
CN201510446378.9A 2015-07-27 2015-07-27 一种读取智能卡中的记录的方法和装置 Active CN105022976B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510446378.9A CN105022976B (zh) 2015-07-27 2015-07-27 一种读取智能卡中的记录的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510446378.9A CN105022976B (zh) 2015-07-27 2015-07-27 一种读取智能卡中的记录的方法和装置

Publications (2)

Publication Number Publication Date
CN105022976A CN105022976A (zh) 2015-11-04
CN105022976B true CN105022976B (zh) 2018-04-03

Family

ID=54412936

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510446378.9A Active CN105022976B (zh) 2015-07-27 2015-07-27 一种读取智能卡中的记录的方法和装置

Country Status (1)

Country Link
CN (1) CN105022976B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108537925B (zh) * 2018-04-04 2021-05-18 安恒世通(北京)网络科技有限公司 一种锁具终端联控方法
CN112990402B (zh) * 2021-04-29 2021-08-31 飞天诚信科技股份有限公司 一种车载终端异常处理方法及车载终端

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1758269A (zh) * 2004-10-08 2006-04-12 富士通株式会社 用户认证设备,电子装置,和用户认证程序
CN101923754A (zh) * 2009-06-17 2010-12-22 中国工商银行股份有限公司 基于银行智能卡实现快速支付的系统及方法
CN102968604A (zh) * 2005-09-28 2013-03-13 维萨国际服务协会 减少无接触交易的交互时间的设备,系统和方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150073995A1 (en) * 2013-09-10 2015-03-12 The Toronto Dominion Bank System and method for authorizing a financial transaction

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1758269A (zh) * 2004-10-08 2006-04-12 富士通株式会社 用户认证设备,电子装置,和用户认证程序
CN102968604A (zh) * 2005-09-28 2013-03-13 维萨国际服务协会 减少无接触交易的交互时间的设备,系统和方法
CN101923754A (zh) * 2009-06-17 2010-12-22 中国工商银行股份有限公司 基于银行智能卡实现快速支付的系统及方法

Also Published As

Publication number Publication date
CN105022976A (zh) 2015-11-04

Similar Documents

Publication Publication Date Title
CN103577213B (zh) 一种智能终端触摸屏固件的升级方法
CN103123618B (zh) 文本相似度获取方法和装置
CN106663129A (zh) 一种基于状态机上下文敏感多轮对话管理系统及方法
CN102970104B (zh) 一种获取数据的方法及服务器
CN105022976B (zh) 一种读取智能卡中的记录的方法和装置
CN103631963B (zh) 一种基于大数据的关键词优化处理方法及装置
CN103020295A (zh) 一种问题标签标注方法及装置
CN102023882A (zh) 计算机自动识别手机并安装手机驱动程序的系统及方法
CN103188267B (zh) 一种基于dfa的协议解析方法
CN109951430B (zh) 一种数据处理方法及装置
CN102821182B (zh) 一种手持设备的电话本联系人自动匹配方法
CN103077049A (zh) 智能桌面导航栏更新方法及系统
CN104298671B (zh) 数据统计分析方法及装置
CN105847041A (zh) 一种基于网管系统命令行数据的交互方法
CN106649210A (zh) 一种数据转换方法及装置
CN110460473A (zh) 组态软件的通信配置方法、装置和计算机可读存储介质
CN106982128A (zh) 基于网络的社群构建方法
CN106599324A (zh) 一种cad数据抓取方法
CN104298570B (zh) 数据处理方法和装置
CN106776275B (zh) 一种基于分组复用的测试流程自动生成方法
CN103279506A (zh) 一种基于电力技术杂志论文非结构化数据提取的方法
CN104753659B (zh) 一种多网元数据同步加载的方法、装置及系统
CN109409793A (zh) 一种设备全生命周期的管理方法及相关装置
CN108304358A (zh) 基于陆用捷联惯导产品SDCard存储装置的数据解析方法
CN112346366A (zh) 终端设备的控制方法、装置、设备及计算机可读存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant