ExactBench · Engineering calculators

CRC Calculator

CRC-8 · CRC-16 · CRC-32

Message

CRC-16/MODBUS

0x4B37
19255 decimal · 2 bytes

Frame on the wire

low byte first
TRANSMIT ORDER313233343536373839374Bdata · 9 byteschecksum
CRC (hex)0x4B 37
CRC (decimal)19255
CRC bytes, MSB first4B 37
CRC bytes, LSB first37 4B
Message length9 bytes
Parameterspoly 0x8005 · init 0xFFFF · refin true · refout true · xorout 0x0000
Check value (“123456789”)0x4B37
How this works. A CRC treats the message as a long binary polynomial and returns the remainder after dividing by a generator polynomial. The parameters matter as much as the polynomial: init seeds the register, refin/refout reflect the bit order going in and coming out, and xorout inverts the result. Two implementations with the same polynomial and different reflection settings produce completely different checksums — which is the usual reason a CRC "doesn't match". Modbus and CCITT both use well-known parameter sets and are not interchangeable. Byte order on the wire is a separate trap: Modbus transmits the CRC low byte first, so the frame ends with the bytes reversed from how the checksum is written.

Parameter sets

CRC-8 (SMBus)0x07init 0x00 · refin false · refout false · xorout 0x00 · check 0xF4
CRC-8/MAXIM (1-Wire)0x31init 0x00 · refin true · refout true · xorout 0x00 · check 0xA1
CRC-16/MODBUS0x8005init 0xFFFF · refin true · refout true · xorout 0x0000 · check 0x4B37
CRC-16/CCITT-FALSE0x1021init 0xFFFF · refin false · refout false · xorout 0x0000 · check 0x29B1
CRC-16/XMODEM0x1021init 0x0000 · refin false · refout false · xorout 0x0000 · check 0x31C3
CRC-16/KERMIT0x1021init 0x0000 · refin true · refout true · xorout 0x0000 · check 0x2189
CRC-16/USB0x8005init 0xFFFF · refin true · refout true · xorout 0xFFFF · check 0xB4C8
CRC-32 (ISO-HDLC, zip)0x04C11DB7init 0xFFFFFFFF · refin true · refout true · xorout 0xFFFFFFFF · check 0xCBF43926
CRC-32/BZIP20x04C11DB7init 0xFFFFFFFF · refin false · refout false · xorout 0xFFFFFFFF · check 0xFC891918
CRC-32C (Castagnoli)0x1EDC6F41init 0xFFFFFFFF · refin true · refout true · xorout 0xFFFFFFFF · check 0xE3069283

"Check" is the checksum of the ASCII string 123456789, which every catalogued CRC publishes so an implementation can be proved correct. All ten above are reproduced by the test suite. Note that CRC-16/MODBUS and CRC-16/USB share a polynomial and differ only in xorout — the parameters matter as much as the polynomial does.