NFC 读取公交卡信息

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mhpmii/article/details/50563883

读了读杭州通 通用卡,记录一下子

参考资料
公共交通IC卡技术规范

公交卡的结构
这里写图片描述

1.SELECT 选择MF (可不选)

可以不选默认也会被选中,但是可以通过这个指令获得文件控制信息FCI
发送 00A4 0000 02 3F00
接收 6f 12 84 0e 31 50 55 42 2e 53 59 53 2e 44 44 46 30 31 a5 00
6F:文件控制信息模板,84:DF名称 ,A5:文件控制信息专用数据
88:短文件标识符(SFI)
所以DF名称 315055422e5356532e4444463031
即:1PUB.SYS.DDF01

2.READ RECORD 读目录文件

发送 00B2 01 0C 00
返回 70 11 61 0f 4f 09 a00000000386980701 50 02 3f01
这里 01是记录号,接下来我读了02 03都有返回,读04的时候提示记录未找到。
响应是电子存折/钱包规范中的SELECT ADF 的响应
这里一共读到3条记录
4F 是 应用标识符AID a00000000386980701
a00000000386980702
a00000000386980703
50 是应用标签 3F01
3F02
3F03

3.SELECT 选择应用 3F01

发送 00A0 0000 02 3F01
返回6f 2e (FCI模板)
84 09 a00000000386980701 (84 DF名)
a5 21 (a5 FCI专用模板)
9f0c 1e (9FOC :发卡机构自定义数据,JT/T xxx手册上写的是BF0C)
84753100000000000000 发卡机构代码
31 应用类型标识
00 发卡机构应用版本号
3100000020915087 应用帐户(卡号)
20151010 应用启用日期
20651010 应用有效日期
0000 发卡机构自定义代码

4.GET BALANCE 读取余额

发送 805C 00 02 04
返回 00 00 16 c8
我这张卡余额是 16C8
16C8 换算成10进制就是5832,再除与100,余额就是58.32

5.READ RECORD 读交易明细 (0x18)

发送 00B2 01 C4 00
返回 0018 000000 00000111 09 310001050306 20160109164459
发送参数 P2 = 0xC4(11000 100) 11000 是0x18 即 交易明细文件
切割一下返回的数据
data[0:1] 交易编号
data[2,4] 不清楚
data[5,8] 交易金额(和上一步算余额的方法一样)
data[9] 交易类型(充值(0x06)还是刷卡(0x09)
data[10,15] 终端机器编号
data[16,22] 交易日期,最后一次交易日期是 2016-01-09 16:44:59

继续发送命令依次读取记录
00B2 01 C4 00
00B2 02 C4 00
00B2 03 C4 00

00B2 0A C4 00
测试发现最多可以读取10条交易记录,大于10条就会返回记录未找到(6A83)

6.READ BINARY读公用应用基本数据文件(0x15)

发送 00B0 95 001E
返回 8475310000000000 00 00 31003100000020915087 20151010 20651010 00
00
发送参数 P2 = 0x95= 100 10101 ,10101=0x15即公共应用基本文件
拆分一下数据

data[0:7] 8475310000000000:发卡方标识
data[8] 00 :应用标识(表示保留)
data[9] 00 :发卡方应用版本
data[10:19] 31003100000020915087:卡片序列号(与卡片上的编号一致)
data[20:23] 20151010 : 起始日期
data[24:27] 20651010 : 有效日期
data[28:29] 0000 : 发卡方自定义的FCI数据

7.其他文件

尝试了读取IC卡文件结构中的其他文件
持卡人基本信息文件0x16
发送 00B0 9700 00
返回 不满足安全状态(6982)

管理信息文件 0x17
P2 = 0xBC(10111 100)
发送 00B2 01 BC 00
00B2 02 BC 00

00B2 0A BC 00
测试可以读到9条记录(到 0x09)
数据是变长记录,有全0的也有非全0的,不知道是些什么东西,没仔细研究

展开阅读全文

没有更多推荐了,返回首页