如何通过ATR从Springcard读卡器识别CTS/CD_97/ISO_A/ISO_B/FRD卡类型?
Got it, let’s break down exactly how to identify those card types (CTS, CD_97, ISO_A, ISO_B, FRD) from their ATRs. First, a quick refresher: an ATR (Answer To Reset) is the sequence of bytes a smart card sends when powered on, packed with details about its protocol, system, and capabilities.
Before diving into specific card types, let’s cover the key parts of an ATR you’ll need to analyze:
- TS (Initial Character): The first byte, tells you the communication mode (e.g.,
0x3B= asynchronous half-duplex, the most common for your examples). - T0 (Format Byte): Second byte, splits into two 4-bit segments:
- High 4 bits: Number of interface bytes (TA1, TB1, TC1, TD1) to expect.
- Low 4 bits: Length of the historical bytes (the payload with card-specific info).
- TDx (Interface Bytes): These define the card’s protocol (ISO A/B) and whether more interface bytes follow. The lower 4 bits of a TD byte indicate the protocol:
0x0= ISO/IEC 7816-4 Type A0x1= ISO/IEC 7816-4 Type B
- Historical Bytes: The main payload where card system identifiers (like Calypso or Navigo markers) live.
- TCK (Checksum Byte): Final byte, validates the ATR’s integrity.
Let’s map each card type to concrete checks you can run against an ATR:
ISO A (ISO/IEC 7816-4 Type A)
- Checks:
- TS byte is
0x3B(asynchronous mode). - The relevant TD byte (usually TD1) has a lower 4-bit value of
0x0.
- TS byte is
- All your provided examples are ISO A cards—we’ll confirm this in the breakdowns below.
ISO B (ISO/IEC 7816-4 Type B)
- Checks:
- TS byte is either
0x3F(synchronous mode) or0x3B. - The relevant TD byte has a lower 4-bit value of
0x1.
- TS byte is either
- None of your examples fit this, but it’s a quick check for future cards.
CTS (Calypso Transport System)
Calypso is a common transit card system (used by Técély and Oura in your examples), and it runs on ISO A.
- Checks:
- First confirm the card is ISO A.
- Look for
0x5Ain the historical bytes—this is the unique identifier for Calypso’s dedicated file (DF). - You’ll often see additional Calypso markers like
0x0A 0x01(version info) right after the0x5A.
FRD (French Réseau de Déplacement, e.g., Navigo)
FRD covers French transit cards like Navigo, also on ISO A.
- Checks:
- Confirm ISO A protocol.
- Look for
0x71in the historical bytes—this is a specific marker for Navigo/FRD network cards.
CD_97
CD_97 typically refers to French debit cards following the 1997 Carte Bleue standard, which uses EMV identifiers in its ATR.
- Checks:
- Confirm ISO A protocol.
- Look for the EMV application template tag
0x4Fin the historical bytes, followed by an AID (Application Identifier) matching CD_97’s specific sequence (like theA0 00 00 03 ...sequence in your Citycard example).
Let’s apply these rules to your provided ATRs:
Navigo: 3B 88 80 01 00 00 00 00 00 71 81 00 F9
- Identified Type: ISO A + FRD
- Step-by-Step:
- TS=
0x3B→ asynchronous mode. - T0=
0x88→ 1 interface byte (TD1), 8 historical bytes. - TD1=
0x80→ lower 4 bits=0x0→ ISO A protocol. - Historical bytes:
01 00 00 00 00 71 81 00→ contains0x71→ FRD/Navigo marker. - TCK=
0xF9→ valid checksum.
- TS=
Técély: 3B 8F 80 01 80 5A 0A 01 01 20 03 11 10 1D 86 BC 82 90 00 C9
- Identified Type: ISO A + CTS (Calypso)
- Step-by-Step:
- TS=
0x3B→ asynchronous mode. - T0=
0x8F→ 1 interface byte (TD1), 15 historical bytes. - TD1=
0x80→ lower 4 bits=0x0→ ISO A protocol. - Historical bytes:
80 5A 0A 01 01 20 03 11 10 1D 86 BC 82 90 00→ contains0x5A+0x0A 0x01→ Calypso/CTS marker. - TCK=
0xC9→ valid checksum.
- TS=
Oura: 3B 8F 80 01 80 5A 0A 01 02 20 03 11 03 53 52 A2 82 90 00 5D
- Identified Type: ISO A + CTS (Calypso)
- Step-by-Step:
- Same ISO A confirmation as Técély.
- Historical bytes start with
0x5A→ clear Calypso/CTS marker.
Citycard: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 02 00 00 00 00 69
- Identified Type: ISO A + CD_97
- Step-by-Step:
- TS=
0x3B, TD1=0x80→ ISO A protocol. - Historical bytes:
80 4F 0C A0 00 00 03 06 03 00 02 00 00 00 00→0x4Fis the EMV application template tag, followed by the CD_97-specific AIDA0 00 00 03 .... - TCK=
0x69→ valid checksum.
- TS=
内容的提问来源于stack exchange,提问作者haythem souissi

