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

Android HCE模拟EMV卡被ACR1252识别为令牌而非实体卡的求助

解决Android HCE模拟EMV卡被识别为令牌的问题

问题背景

在Android设备上通过HCE模拟EMV卡,使用ACR1252读卡器配合相关软件读取时,软件可正常读取卡片数据,但始终将模拟卡识别为令牌,而非实体卡。

核心修复方案

1. 修正EMV响应中的卡片类型标识(9F4A标签)

EMV规范定义,标签9F4A用于区分卡片类型:

  • 取值01:实体卡(Physical Card)
  • 取值82:令牌卡(Token Card)

查看你的MyHostApduService代码,处理00b2000400和00b2011400命令的响应中,均包含9F4A0182字段——这里的82就是软件识别为令牌的直接原因。需将其修改为01:

原响应片段:

9F4A0182

修改后:

9F4A0101

2. 确保实体卡字段一致性

检查响应中的其他风险管理相关字段(如9F0D、9F0F),确保这些字段的取值符合实体卡的配置逻辑,避免残留令牌专属标识。

3. 规范APDU响应返回方式

代码中使用sendResponseApdu发送响应后返回null,虽Android HCE支持该方式,但建议直接返回响应字节数组,确保流程符合规范:

// 替换sendResponseApdu调用,改为返回响应数组
byte[] response = hexToBinary("修改后的完整HEX响应字符串");
return response;

代码修改示例

以处理00b2000400命令的响应为例,修改后的完整HEX字符串如下:

if (getReq.toLowerCase().contains("00b2000400".toLowerCase()))
    sendResponseApdu(hexToBinary("7081A657135167803202840547D24112010000000001960F5A0851678032028405475F24032411305F25031911015F280208045F3401018C279F02069F03069F1A0295055F2A029A039C019F37049F35019F45029F4C089F34039F21039F7C148D0C910A8A0295059F37049F4C088E0E000000000000000042031E031F039F0702FFC09F080200029F0D05B4508400009F0E0500000000009F0F05B4708480009F420209809F4A01019000"));

额外验证步骤

  • 确认apduservice.xml中category="payment"配置正确,保证HCE服务注册为支付类应用
  • 重启设备NFC功能,清除可能存在的缓存
  • 使用PC/SC工具抓取完整APDU交互日志,验证所有响应字段符合实体卡EMV规范

内容的提问来源于stack exchange,提问作者Николай Деменков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:05:00