同一台 POS 机、同一张卡:上一笔弹出密码键盘,下一笔什么都不问直接过。这不是终端心情好,也不是收银员按错了键。卡片里存着一张排好序的验证方法列表 —— CVM List,EMV 标签 8E,终端只是从第一条开始逐条往下试,试中哪条算哪条。方法码、条件码的对照表当然要查,但你在机器前看到的行为来自遍历过程本身 —— 这篇就把这个过程一步步拆开。
这是一个你会在卡片参数或 DE55 里遇到的 CVM List:000003E8000000001F0642031E031F02。把它贴进 CVM List 解析工具,会得到两个金额加四条规则:
1F 06:无需 CVM,条件是「应用货币下金额小于 X」42 03:联机验证加密 PIN,条件是「终端支持该 CVM」,失败后继续下一条1E 03:纸质签名,条件是「终端支持该 CVM」,失败即持卡人验证失败1F 02:无需 CVM,条件是「非无人值守取现、非人工取现、非消费加提现」标题那个问题的答案已经写在这十六个字节里了:两位小数的货币下 X = 1000 就是 10.00 —— 低于它,规则 1 命中,谁也不会被问任何东西;高于它,规则 1 条件不成立,轮到规则 2,密码键盘亮起来。下面把终端怎么走出这个结果拆开讲,建议把解析工具开在旁边对照。
标签 8E 是「固定头部 + 重复体」的结构。前 4 字节是金额 X,接着 4 字节是金额 Y —— 注意是纯二进制整数(不是 BCD),单位是应用货币的最小单位,所以 000003E8 是 1000,按两位小数就是 10.00。这两个金额自己什么都不做,它们存在的意义是给「低于 X」「高于 Y」这类条件当参照物。第 8 字节之后全是规则,每条恰好 2 字节:
02 联机加密 PIN、1E 签名、1F 无需 CVM……)。b7 是「失败后继续」标志:置 1,这条试败了就顺延到下一条;置 0,试败即整个持卡人验证宣告失败。42 和 02 的区别只在这一位。b8 保留,应为 0。00)、终端支持该方法时(03)、人工取现(04)、消费加提现(05),或与 X、Y 比较金额(06–09)。这个布局解释了一种经典的解析事故:把完整的 8E 当成纯规则串去解,头 8 个字节就会被硬拆成四条「规则」—— 一排不可能存在的 00 00;反过来,有些日志只存规则部分,拿去按完整结构解又会把第一条规则当成金额。看到解出来开头连续几条说不通的规则,八成是把金额当规则解了。
选择过程是一个朴素的循环:从上往下,先命中先得。对每一条规则:
9F33)。不支持或不认识的方法,按尝试失败处理。9F34)。失败则看方法字节的 b7:置 1,取下一条;置 0,持卡人验证就地失败,原因记进 TVR 字节 3。还要分清:验证失败不等于交易被拒。失败只是作为观察结果写进 TVR 字节 3,随后由终端行为码和发卡行行为码(TAC/IAC)决定这条观察是直接拒绝、强制联机还是放行。很多偏好签名的卡每天都带着「验证未成功」类的置位正常完成交易。
拿开头那个值,走四个日常场景:
1F0602。420300 —— 结果位「未知」,验证由发卡行完成。42,b7 置 1,于是顺延到规则 3,小票上多出一条签名栏。假如发卡行当年写的是 02 03,同样一次取消就会让验证当场失败 —— 一个比特,柜台前完全两种体验。03「终端支持该 CVM」——既没键盘也没签名条的机器两条都不满足,全部无声跳过。规则 4 兜底:这是普通消费,无需 CVM,完成。同一张卡、同样十六个字节、四种结局 —— 只要把这张表当程序读而不是当对照表背,每一种都推得出来。
8E 只说明可能发生什么,证明不了某一笔交易里发生了什么。实际结果在 CVM Results,标签 9F34 里 —— 三个字节:实际应用的 CVM 码、当时命中的条件码、结果码(00 未知、01 失败、02 成功;第 1 字节为 3F 表示根本没执行任何 CVM)。这一串标签都可以在 EMV 标签查询里对着看。一句话记:8E 是候选名单,9F34 是开票结果,两者回答的不是同一个问题。
这个区分能直接了结一类常见争议。拒付进来:小票上印着 "PIN VERIFIED",持卡人咬定自己从没输过密码。小票那行字是终端应用按模板打的,不算证据;证据在 DE55。如果 9F34 是 1F0602 —— 命中的是我们列表里的规则 1,持卡人说的是对的:金额低于 X,PIN 从头到尾没被要求过。如果 9F34 是 420300,PIN 确实被采集并联机上送了 —— 还能交叉验证:那笔 0100 里带着 DE52 的 PIN 块,TVR 字节 3 的「已输入联机 PIN」也置了位。
收单侧排查同理。商户反馈某台终端从来不弹 PIN:把卡的 8E 和终端的 9F33 摆在一起看。若终端能力里没申报支持联机加密 PIN,规则 2 的条件永远不成立,每一笔都滑向签名那条,9F34 永远是 1E03… 开头。卡在一丝不苟地执行自己的策略,该改的是终端参数,不是换卡。