Android NFC支付项目中多AID银行卡的正确选择方法问询
解决多AID银行卡NFC读取问题的步骤
1. 先通过PPSE获取完整AID候选列表
必须先发送标准PPSE选择命令:00 A4 04 00 0E 325041592E5359532E4444463031 00,卡片会返回包含所有支持AID的FCI(文件控制信息)。解析响应时,重点提取:
- 每个AID的优先级(由标签
88的长度决定,长度越短优先级越高) - 对应AID的应用模板数据
2. 按优先级遍历AID执行全流程命令
拿到AID列表后,按优先级依次尝试每个AID的完整命令链:
- 发送
Select AID命令:00 A4 04 00 [AID长度] [AID值] 00 - 若响应状态码为
9000(命令成功),继续执行Get Processing Options:80 A8 00 00 02 8300 00 - 根据GPO返回的PDOL构造对应数据,最后执行
Read Record读取卡片信息 - 只要有一个AID的全流程执行成功,立即停止遍历,避免无效操作
3. 修改开源库的多AID适配逻辑
针对你使用的开源库,需要调整单AID读取的硬编码逻辑:
- 初始化阶段不再固定单个AID,改为从PPSE响应中动态生成AID列表
- 遍历AID时,捕获
SW_WRONG_LENGTH、SW_FILE_NOT_FOUND等异常,跳过失败的AID继续尝试 - 保证每个AID的命令流程独立,前一个AID失败不会中断整个读取流程
推荐学习资源
- EMV 3-D Secure Specification:官方规范,明确PPSE、AID选择及后续命令的交互标准
- NFC Forum Type 4 Tag Operation Specification:了解NFC卡片的数据交换机制
- EMVCo官方文档:包含APDU命令格式、响应码解析及多应用卡片的处理规则
内容的提问来源于stack exchange,提问作者Roop Kishore
相关产品推荐
相关产品推荐

