Mode S CRC checker
Paste a frame and see the CRC-24 residual. What it means depends on the downlink format. When a broadcast fails, the tool identifies the single bit that would fix it.
One message or a whole log. Any separator works.
Or click an example
Paste a message above, or try one of the examples. To see every field rather than just the checksum, use the message decoder.
How this works
- One checksum, three meanings
- DF17 and DF18 are broadcasts — no interrogator, no reply, so the CRC is a plain checksum and the residual must be zero. DF0, 4, 5, 16, 20 and 21 are surveillance replies: the transponder XORs its 24-bit ICAO address into the CRC field before transmitting, so the receiver recovers the address by running the check. DF11 does the same with the interrogator code. The consequence: on a surveillance reply there is no independent integrity check — the residual IS the address, and a corrupted frame just produces a wrong one.
- Single-bit error correction
- Because CRC-24 is linear, each bit position has a fixed syndrome — flip bit 47 and the residual shifts by the same amount no matter what the rest of the frame says. That makes correction O(n): test 112 syndromes, not 2^112 messages. Receivers run this on every failed frame, which is why a marginal antenna at range still produces usable traffic. The tool does the same search and shows you the bit.
- Why two-bit repair is not offered
- A 112-bit frame has C(112,2) = 6,216 two-bit pairs. With only 2^24 (≈16.8 million) possible residuals, any given non-zero residual has roughly a 1 in 2,700 chance of matching some wrong pair. That is close enough to hit in practice. A single-bit repair is far safer — 112 candidates against 16.8 million residuals — but still a strong hint rather than a proof, which is why the tool labels it as such.
Worked example
Valid frame
8D40621D58C382D690C8AC2863A7
- Frame
- 112 bits (28 hex characters) — A DF17 ADS-B broadcast. The first 88 bits carry the data. The last 24 bits are the CRC.
- CRC-24 residual
- 000000 — Zero means the message is intact. Every bit arrived as transmitted.
Corrupted frame (one bit flipped)
8D40621D58C382D690C8AC2863A6
Residual: 9BE200 — The last hex digit changed from 7 to 6 (bit 112 flipped). The residual is no longer zero. The tool identifies bit 112 as the one to flip back.
Frequently asked questions
- What is CRC-24 in Mode S?
- CRC-24 is a cyclic redundancy check that produces a 24-bit value from the message data. The transmitter computes the CRC over the first 88 bits of a 112-bit frame and appends it at the end. A receiver runs the same computation. If the result is zero, the message arrived without errors.
- Why does the residual mean different things for different downlink formats?
- On a DF17 or DF18 broadcast, the CRC is a plain checksum, so the residual should be zero. On a surveillance reply (DF0, DF4, DF5, DF16, DF20, DF21), the transmitter XORs the aircraft ICAO address into the CRC field. The residual is then the address itself. On a DF11 all-call reply, the interrogator code is mixed in instead. The same arithmetic, three different meanings.
- How does single-bit error correction work?
- The CRC code is linear. Flipping any single bit always shifts the residual by a fixed amount that depends only on the bit position. The tool tests all 112 possible single-bit flips. If one produces a zero residual, that bit is the error. Receivers use this constantly to recover messages from noisy antennas.
- Can CRC-24 detect all errors?
- It detects all single-bit and double-bit errors, all burst errors up to 24 bits long, and most longer errors. It cannot detect every possible combination. Any error pattern that happens to produce a multiple of the generator polynomial passes the check. The probability is roughly 1 in 16 million for random errors.
- Why does this tool not repair two-bit errors?
- A 112-bit frame has 6,216 possible two-bit pairs against only 16,777,216 possible residuals. A false repair — flipping two wrong bits to produce a valid but different message — becomes a realistic risk. A confidently wrong aircraft address or altitude is worse than a dropped message.
- What generator polynomial does Mode S use?
- The generator is 0x1FFF409, a 25-bit value representing the polynomial x^24 + x^23 + x^22 + ... + x^10 + x^3 + 1. It is defined in ICAO Annex 10, Volume IV. Every Mode S transponder and receiver uses the same polynomial.
- How does the CRC-24 computation work step by step?
- The transmitter appends 24 zero bits to the 88-bit data, then divides the 112-bit result by the generator polynomial (0x1FFF409) using binary long division — which is XOR instead of subtraction. Starting from the most significant bit: if the current bit is 1, XOR the generator into the data at that position and advance; if 0, just advance. After processing all 88 data bits, the 24-bit remainder is the CRC. The transmitter writes it into the last 24 bits. A receiver runs the same division over all 112 bits. If the message is intact, the remainder is zero.
10110100… ← bit is 1, XOR generator
1111111111111010000001001 ← 0x1FFF409
01001011… ← result, advance one bit
- Does the CRC work on 56-bit short replies too?
- Yes. Short replies (DF0, DF4, DF5, DF11) are 56 bits: 32 data bits plus 24 parity bits. The same generator polynomial and the same XOR division apply, just over a shorter message. The tool accepts both 56-bit (14 hex characters) and 112-bit (28 hex characters) frames. On a short frame the residual is the aircraft address (or interrogator code for DF11), the same as on the long surveillance replies.
You just checked one 112-bit frame for errors.
A SkyPath print is composed from millions of them — real ADS-B position reports over a single airport, chosen and composed by hand, colored by altitude, then printed on aluminum.