CVM List 是卡片定的验证策略:在什么条件下先试哪种验证,失败了是换下一条还是就此作罢。把 tag 8E 贴进来,按有序规则读,而不是数十六进制对。
完整的 tag 8E 以两个 4 字节二进制金额开头——X 和 Y,以应用货币计。它们是给条件码用的:规则可以限定「金额小于 X 时」「大于 Y 时」适用,卡片就是这样表达「50 以下免验证、以上要 PIN」的。金额之后才是规则,每条 2 字节:一个方法字节加一个条件字节。
这对粘贴很要紧:把完整 tag 当规则解,前四条「规则」其实是金额的碎片——通常是一串不可能出现的 00 00。本工具对 ≥10 字节的输入按标准结构解析,更短的偶数长度按裸规则处理,并明确告诉你按哪种解的。
| 码(b6–b1) | 验证方法 |
|---|---|
00 | CVM 处理失败 |
01 | IC 卡验证明文 PIN |
02 | 联机验证加密 PIN |
03 | IC 卡验证明文 PIN + 纸质签名 |
04 | IC 卡验证加密 PIN |
05 | IC 卡验证加密 PIN + 纸质签名 |
1E | 纸质签名 |
1F | 无需持卡人验证 |
| 条件码 | 规则在什么情况下适用 |
|---|---|
00 | 无条件 |
01 | 无人值守取现 |
02 | 非无人值守取现、非人工取现、非消费加提现 |
03 | 终端支持该 CVM |
04 | 人工取现 |
05 | 消费加提现 |
06 | 应用货币下金额小于 X |
07 | 应用货币下金额大于 X |
08 | 应用货币下金额小于 Y |
09 | 应用货币下金额大于 Y |
从上到下,第一条命中即生效。一条规则被尝试的前提是条件满足、且终端支持该方法(终端能力,tag 9F33)。方法字节的 b7 决定失败意味着什么:置位则换下一条继续,未置位则持卡人验证当场失败。42 和 02 都是「联机加密 PIN」,区别只在 PIN 取不到时接下来发生什么。
实际发生了什么记录在 CVM Results(tag 9F34:最终用了哪条规则、结果如何),并汇总进 TVR 字节 3。那两个才是结果;这里的列表只是策略。
「为什么要签名不要 PIN?」——顺着表走一遍:PIN 那条的条件没满足(金额低于 X,或终端上报没有 PIN pad),于是轮到下一条。「小额非接为什么不弹 PIN?」——有一条限定金额小于 X 的 1F(免验证)。「为什么在验证环节直接挂了?」——某条 b7 未置位的规则失败了,走表到此为止。这张表加 9F34,三个问题都不用猜。