ISO 8583 Parser
Free Β· Field reference Β· 6 min Β· Updated 2026-08-12

CVV vs CVV2 vs iCVV vs dCVV: Which ISO 8583 Field Carries Which

CVV / CVC is the card security code β€” a check value the issuer generates and verifies to prove the card data is genuine. Visa calls it CVV, Mastercard calls it CVC; same concept. The catch for anyone reading authorization messages: four different values share that name, and each one travels in a different part of the ISO 8583 message. Match each variant to its field and you can tell which value a given transaction actually carried β€” and why two "track 2s" in the same log legitimately disagree.

Which ISO 8583 field carries CVV, CVV2, iCVV and dCVV?

NameOn the cardIn the ISO 8583 messageVerified by
CVV / CVC
(track CVV, "CVV1")
Encoded in the magstripe, inside the track's discretionary dataDE 35 (Track 2 Data) / DE 45 (Track 1 Data)Issuer
CVV2 / CVC2
(Amex: CID)
Printed on the card β€” 3 digits on the back (Amex: 4 on the front). Not encoded in any track.A scheme-defined subfield of an additional data element. Which element and which subfield differ per network β€” check your endpoint's interface spec.Issuer
iCVVIn the chip, inside Track 2 Equivalent Data (EMV tag 57)Usually inside DE 55 (ICC / EMV Data), as tag 57Issuer
dCVV
(Mastercard: CVC3)
Nowhere β€” computed fresh by the card for each tap in contactless magstripe mode (MSD, largely legacy)Rides in the track 2 data of the tap, so it arrives where a swipe would: DE 35 β€” but the value changes every transactionIssuer

Note what the last column has in common: only the issuer can verify any of them. Acquirers, gateways and switches just carry the value to the right place in the message. That is why most CVV-related production issues turn out to be transport problems β€” the value ended up in the wrong field, or in a transaction type that should not carry it at all.

Why is iCVV different from the magstripe track CVV?

The chip's Track 2 Equivalent Data (tag 57) looks almost identical to the magstripe's track 2: same PAN, same expiry, same service code. The check value inside the discretionary data, however, is a different number β€” the iCVV β€” and that is deliberate.

If someone dumps tag 57 from a chip and writes it onto a blank magstripe card, the counterfeit swipe presents an iCVV where the issuer expects a track CVV. The check fails and the transaction declines. One value per channel means data stolen from one channel cannot be replayed on another β€” this is a core piece of EMV's defense against chip-to-magstripe cloning.

Why does my log show two different track 2 values?

A chip transaction can contain track-2-shaped data twice: in DE 35 (Track 2 Data) and inside DE 55 as tag 57 (Track 2 Equivalent Data). PAN and expiry match; the discretionary data at the end does not. That is not corruption and not a terminal bug β€” it is the previous section in action: one carries a track CVV, the other carries an iCVV, and they are supposed to differ.

To see it yourself, paste the DE 55 hex into the EMV TLV parser and compare tag 57 against DE 35, or drop the whole message into the main parser. The field guide covers DE 35 / DE 45 / DE 55 formats in detail, and the message examples show them in full messages.

Why does CVV2 fail when the cardholder typed it correctly?

A classic ticket: the receipt or host log shows a CVV2 verification failure, the cardholder insists the printed code was entered exactly. Before assuming a mistyped code, walk this list:

  1. Should this transaction carry a CVV2 at all? CVV2 belongs to card-not-present flows (e-commerce, MOTO). A chip or contactless card-present transaction is authenticated by the chip's cryptogram, not by the printed code β€” check DE 22 (POS entry mode) and whether DE 55 is present. If a CVV2 indicator appears on a chip transaction, suspect the terminal or gateway integration, not the cardholder.
  2. Is the value in the right subfield? CVV2 travels in a scheme-defined subfield of an additional data element, and every network lays this out differently. A correct code placed in the wrong subfield β€” or padded, re-encoded, or truncated on the way β€” verifies as a mismatch. Compare your outgoing message against your endpoint's spec, not against another network's documentation.
  3. Are you reading the right result? The CVV2 verification result usually returns as its own indicator, separate from the approval decision. A transaction can be approved with a failed CVV2 match β€” the issuer allowed it, and accepting that risk is the merchant's policy call. Whether a CVV2 failure also maps to a distinct DE 39 value (and which one) differs per scheme; look up your interface's codes in the DE39 lookup.

Can you store CVV2 after authorization under PCI DSS?

PCI DSS forbids storing the card verification code after authorization β€” not "encrypt it carefully": do not retain it at all, in any form. That includes request logs, database columns, crash dumps and screenshots pasted into tickets. CVV2 exists purely to prove possession at the moment of the transaction; there is no legitimate reason to persist it.

The same rule covers full track data β€” DE 35, DE 45, and the chip's tag 57 β€” which is sensitive authentication data too. In practice the database schema is rarely the problem; unredacted request/response logging is. Check that masking happens before the message hits your log pipeline.

Which leaves the awkward part: to confirm the masking works, someone has to look at an unmasked line at least once. Everything on this site parses in your browser and nothing is uploaded β€” but that is not something you can demonstrate to a security reviewer from inside a browser tab, so what happens instead is people retype fields off a screenshot. The offline edition is the same parser as a file on your disk, for when that is the difference that matters.

Remember: four names, one verifier β€” the issuer checks all of them. What differs is the address: DE 35 / DE 45 for the track CVV, DE 55 tag 57 for iCVV, a scheme-defined additional data subfield for CVV2. And when two track 2s in one log disagree in their last few digits, that is iCVV doing its job.

πŸ‘‰ Related: ISO 8583 field guide (DE 35 / 45 / 55), EMV tag reference (tag 57).

Read next