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

使用ISODEP与APDU命令读取德国Sparkasse Girocard数据遇错求助

读取德国Sparkasse Girocard数据的问题解决

错误码6F44的原因

状态码6F44表示选择的应用不存在,核心问题是你使用的AID不正确。Sparkasse的Girocard属于EMV标准借记卡,不同应用(GIROcard、Visa Debit、Mastercard Debit)对应不同AID,你之前使用的D27600002547410100是旧版GIROcard的AID,当前主流卡片已更新为新版AID。

修正SELECT命令的AID

尝试以下几个Sparkasse Girocard常用的AID:

  • GIROcard官方AID:D27600002547410200
  • Visa Debit AID:A0000000031010
  • Mastercard Debit AID:A0000000041010

修正后的SELECT命令示例(以GIROcard AID为例):

byte[] SELECT = { 
    (byte) 0x00, // CLA 指令类别
    (byte) 0xA4, // INS 选择应用指令
    (byte) 0x04, // P1 按AID选择
    (byte) 0x00, // P2 无附加限定
    (byte) 0x09, // Lc AID长度
    (byte) 0xD2,0x76,0x00,0x00,0x25,0x47,0x41,0x02,0x00, // 新版GIROcard AID
    (byte) 0x00 // Le 请求返回所有数据
};

成功选择应用后的后续命令

当SELECT命令返回9000后,按以下步骤获取卡片数据:

  1. 获取处理选项(GET PROCESSING OPTIONS)
    初始化应用并获取后续操作所需参数:
    byte[] GET_PO = {
        (byte) 0x80, // CLA
        (byte) 0xA8, // INS
        (byte) 0x00, // P1
        (byte) 0x00, // P2
        (byte) 0x02, // Lc
        (byte) 0x83,0x00, // 数据域:请求所有可选数据
        (byte) 0x00 // Le
    };
    byte[] poResult = tag.transceive(GET_PO);
    
  2. 读取卡片记录(READ RECORD)
    读取账户信息、交易记录等数据,示例读取SFI(短文件标识符)为1的第一条记录:
    byte[] READ_RECORD = {
        (byte) 0x00, // CLA
        (byte) 0xB2, // INS 读取记录指令
        (byte) 0x01, // P1 记录号
        (byte) 0x0C, // P2 SFI=1,返回完整记录
        (byte) 0x00 // Le
    };
    byte[] recordResult = tag.transceive(READ_RECORD);
    

进阶排查:获取所有可用应用列表

如果上述AID都无法返回9000,可以发送空AID选择命令,让卡片返回所有支持的应用AID列表,再从中选择正确的:

byte[] SELECT_ALL = {
    (byte) 0x00,
    (byte) 0xA4,
    (byte) 0x04,
    (byte) 0x00,
    (byte) 0x00, // Lc=0,不指定AID
    (byte) 0x00
};
byte[] appList = tag.transceive(SELECT_ALL);

解析返回的数据,提取每个应用的AID字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:15:29