社会保障卡读取基本文件数据

4 篇文章 0 订阅
1 篇文章 0 订阅

关于社会保障卡(社保卡)内容的具体资料,请查阅“人社信息函 2012 37 号 关于印发社会保障卡文件结构和数据项(V2.0)的通知”

卡内只有EF05-发卡机构数据文件和EF06-持卡人的基本信息文件是不需要密码验证就可以读取的,以下只针对这两个文件内容的读取操作进行说明。

数据项的格式与属性

请参阅:https://www.cnblogs.com/nightnine/p/11495740.html

APDU指令格式:

CLAINSP1P2LcDataLe

读取数据项分三步:

1、先选择 社会保障系统环境

APDU指令:00 A4 04 00 0F 7378312E73682EC9E7BBE1B1A3D5CF

说明:

00 A4:APDU的select file指令(CLA   INS)

04 00:参数(P1   P2)具体参数项及含义不详,网上资料太少

0F:后面跟随的参数的长度

7378312E73682EC9E7BBE1B1A3D5CF:转换为CHAR后=sx1.sh.社会保障

命令可理解为:按应用标识符选择应用文件

2、选择EF06文件

APDU指令:00 A4 02 00 02 EF06

00 A4:同上

02:P1参数,按文件标志符选择文件

00:P2参数

02:后面跟随的参数的长度

EF06:文件标志符

3、选择所需的数据项并返回数据,两种指令都可以使用

APDU指令1:00 B2 01 04 00

00B2:APDU的READ RECORD指令(CLA   INS)

01:P1参数,数据项序号,根据第二步选择的文件按顺序排列

04:P2参数,按数据项序号读取

00:期望返回的数据长度(经测试似乎没啥卵用)

APDU指令2:00 B2 08 00 00

00B2:APDU的READ RECORD指令(CLA   INS)

08:P1参数,数据项标志

00:P2参数,按数据项标志读取

00:期望返回的数据长度(经测试似乎没啥卵用)

 

调试经验:

使用德卡T10读卡器,在delphi7下调试

指令入参不能使用array of char或array of byte变量,需使用PChar(#$00#$A4#$02#$00#$02#$EF#$06)形式传入指令

例:

var
  icdev, DataLen : Cardinal;
  Data : array[0..31] of Byte;
begin
  dc_cpuapduInt(icdev, 5, PChar(#$00#$B2#$08#$00#$12), @DataLen, @Data)
end;

DataLen是返回的数据Data的有效长度

返回值要注意数据类型是an或是cn

an类型的值用Chr(Data[I])转换,cn类型的用IntToHex(Data[2],2)转换

返回值中前两个字节跳过不可用,末两个字节是执行状态代码,$9000表示成功,其它代表失败,可通过查询APDU应答状态码查看失败原因

 

  • 0
    点赞
  • 2
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

belsai

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值