ISO 8583 Parser
免费 · 字段速查 · 6 分钟 · 最后更新 2026-08-12

CVV / CVV2 / iCVV / dCVV:分别在报文的哪个域?

CVV / CVC 就是卡片安全码:由发卡行生成、也只有发卡行能校验的一个校验值,用来证明卡数据是真的。Visa 叫 CVV,Mastercard 叫 CVC,一回事。做报文的人容易踩的坑在后面:有四个不同的值都顶着这个名字,而它们在 ISO 8583 报文里的位置各不相同。把每个变体对到它所在的域,才看得清一笔交易带的到底是哪一个,也才解释得了日志里两条「track 2」为什么对不上。

CVV、CVV2、iCVV、dCVV 分别在哪个域?

名称在卡上的哪里在 ISO 8583 报文的哪里谁校验
CVV / CVC
(磁道 CVV,即「CVV1」)
写在磁条里,藏在磁道的自定义数据区(discretionary data)DE 35(Track 2 Data)/ DE 45(Track 1 Data)发卡行
CVV2 / CVC2
(Amex 叫 CID)
印在卡面——背面 3 位(Amex 正面 4 位),不写进任何磁道附加数据域里由卡组织自定义的子域。具体哪个域、哪个子域各家不同,以你对端的接口规范为准发卡行
iCVV在芯片里,藏在二磁道等效数据(EMV tag 57)中通常在 DE 55(ICC / EMV 数据)里,即 tag 57发卡行
dCVV
(Mastercard 叫 CVC3)
哪儿都没有——非接磁条模式(MSD,现已基本淘汰)下由卡片每次挥卡现算随这笔交易的 track 2 数据走,落点和刷卡一样是 DE 35,只是值每笔都变发卡行

注意最后一列的共同点:四个值全部只有发卡行能校验。收单、网关、转接方只负责把值放到报文里正确的位置。所以生产上大多数「CVV 问题」追到最后都是搬运问题——值放错了域,或者出现在了一笔根本不该带它的交易里。

iCVV 为什么和磁道 CVV 不一样?

芯片里的二磁道等效数据(tag 57)长得和磁条 track 2 几乎一样:同样的卡号、有效期、服务码。但自定义数据区里那个校验值是另一个数——iCVV——这是设计出来的差异。

假如有人把芯片里的 tag 57 读出来,写到一张白卡的磁条上拿去刷:这张伪卡送上来的是 iCVV,而发卡行对刷卡交易验的是磁道 CVV,校验必然失败,交易被拒。一个通道一个值,从一个通道偷到的数据没法拿去冒充另一个通道——这是 EMV 防「芯片数据降级复制成磁条卡」的关键一环。

日志里为什么会出现两个不同的 track 2?

一笔芯片交易的报文里,track 2 形状的数据可能出现两次:一次在 DE 35(Track 2 Data),一次在 DE 55 里的 tag 57(二磁道等效数据)。卡号、有效期一致,末尾的自定义数据区却对不上,这就是上一节那个机制:一边带的是磁道 CVV,一边带的是 iCVV。

想亲眼确认,把 DE 55 的十六进制贴进 EMV TLV 解析器,拿 tag 57 和 DE 35 对一下;或者整条报文直接丢进主解析器。DE 35 / DE 45 / DE 55 的格式细节见字段速查,完整报文里的样子见报文实例

持卡人没输错,为什么 CVV2 还是校验失败?

经典工单:小票或主机日志显示 CVV2 校验失败,持卡人坚持卡面上那几位数一个字没错。先别急着归因「输错了」,按这个顺序过一遍:

  1. 这笔交易本来该带 CVV2 吗?CVV2 属于卡不在场的场景(网购、MOTO)。芯片和非接的卡在场交易靠芯片密文认证,跟卡面印的码没关系——看一眼 DE 22(输入方式)和 DE 55 在不在。如果一笔芯片交易的报文里冒出了 CVV2 相关指示,先怀疑终端或网关的集成,而不是持卡人的手。
  2. 值放对子域了吗?CVV2 走附加数据域里卡组织自定义的子域,各家的布局互不通用。码是对的但放错了子域,或者中途被填充、转码、截断,到发卡行那边都是「不匹配」。对照的应该是你对端的接口规范,别拿另一家网络的文档套。
  3. 你读的是校验结果吗?CVV2 的校验结果通常是响应里一个独立的指示位,和「批不批准」分开返回。完全可能出现交易批准了、但 CVV2 没匹配上——发卡行放行了,接不接受这个风险是商户自己的策略。校验失败会不会同时映射到某个 DE 39 响应码、映射到哪个,也是各家不同:拿你接口的码去 DE39 响应码查询里对。

PCI DSS 规定授权完成后 CVV2 还能保留吗?

PCI DSS 明确规定:授权完成后不得保留卡片验证码。加密存也不行,任何形式都不能留——请求日志、数据库字段、崩溃转储、贴在工单里的截图,全算。CVV2 存在的意义就是在交易那一刻证明「卡在手上」,没有任何正当理由需要持久化它。

同一条规则也罩着完整磁道数据——DE 35、DE 45,以及芯片里的 tag 57,它们同属敏感认证数据。实践中出问题的很少是数据库表结构,而是没脱敏的请求/响应日志:确认脱敏发生在报文进日志管道之前

剩下的麻烦是:要确认脱敏真的生效,总得有人至少看一次没脱敏的那行。本站所有解析都在你自己的浏览器里跑、什么都不上传——但这件事你没法在一个浏览器标签页里向安全评审证明,于是实际发生的往往是照着截图把字段一个个敲进去。离线版就是同一个解析器,以文件形式放在你自己的磁盘上,差别只在这一点上。

一句话记住:四个名字,一个校验方——全归发卡行。不同的只是地址:磁道 CVV 在 DE 35 / DE 45,iCVV 在 DE 55 的 tag 57,CVV2 走卡组织自定义的附加数据子域。日志里两条 track 2 末尾对不上?那正是 iCVV 在干活。

👉 相关:ISO 8583 字段速查(DE 35 / 45 / 55)、EMV 标签参考(tag 57)。

延伸阅读