This tool computes an 8-bit CRC checksum of any text or raw hex bytes and shows it in both hexadecimal and decimal, updating live. CRC-8 is widely used in low-level protocols — SMBus, 1-Wire sensors, and many embedded packets — to detect accidental corruption of short messages.
How it works
CRC-8 treats the input as a polynomial over GF(2) and computes the remainder when divided by the generator polynomial 0x07 (x^8 + x^2 + x + 1). This implementation precomputes a 256-entry lookup table from the polynomial, then processes the data one byte at a time: starting from the initial value 0x00, each input byte is XORed into the running CRC and the result indexes the table. Because this variant uses no bit reflection and no final XOR, the table is built in the straightforward most-significant-bit-first direction.
Where CRC-8 is used
CRC-8 is found everywhere that short, low-overhead error checking is needed in embedded and industrial systems:
- SMBus (System Management Bus) — the protocol that lets a motherboard communicate with sensors, battery management ICs, and power management chips uses CRC-8/SMBUS on every packet. This is the reference variant this tool implements.
- 1-Wire protocol (Dallas/Maxim) — temperature sensors like the DS18B20 use a different CRC-8 variant (polynomial 0x31, reflected) to validate ROM codes and measurement packets over a single-wire interface.
- CAN bus and automotive ECUs — some CAN message payloads and configuration frames include CRC-8 variants for lightweight integrity protection.
- MPEG-2 and DVB — an 8-bit CRC appears in transport stream section headers.
- Many I2C sensor ICs — humidity and pressure sensors from major manufacturers include a CRC-8 byte in their multi-byte measurement responses.
Because CRC-8 is only 8 bits wide, it has 256 possible values and will not detect all possible error patterns — the probability of a random error being missed is roughly 1 in 256. For longer messages or higher reliability requirements, use CRC-16 or CRC-32 instead.
CRC-8 variants — why they differ
Unlike CRC-32, where one variant dominates, CRC-8 has many variants in practical use, and they produce completely different results for the same data:
| Variant | Polynomial | Init | Reflect | Check (123456789) | Used in |
|---|---|---|---|---|---|
| CRC-8/SMBUS | 0x07 | 0x00 | No | 0xF4 | SMBus, general embedded |
| CRC-8/MAXIM (1-Wire) | 0x31 | 0x00 | Yes | 0xA1 | DS18B20, 1-Wire devices |
| CRC-8/DARC | 0x39 | 0x00 | Yes | 0x15 | DARC broadcast data |
| CRC-8/DVB-S2 | 0xD5 | 0x00 | No | 0xBC | Digital Video Broadcast |
Always confirm which variant your hardware or protocol specification uses before comparing values. Matching the check value against your known-good test vector is the fastest way to confirm you have the right one.
Example and notes
The canonical CRC check string 123456789 produces 0xF4 with this CRC-8/SMBUS variant, so you can use it to confirm the calculator is correct. Note that other CRC-8 variants (such as CRC-8/MAXIM or CRC-8/DARC) use different polynomials, reflection, or initial values and will give different results.
CRC-8 detects accidental errors only — it is not cryptographic and is easy to forge. Use it for quick integrity checks on short data, never for security. Everything is computed in pure JavaScript in your browser; nothing is uploaded.