Service Code and L2 common Kernel

What matters is that first digit of that service code. The "2" means there is an ICC chip. Also a "6" means there is an icc chip.

When you are doing an emv transaction, and swipe a card, the kernel will check this, and if it sees a "2" or "6" on the service code, it will "MSG_USE_CHIP_READER".

The only way the kernel will allow you to capture track data is if it could not read the ICC chip as a first attempt, then it will tell you to USE_MAGSTRIP, but this time it won't check the service code.

If you start your transaction as MSR swipe, and you want to know the service code, if your unit is unencrypted, you can evaluate track 2. But if your unit is encrypted, that data may be masked. In both cases, we expose a flag in the data that is being returned "ICC PRESENT", which is our firmware telling you it found a "2" or "6" on the service code before it masked it.

For EMV transaction, if you want to know the service code, you evaluate tag 5F30

See also:

Fall back flow with L2 common Kernel

Credit Card Service Code Chart

80000502-001 ID TECH Encrypted Data Output Formats

EMV Transactions with Universal SDK