CRC-16 Calculator (Modbus, CCITT, XMODEM, Kermit …)
Calculate CRC-16 with presets from the CRC catalogue — ARC, MODBUS, CCITT-FALSE, XMODEM, KERMIT, X-25, USB, DNP and more — or custom parameters, with both byte orders.
Parameters follow Greg Cook’s catalogue of parametrised CRC algorithms (reveng). Check a variant with the text 123456789: the result must equal its catalogue check value.
| Variant | CRC | Decimal | Poly | Init | Reflected | XorOut |
|---|---|---|---|---|---|---|
| CRC-16/ARC | 0xBB3D | 47,933 | 0x8005 | 0x0000 | yes | 0x0000 |
| CRC-16/MODBUS | 0x4B37 | 19,255 | 0x8005 | 0xFFFF | yes | 0x0000 |
| CRC-16/CCITT-FALSE | 0x29B1 | 10,673 | 0x1021 | 0xFFFF | no | 0x0000 |
| CRC-16/XMODEM | 0x31C3 | 12,739 | 0x1021 | 0x0000 | no | 0x0000 |
| CRC-16/KERMIT | 0x2189 | 8,585 | 0x1021 | 0x0000 | yes | 0x0000 |
| CRC-16/X-25 | 0x906E | 36,974 | 0x1021 | 0xFFFF | yes | 0xFFFF |
| CRC-16/USB | 0xB4C8 | 46,280 | 0x8005 | 0xFFFF | yes | 0xFFFF |
| CRC-16/DNP | 0xEA82 | 60,034 | 0x3D65 | 0x0000 | yes | 0xFFFF |
| CRC-16/GENIBUS | 0xD64E | 54,862 | 0x1021 | 0xFFFF | no | 0xFFFF |
| CRC-16/MAXIM-DOW | 0x44C2 | 17,602 | 0x8005 | 0x0000 | yes | 0xFFFF |
| CRC-16/UMTS | 0xFEE8 | 65,256 | 0x8005 | 0x0000 | no | 0x0000 |
| CRC-16/T10-DIF | 0xD0DB | 53,467 | 0x8BB7 | 0x0000 | no | 0x0000 |
| CRC-16/SPI-FUJITSU | 0xE5CC | 58,828 | 0x1021 | 0x1D0F | no | 0x0000 |
| CRC-16/EN-13757 | 0xC2B7 | 49,847 | 0x3D65 | 0x0000 | no | 0xFFFF |
A CRC-16 is a 16-bit checksum that catches transmission errors in serial protocols, radio links, file formats and industrial buses. "CRC-16" is a family: Modbus, XMODEM, Kermit, X.25 and USB all use different polynomials, start values, bit orders and final XORs, so the same bytes give different results. This calculator has the common variants from the CRC catalogue, a custom mode, and shows the result in both byte orders.
How to use this tool
- Enter the data as text or hex bytes (01 03 00 00 …).
- Pick the variant your protocol uses, or enter custom parameters.
- Read the CRC in hex and decimal, and in the byte order your protocol sends.
- Compare with the table of all variants if you are unsure which one a device uses.
Formula
CRC = (remainder of M(x)·x¹⁶ ÷ P(x), starting from Init, with optional bit reflection) ⊕ XorOut
P(x) is the generator polynomial (0x8005 or 0x1021 for most variants). "Reflected" variants process each byte least-significant bit first and mirror the 16-bit result. Every variant is defined by its check value — the CRC of the nine ASCII characters 123456789.
Example
The text 123456789 gives 0x4B37 with CRC-16/MODBUS, 0x29B1 with CCITT-FALSE and 0x31C3 with XMODEM — the catalogue check values. The Modbus RTU request 01 03 00 00 00 0A has the CRC 0xCDC5, which goes on the wire low byte first: C5 CD.
Frequently asked questions
Which CRC-16 does Modbus use?
CRC-16/MODBUS: polynomial 0x8005 (reflected 0xA001), initial value 0xFFFF, reflected, no final XOR. Modbus RTU transmits the low byte first.
What is the difference between CCITT-FALSE, XMODEM and KERMIT?
All three use polynomial 0x1021. XMODEM starts at 0, CCITT-FALSE starts at 0xFFFF, and KERMIT starts at 0 and reflects the bits. Names are used loosely by vendors, so check against the 123456789 values.
Can I calculate CRC-32 here?
Use the CRC-32 checksum tool for CRC-32 and CRC-32C, or the checksum calculator to see many checksums of the same data at once.
Sources
Last updated:
Page address with these inputs: https://kakao.mobile/tools/crc16-checksum-tool/
Cite or embed this tool
kakaoCalc. (2026, November 8). CRC-16 Calculator (Modbus, CCITT, XMODEM, Kermit …). https://kakao.mobile/tools/crc16-checksum-tool/
“CRC-16 Calculator (Modbus, CCITT, XMODEM, Kermit …).” kakaoCalc, 8 Nov. 2026, kakao.mobile/tools/crc16-checksum-tool/.
Paste this code into your page. The widget runs in your visitors' browsers, shows no ads and keeps a link back to this page. Embedding terms