本站解析器认识的全部标签,一页放完——按标签的用途分组,不按十六进制排序,另附裸看 TLV 的三条规则。
标签表要有用,前提是你能自己切出标签边界。三条规则覆盖 DE55 里的全部情况:
xxx1 1111,也就是 9F、5F、BF、DF 这批),标签延伸到下一字节。这就是为什么 9F26 是两字节标签,而 95 一个字节就完了。(后续标签字节最高位为 1 还能继续延伸——BER 允许三字节标签,只是 DE55 里遇不到。)00–7F 之间时,它本身就是长度;最高位置 1 时,低 7 位表示「后面几个字节才是真正的长度」:81 C8 是「长度在接下来 1 个字节里」= 200 字节,82 01 04 = 260 字节。长模板和发卡行脚本会碰到。0x20)标记构造型标签:值不是最终数据,而是又一串 TLV。77(0111 0111)是构造型,要往里展开;80(1000 0000)名字里带「模板」,按位看却是原始型。判断依据是标签字节,不是名字。实战一段——GENERATE AC 响应的最小片段 771082023D00950500000080009F3602004B:
| 字节 | 怎么读 |
|---|---|
77 10 | 标签 77:低 5 位 10111 不全为 1,单字节标签;第 6 位为 1,构造型。长度 10 = 内层还有 16 字节 TLV。 |
82 02 3D00 | 标签 82(AIP),2 字节:3D00。 |
95 05 0000008000 | 标签 95(TVR),5 字节:只置了一位——超过终端限额(floor limit)。 |
9F36 02 004B | 9F 低 5 位全 1 → 标签延续:9F36(ATC),2 字节:004B = 第 75 笔交易。 |
把这串字符贴进 EMV TLV 解析器,得到的就是同一套拆法:1 个顶层标签、共 4 个标签,AIP、TVR、ATC 全部拆出。整段 DE55 当然是贴工具更快——这一节的意义是让工具的输出不再像魔法。
按你实际查表的场景组织:这个标签属于交易的哪个环节。格式约定:b = 二进制,n = 数字(BCD),cn = 压缩数字(BCD,F 补位),an / ans = 字母数字(含特殊字符),模板 = 构造型,值本身还是 TLV。字节数指值的长度,标签和长度字节另算。
卡片和终端为了敲定「跑哪个应用」而交换的一切。AID 是 5–16 字节的注册标识:前 5 字节 RID 标识卡组,后面可选的 PIX 标识产品——比如 A0000000031010 是 Visa 的主借贷记应用(常见值见 AID 查询)。模板类标签是「包装纸」:展开它,读里面的标签。
| 标签 | 名称 | 字节 | 格式 | 一句话说明 |
|---|---|---|---|---|
6F | [模板]FCI 模板 | var | 模板 | SELECT 响应的外层模板,里面是 84 和 A5。 |
A5 | [模板]FCI 专有模板 | var | 模板 | FCI 的专有部分,内装 50、9F12、BF0C 等。 |
BF0C | [模板]FCI 发卡行自定义数据 | ≤222 | 模板 | FCI 里发卡行自定义数据的容器。 |
61 | [模板]应用模板 | var | 模板 | 支付目录中包住一条应用记录(AID+名称)的模板。 |
4F | 应用标识符 AID(卡片侧) | 5–16 | b | 选卡完成后卡片返回的应用标识,说明这笔交易跑在哪个芯片应用上。 |
9F06 | 应用标识符 AID(终端侧) | 5–16 | b | 终端侧记录的 AID,在 DE55 里告诉发卡行终端选中了哪个应用。 |
50 | 应用标签 | 1–16 | ans | 卡片提供的应用可读名称,常打印在签购单上。 |
9F12 | 应用优先名称 | 1–16 | ans | 应用首选显示名称,终端能显示时优先于标签 50。 |
84 | 专用文件名 DF Name | 5–16 | b | 被选中应用的专用文件名,支付应用中通常与 AID 相同。 |
9F0A | 应用选择注册专用数据 ASRPD | var | b | EMVCo 注册的应用选择附加数据,按注册条目解释。 |
70 | [模板]读记录响应模板 | ≤252 | 模板 | READ RECORD 从卡片文件读出的记录都包在这个模板里。 |
77 | [模板]响应报文模板格式 2 | var | 模板 | GPO / GENERATE AC 响应格式 2,值本身就是一串 TLV,照常展开。 |
80 | [模板]响应报文模板格式 1 | var | b | 响应格式 1:字段按固定顺序拼接、没有内层标签——名字带「模板」,其实是原始型。 |
E1 | [模板]私有模板 | var | 模板 | 私有模板,内部布局由定义方决定。 |
发卡行个人化时写进芯片的数据,每笔交易回来的都是同一批值。持卡人数据也在这一组——5A、57、5F20 等同于卡号,属于 PCI DSS 管辖范围:DE55 进日志、工单、截图之前,先打码。
| 标签 | 名称 | 字节 | 格式 | 一句话说明 |
|---|---|---|---|---|
5A | 应用主账号 PAN | ≤10 | cn | 芯片里存的主账号。持卡人数据,日志和工单里必须打码。 |
57 | 二磁道等效数据 | ≤19 | b | 二磁道等效数据:卡号+有效期+服务码。与 5A 同级的持卡人数据,同样要打码。 |
5F20 | 持卡人姓名 | 2–26 | ans | 个人化时写入卡片的持卡人姓名。 |
5F24 | 应用失效日期 | 3 | n 6 | 应用失效日期 YYMMDD,终端据此判断芯片应用是否过期。 |
5F25 | 应用生效日期 | 3 | n 6 | 应用生效日期,早于该日期交易会在 TVR 置位。 |
5F28 | 发卡行国家代码 | 2 | n 3 | 发卡行国家,ISO 3166 数字码。 |
5F34 | 应用主账号序列号 PSN | 1 | n 2 | 区分共用同一卡号的多张实体卡(补卡、附属卡)。 |
9F07 | 应用用途控制 AUC | 2 | b | 按位声明卡片允许的用途:境内/境外、消费、取现、ATM。 |
9F08 | 应用版本号(卡片) | 2 | b | 卡片个人化的应用版本号,与终端 9F09 不一致会在 TVR 置位。 |
9F0D | 发卡行行为码 – 缺省 IAC-Default | 5 | b | 发卡行策略位掩码,终端无法联机时与 TVR 比对决定是否脱机批准。 |
9F0E | 发卡行行为码 – 拒绝 IAC-Denial | 5 | b | 与 TVR 比对,命中即直接脱机拒绝,不再尝试联机。 |
9F0F | 发卡行行为码 – 联机 IAC-Online | 5 | b | 与 TVR 比对,命中则要求联机,交给发卡行决定。 |
9F42 | 应用货币代码 | 2 | n 3 | 卡片内部脱机金额所用的货币。 |
9F44 | 应用货币指数(小数位) | 1 | n 1 | 应用货币金额的小数位数。 |
9F53 | 连续脱机交易次数上限(国际) | 1 | — | 卡片风险管理参数,各卡组定义并不一致,使用前以对应卡组规范为准。 |
终端每笔现填的数据。卡片密文就是对这批字段计算的——所以 DE55 里会「重复」报文其他位置已有的信息(金额、货币、日期):DE55 里这份,才是芯片签过名的那份。
| 标签 | 名称 | 字节 | 格式 | 一句话说明 |
|---|---|---|---|---|
9F02 | 授权金额 | 6 | n 12 | 授权金额,应用密文就按它参与计算,是 DE55 的金额核心。 |
9F03 | 其他金额(如返现) | 6 | n 12 | 返现等附加金额,没有就是全零。 |
5F2A | 交易货币代码 | 2 | n 3 | 交易货币代码,ISO 4217 数字码,与 DE49 对应。 |
9A | 交易日期 YYMMDD | 3 | n 6 | 终端本地交易日期 YYMMDD。 |
9F21 | 交易时间 hhmmss | 3 | n 6 | 终端本地交易时间 HHMMSS。 |
9C | 交易类型 | 1 | n 2 | 交易类型,即处理码前两位(00 消费、01 取现、20 退货)。 |
9F39 | 服务点输入方式 POS Entry Mode | 1 | n 2 | 卡号进入终端的方式:05 接触芯片、07 非接、90 磁条。 |
9F15 | 商户类别码 MCC | 2 | n 4 | 受理商户的类别码,与 DE18 同一套编码。 |
9F16 | 商户标识 | 15 | ans | 终端里配置的商户标识。 |
9F1A | 终端国家代码 | 2 | n 3 | 终端所在国家,境内/跨境判断的依据。 |
9F1C | 终端标识 | 8 | an | 终端号,与外层 ISO 8583 报文的 DE41 对应。 |
9F1E | 接口设备序列号 IFD | 8 | an | 受理设备的出厂序列号。 |
9F4E | 商户名称与地址 | var | ans | 终端登记的商户名称与地址。 |
9F33 | 终端性能 Terminal Capabilities | 3 | b | 三字节位串:终端支持的读卡方式、CVM 与安全能力。 |
9F35 | 终端类型 | 1 | n 2 | 终端类型:有人值守/自助、能否联机、由谁运营。 |
9F40 | 附加终端性能 | 5 | b | 附加终端能力:支持哪些交易类型与输入输出方式。 |
9F09 | 应用版本号(终端) | 2 | b | 终端内核实现的应用版本号,与卡片 9F08 比对。 |
9F37 | 不可预知数 UN | 4 | b | 终端产生的随机数,保证每笔密文不可重放。 |
9F41 | 交易序列计数器 | 2–4 | n 4–8 | 终端自身的交易流水计数器。 |
DE55 存在的根本原因。请求里 9F26 装的是 ARQC,响应里 91 带回发卡行的 ARPC,其余标签为双方互验提供上下文。如果你是搜「ARQC 是什么」进来的:它是卡片请求联机授权时放在 9F26 里的 8 字节密文——完整展开见《ARQC、TC、AAC》。
| 标签 | 名称 | 字节 | 格式 | 一句话说明 |
|---|---|---|---|---|
9F26 | 应用密文 ARQC / TC / AAC | 8 | b | 卡片对交易数据计算的密文:请求联机时是 ARQC,批准是 TC,拒绝是 AAC。 |
9F27 | 密文信息数据 CID | 1 | b | 声明 9F26 里的密文是三者中的哪一种,另带 advice 标志位。 |
9F36 | 应用交易计数器 ATC | 2 | b | 每笔交易加一的计数器,跳号或重复是发卡行的克隆风控信号。 |
9F10 | 发卡行应用数据 IAD | ≤32 | b | 发卡行自定义数据块:CVN、密钥索引 DKI、卡片验证结果 CVR 都在里面。 |
91 | 发卡行认证数据 | 8–16 | b | 授权响应里带回的 ARPC,卡片据此确认批准确实来自发卡行。 |
8A | 授权响应码 | 2 | an | 送回卡片的授权响应码,与响应报文的 DE39 对应。 |
9F45 | 数据认证码 DAC | 2 | b | SDA 静态认证中被发卡行签名覆盖的数据认证码。 |
9F4C | IC 卡动态数 | 2–8 | b | DDA 动态认证中卡片每笔生成的动态数。 |
不逐位解码就是乱码、解开了却能回答大多数排查问题的四个标签,下一节逐个展开。
| 标签 | 名称 | 字节 | 格式 | 一句话说明 |
|---|---|---|---|---|
82 | 应用交互特征 AIP | 2 | b | 卡片能力声明,随 GPO 响应返回,先于一切校验。 |
95 | 终端验证结果 TVR | 5 | b | 终端逐位记下的异常与备注——排查拒付先看它。 |
9B | 交易状态信息 TSI | 2 | b | 这笔交易实际执行了哪些 EMV 功能。 |
9F34 | 持卡人验证结果 CVM Results | 3 | b | 实际执行了哪种持卡人验证、在什么条件下、结果如何。 |
发卡行远程管理卡片的通道:脚本命令搭授权响应下行,终端转交给芯片执行,9F5B 在之后的交易里把执行结果报回去。
| 标签 | 名称 | 字节 | 格式 | 一句话说明 |
|---|---|---|---|---|
71 | 发卡行脚本模板 1 | var | 模板 | 发卡行脚本命令,终端须在第二次 GENERATE AC 之前送给卡片。 |
72 | 发卡行脚本模板 2 | var | 模板 | 第二次 GENERATE AC 之后执行的脚本——解锁 PIN、重置计数器等卡片管理。 |
9F5B | 发卡行脚本执行结果 | var | b | 终端上报的脚本逐条执行结果,发卡行据此确认脚本是否生效。 |
解析器按最常见的用法给这三个标签起了名字,但它们不在 EMV 公开规范定义范围内——权威布局在各卡组自己的规范里。
| 标签 | 名称 | 字节 | 格式 | 一句话说明 |
|---|---|---|---|---|
9F63 | 产品标识信息 | var | — | 卡组自定义标签,不同网络含义不同,以对端规范为准。 |
9F6E | 形态因子指示 FFI / 第三方数据 | var | — | 不同卡组用法不同(形态因子 / 第三方数据),以所对接卡组的规范为准。 |
9F7C | 商户自定义数据 | var | — | 私有数据,含义由交易双方约定。 |
DE55 里有七个标签把含义压进单个比特位,外加一个纯计数器(ATC)。每个标签给三样东西:它回答什么问题、一个真实取值、逐位展开它的解码器。下面所有示例值都在对应工具里实际跑过——释义就是工具的输出,不是转述。
回答:「终端一路看到了什么异常?」交易开始时是 5 个全零字节;终端每遇到一个异常状况就置一位——脱机认证失败、CVM 问题、超限额触发、发卡行认证失败。记的是观察,不是裁决:某一位置位是否导致拒绝,要拿行为码(9F0D/0E/0F)比对之后才知道。示例:0400048000 解出三个置位——CDA 失败(字节 1·b3)、已输入联机 PIN(字节 3·b3)、交易超过终端限额(字节 4·b8)。一个真问题、一个中性事实、一个常规联机触发——典型的 TVR 配比。用 TVR 解析器解你手上的值;五字节位图全解见《TVR 各位含义》。
回答:「这张卡支持什么?」静态个人化数据,随 GPO 响应返回,先于一切校验:支持哪种脱机认证(SDA / DDA / CDA)、是否支持持卡人验证和发卡行认证、要不要跑终端风险管理。示例:3D00 声明了 DDA、持卡人验证、终端风险管理、发卡行认证、CDA——唯独没有 SDA。任何值可贴 AIP 解析器验证;AIP 与 TVR、TSI 的关系专门写在《AIP、TVR、TSI》。
回答:「哪些 EMV 功能实际跑过了?」有效位只有 6 个,全在字节 1,对应功能执行过就置位——不管执行结果如何。示例:F800 表示脱机数据认证、持卡人验证、卡片风险管理、发卡行认证、终端风险管理都执行了,发卡行脚本没有。「执行过」不等于「通过了」:裁决在 TVR 里。工具:TSI 解析器。
回答:「9F26 里装的是哪种密文?」最高两位定类型——00 AAC(拒绝)、01 TC(批准)、10 ARQC(要求联机)——低位是 advice 标志。示例:80 = ARQC,请求联机授权。工具:CID 解析器;三种密文的对比见《ARQC、TC、AAC》。
回答:「持卡人到底是怎么验证的?」三个字节:执行的验证方法、适用条件、结果。示例:410302 = IC 卡验证明文 PIN(41,失败允许落到下一条规则)、条件是终端支持该 CVM(03)、结果成功(02)。工具:CVM Results 解析器。
回答:「卡片希望按什么顺序尝试验证?」两个 4 字节金额(X 和 Y)加一串 2 字节规则,每条规则 = 方法+条件,从上往下试。示例:000003E800000000420344031E031F02 = X 为 1000、Y 为 0,四条规则——联机加密 PIN、IC 卡加密 PIN、签名、条件允许时免验证(No CVM)。位置说明:8E 是个人化在卡片记录里、终端选 CVM 时读取的——它不在上面 66 个标签里,因为它一般不进 DE55;进 DE55 的是结果,即 9F34。工具:CVM List 解析器;逐条规则的匹配逻辑见《CVM List》。
回答:「发卡行在跟自己说什么?」本节唯一没有公开位图的标签:EMV 只预留容器,内容由发卡行(按其卡组的模板)定义——通常包括密钥索引 DKI、密文版本号 CVN,以及卡片自己视角的验证结果 CVR。示例:06101203A40000 按常见的 Visa 式布局读出:长度 6、DKI 10、CVN 12(= 版本 18)、CVR 03A40000——但任何这样的拆分在对过 CVN 和卡组规范之前都只是启发式猜测,IAD 解析器也是这样标注的。背景:《IAD 标签 9F10》。
回答:「这颗芯片做过多少笔交易?」严格说不是位串——是大端序计数器,应用每开始一笔交易加一。示例:003C = 60。发卡行拿它和上次见到的 ATC 比:跳号正常(有脱机交易还没清算上来),但重复或倒退是强烈的克隆信号。工具:ATC 解析器;展开见《ATC》。
先看五个标签,再看其他。整串贴进 TLV 解析器,然后按序读:9F27(芯片的建议是什么)、9F26(背书它的密文)、95(终端看到了什么异常)、9F34(持卡人怎么验证的)、9F36(计数器,查克隆)。这五个能回答大多数工单的「发生了什么、正不正常」;其余是补充细节。
分清标签的流向。大多数标签在请求里。只出现在响应里的有三个:91(发卡行认证数据)、71 和 72(发卡行脚本)。请求 dump 里出现它们,说明 dump 标错了方向。反过来,9F5B(脚本执行结果)出现在下一笔请求里,汇报的是上一笔下发的脚本——这一笔的滞后经常把日志关联搞乱。
分清值是谁写的。值不对时,标签本身就告诉你该找谁。卡片个人化类标签(82、9F07、9F08、5F24、三个 IAC)只能改发卡行的卡片参数;终端配置类标签(9F1A、9F33、9F35、9F40、9F1C)指向收单侧或终端机具。终端国家代码是 0000,那是终端资产的 bug,不是卡的问题。
先展开模板,再数标签。dump 以 77 或 70 开头时,真正的数据在里面一层——把模板当不透明值的扫描只会报「1 个标签」然后什么都看不见。选卡数据里 6F/A5/BF0C 的嵌套同理。解析器会自动展开;手工走的话,套上面的规则三递归即可。
小心编码陷阱。DE55 是二进制 TLV,但外层报文可能是 ASCII 或 EBCDIC。如果标签字节看起来整体偏移了一个常量、或每隔一个字符都是 3,那是上游把 DE55 当文本转码过——该修的是提取环节,不是解析。十六进制查看器可以快速看出来。
本文覆盖的是有公开(EMV 规范级)定义的标签,外加上面明确标注的三个卡组自定义标签。再往外就是私有区,而关于私有区,诚实的回答比任何表都短:
DF、FF 开头的标签从编码上就是私有类——标签字节本身在说「含义由上下文定义」。常被搜的 DF60 是个好例子:不同内核、厂商、卡组各自给它派了用途,公开规范层面没有统一答案。唯一正确的读法,是查产生这条报文的系统自己的规范。9F50–9F7F 的大部分区间由各卡组自行分配,不归 EMV 公开规范管。同一个标签号在不同网络上可以是完全不同的东西——这正是上表给 9F53、9F63 挂「以卡组规范为准」而不是硬给一句释义的原因。给私有标签编含义的标签表比没有表更糟:恰恰在它猜测的地方显得最权威。遇到不认识的 DFxx,正确动作是确认报文出自哪个系统,找它要标签字典。