Disclosure: As an Amazon Associate, CardWise earns from qualifying purchases at no additional cost to you. This does not affect our recommendations.
How to Identify NFC Tag Types — ATQA, SAK & ATS Complete Detection Guide
When an NFC reader detects a tag, it receives anti-collision bytes that identify the chip before any NDEF data is read. The combination of ATQA (Answer to Request), SAK (Select Acknowledge), and ATS (Answer to Select) uniquely fingerprint the tag's manufacturer, chip model, and capabilities. This guide maps every common combination.
1. The ISO 14443-3 Anti-Collision Exchange
READER TAG │ │ │──── REQA (0x26) ────────────→│ "Who's there?" │←──── ATQA (2 bytes) ────────│ "I'm here, here's my type info" │ │ │──── ANTICOLLISION (SELECT) ─→│ "Tell me your UID" │←──── UID (4/7/10 bytes) ────│ "Here's my serial number" │ │ │──── SELECT (UID) ───────────→│ "I'm talking to YOU" │←──── SAK (1 byte) ──────────│ "Selected. Here's what I am" │ │ │──── RATS ───────────────────→│ (ISO 14443-4 only) │←──── ATS ───────────────────│ "Here's my protocol capabilities"
2. ATQA — Answer to Request, Type A
ATQA is 2 bytes (16 bits). Bit 8 of each byte indicates UID size. The remaining bits encode the chip platform:
| ATQA (hex) | Chip Family | UID Size | Notes |
|---|---|---|---|
| 00 04 | MIFARE Ultralight / NTAG 21x | 7 bytes (NUID) | NXP Type 2 Tag platform |
| 00 44 | MIFARE Ultralight / NTAG 21x | 7 bytes | Same chip, different cascade level |
| 00 01 | MIFARE Classic 1K / Classic Mini | 4 bytes | Legacy 4-byte UID |
| 00 02 | MIFARE Classic 1K / Classic Mini | 7 bytes | Random ID on some readers |
| 00 08 | MIFARE Classic 1K | 4 bytes | Most common Classic 1K ATQA |
| 00 18 | MIFARE Classic 4K | 4 bytes | Same family, more sectors |
| 03 44 | MIFARE DESFire (EV1/EV2/EV3) | 7 bytes | ISO 14443-4 (Type 4) |
| 03 01 | MIFARE DESFire EV0 (legacy) | 7 bytes | Rare; EV3 is current |
3. SAK — Select Acknowledge Decode
SAK is 1 byte with critical identification bits:
SAK bit meanings (from ISO 14443-3): Bit 6: ISO 14443-4 compliant (ATS response available) Bit 5: NFC Forum Tag Platform compliant Bit 4: UID complete (cascade bit) Bit 3: Anti-collision complete # The key bit is bit 6: # SAK bit 6 = 1 → card speaks ISO 14443-4 (APDUs, RATS, ATS) # SAK bit 6 = 0 → card is MIFARE Classic/Ultralight (proprietary protocol)
| SAK | Chip | ISO 14443-4 | NFC Forum | Notes |
|---|---|---|---|---|
| 0x08 | MIFARE Classic 1K | No | No | Proprietary CRYPTO1 protocol |
| 0x18 | MIFARE Classic 4K | No | No | Same family, 4K sectors |
| 0x00 | MIFARE Ultralight / NTAG 21x | No | Yes | NFC Forum Type 2 compliant |
| 0x20 | MIFARE DESFire / NTAG 4xx / JCOP | Yes | No | Card speaks APDU after RATS |
| 0x28 | MIFARE Plus (SL1→SL3) | Yes | No | Backward compatible with Classic |
4. ATS — Answer to Select (ISO 14443-4 Cards)
If SAK bit 6 = 1, the reader sends RATS and the card responds with ATS. This provides more detail:
ATS structure: [TL] [T0] [TA(1)] [TB(1)] [TC(1)] [Historical bytes (T1-Tk)] [CRC] # Common ATS for DESFire EV3: # 06 75 77 81 02 80 → TL=6, T0=75 (TA1+TB1+TC1 present, FSCI=5) # TA1=77 (DRI=7, DSI=7 — fastest rates) # TB1=81 (FWI=8, SFGI=1) # TC1=02 (CID supported, NAD not supported) # Common ATS for NTAG 424 DNA: # 08 78 77 71 02 ... longer ATS with historical bytes
5. Quick Identification Table
| ATQA | SAK | Chip | NFC Forum Type |
|---|---|---|---|
| 00 04 / 00 44 | 0x00 | NTAG 213/215/216, Ultralight | Type 2 |
| 00 08 | 0x08 | MIFARE Classic 1K (NXP original) | Not compliant |
| 00 18 | 0x18 | MIFARE Classic 4K | Not compliant |
| 03 44 | 0x20 | MIFARE DESFire EV1/EV2/EV3 | Type 4 |
| 03 04 | 0x20 | MIFARE Plus (SL3) | Type 4 |
| 0C 00 | 0x20 | FeliCa Lite (212/424 kbps) | Type 3 |
| - | - | ISO 15693 (ICODE, ST25TV) | Type 5 |
6. Python Detection Script
def identify_tag(atqa, sak, uid):
"""Identify NFC tag chip from ATQA, SAK, UID."""
atqa_int = (atqa[1] << 8) | atqa[0]
if sak == 0x00 and atqa_int in (0x0004, 0x0044):
return 'NTAG 21x / MIFARE Ultralight (Type 2)'
elif sak == 0x08:
if atqa_int == 0x0008:
return 'MIFARE Classic 1K'
else:
return f'MIFARE Classic (ATQA=0x{atqa_int:04X})'
elif sak == 0x18:
return 'MIFARE Classic 4K'
elif sak == 0x20:
if atqa_int == 0x0344:
return 'MIFARE DESFire EV1/EV2/EV3 (Type 4)'
else:
return f'ISO 14443-4 Card (ATQA=0x{atqa_int:04X})'
return f'Unknown tag: ATQA=0x{atqa_int:04X}, SAK=0x{sak:02X}'
Identifying NFC tags is easier with real tags in hand. The NTAG215 sticker pack (50 tags for ~$7) is a cheap way to start experimenting — Check Price on Amazon. If you want something more wearable, the Apple AirTag uses a customized NXP NFC chip and is great for seeing how consumer NFC works — Check Price on Amazon. For a hands-on smart ring experience, try the NTAG216 Ceramic Smart Ring — it's a Type 2 tag you wear on your finger — Check Price on Amazon.
Related Tools
NFC Tag Type Detector — Identify tags from ATQA/SAK/UID | NFC Capacity Calculator — Check NDEF capacity | NFC Tag Selection Guide — Choose the right tag | NTAG 213 vs 215 vs 216