You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FEITIAN BR301读卡器执行VERIFY APDU命令返回6A88求助

解决FEITIAN BR301读卡器VERIFY命令返回6A88的问题

我来帮你排查这个6A88(Referenced data not found)错误的可能原因,结合FEITIAN BR301的特性和ISO7816-4 APDU规范,常见的几个排查方向可以逐一尝试:

1. 检查PIN的编码格式

你当前的APDU命令里,PIN“012345”用的是ASCII编码(30 31 32 33 34 35对应字符'0'到'5'的ASCII值),但绝大多数智能卡(包括FEITIAN的很多接触式卡)的VERIFY命令要求PIN使用BCD编码(二进制编码的十进制)。

对于PIN“012345”,BCD编码后是01 23 45,对应的APDU命令应该调整为:

00 20 00 00 03 01 23 45

对应的代码修改为:

String sendStr = "0020000003012345";
byte[] send = Utility.hexStrToBytes(sendStr);
byte[] recv = ftReader.readerXfr(0, send);
showLog("send response ---> "+Utility.bytes2HexStr(recv));

这是最常见的导致6A88的原因,因为卡内存储的PIN是BCD格式,用ASCII编码的话卡找不到匹配的引用数据。

2. 确认PIN参考ID(P1参数)是否正确

VERIFY命令的P1参数用于指定PIN的参考ID,默认00对应用户PIN,但部分卡可能需要指定其他值(比如01对应管理员PIN)。你可以尝试修改P1为01,结合正确的PIN编码重新测试:

  • ASCII编码版本:00 20 01 00 06 30 31 32 33 34 35
  • BCD编码版本:00 20 01 00 03 01 23 45

3. 检查卡内PIN的状态

如果卡内还未初始化PIN,或者PIN因多次错误尝试被锁定,也会返回6A88。你可以先执行GET DATA命令读取卡的状态信息,或者尝试用CHANGE REFERENCE DATA命令(00 24 00 00 03 01 23 45,假设初始化PIN为012345)来确认PIN是否可正常访问。

4. 核对APDU命令结构

虽然你的APDU结构(CLA=00, INS=20, P1=00, P2=00, Lc=06, Data=6字节)符合规范,但如果卡期望的PIN长度与你发送的不匹配,也会导致解析失败。比如BCD编码的6位PIN长度是3字节,Lc必须设为03,不能是06,否则卡无法正确识别数据内容。

建议你查阅FEITIAN BR301对应的卡手册,确认VERIFY命令的具体参数要求,不同类型的接触式卡可能有细微差异。

内容的提问来源于stack exchange,提问作者user3587281

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:52:47