CRC-16 Calculator
Result
Algorithm Reference
Result is calculated from the current input. Check is the published verification value for the standard input 123456789. RefIn and RefOut are separate input and output reflection settings. Click a row to apply that algorithm; on narrow screens, the chevron button at the end of a row reveals its full parameters.
CRC Lookup Table
CRC Source Code
/*
* Model: CRC-16 / MODBUS (16-bit)
* Poly: 0x8005, Init: 0xFFFF, XorOut: 0x0000
* CRC Table C Source Code & Lookup Table Generator
*/
#include <stdint.h>
#include <stddef.h>
const uint16_t crc_table[256] = {
0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
};
uint16_t calculate_crc(const uint8_t *data, size_t length) {
uint16_t crc = 0xFFFF;
for (size_t i = 0; i < length; i++) {
#if 1
uint8_t idx = (uint8_t)(crc ^ data[i]);
crc = (crc >> 8) ^ crc_table[idx];
#else
uint8_t idx = (uint8_t)((crc >> 8) ^ data[i]);
crc = (crc << 8) ^ crc_table[idx];
#endif
}
return crc ^ 0x0000;
}CRC Algorithm Identifier
Already know the CRC output for this data but not which algorithm produced it? Enter the known result below — every one of the 70 catalog algorithms is recalculated against the current input data and matched against it automatically.
Enter a known CRC value to search the catalog
All 70 algorithms are checked against the current input data.
CRC Patch Finder
About the CRC-16 Calculator
This calculator loads with CRC-16/MODBUS (polynomial 0x8005) selected — the checksum used by Modbus RTU frames and the most frequently requested 16-bit CRC on this site, since industrial serial protocols are the single largest source of CRC-16 traffic. Switch the preset above to load any of the other 30 CRC-16 variants in the catalog, including CRC-16/CCITT-FALSE, CRC-16/XMODEM, CRC-16/KERMIT, and CRC-16/USB — the calculator, lookup table, and source code generator below update immediately to match.
Several names are commonly, and incorrectly, used as if they described one shared CRC-16 model — “CCITT” alone is at least three different checksums depending on the vendor. Confirm the exact model a protocol or file format expects by matching its published check value, not just its width, before trusting a result. Every CRC-16 variant in the catalog is listed below.
Other CRC-16 calculators
30 more published CRC-16 models in the catalog — each opens in a calculator preloaded with its own parameters.
| Algorithm | Poly | Init | RefIn | RefOut | XorOut | Check | Details |
|---|---|---|---|---|---|---|---|
CRC-16/ARCCRC-16/IBM · CRC-16/LHA | 0x8005 | 0x0000 | Yes | Yes | 0x0000 | 0xBB3D | View |
CRC-16/CDMA2000CDMA2000 CRC-16 | 0xC867 | 0xFFFF | No | No | 0x0000 | 0x4C06 | View |
CRC-16/CMSCMS CRC-16 | 0x8005 | 0xFFFF | No | No | 0x0000 | 0xAEE7 | View |
CRC-16/DDS-110DDS110 CRC | 0x8005 | 0x800D | No | No | 0x0000 | 0x9ECF | View |
CRC-16/DECT-RDECT R CRC | 0x0589 | 0x0000 | No | No | 0x0001 | 0x007E | View |
CRC-16/DECT-XDECT X CRC | 0x0589 | 0x0000 | No | No | 0x0000 | 0x007F | View |
CRC-16/DNPDNP CRC-16 | 0x3D65 | 0x0000 | Yes | Yes | 0xFFFF | 0xEA82 | View |
CRC-16/EN-13757M-Bus CRC | 0x3D65 | 0x0000 | No | No | 0xFFFF | 0xC2B7 | View |
CRC-16/GENIBUSCRC-16/EPC · CRC-16/I-CODE | 0x1021 | 0xFFFF | No | No | 0xFFFF | 0xD64E | View |
CRC-16/GSMGSM CRC-16 | 0x1021 | 0x0000 | No | No | 0xFFFF | 0xCE3C | View |
CRC-16/IBM-3740CRC-16/CCITT-FALSE · CCITT-FALSE · CRC-CCITT | 0x1021 | 0xFFFF | No | No | 0x0000 | 0x29B1 | View |
CRC-16/IBM-SDLCCRC-16/ISO-HDLC · CRC-16/ISO-IEC-14443-3-B · CRC-16/X-25 · CRC-B · X-25 | 0x1021 | 0xFFFF | Yes | Yes | 0xFFFF | 0x906E | View |
| 0x1021 | 0xC6C6 | Yes | Yes | 0x0000 | 0xBF05 | View | |
CRC-16/KERMITCRC-CCITT KERMIT · CRC16 KERMIT | 0x1021 | 0x0000 | Yes | Yes | 0x0000 | 0x2189 | View |
CRC-16/LJ1200LJ1200 CRC-16 | 0x6F63 | 0x0000 | No | No | 0x0000 | 0xBDF4 | View |
CRC-16/M17M17 CRC-16 | 0x5935 | 0xFFFF | No | No | 0x0000 | 0x772B | View |
CRC-16/MAXIM-DOWCRC-16/MAXIM | 0x8005 | 0x0000 | Yes | Yes | 0xFFFF | 0x44C2 | View |
CRC-16/MCRF4XXMCRF4XX CRC | 0x1021 | 0xFFFF | Yes | Yes | 0x0000 | 0x6F91 | View |
CRC-16/NRSC-5NRSC-5 CRC-16 | 0x080B | 0xFFFF | Yes | Yes | 0x0000 | 0xA066 | View |
CRC-16/OPENSAFETY-AopenSAFETY A | 0x5935 | 0x0000 | No | No | 0x0000 | 0x5D38 | View |
CRC-16/OPENSAFETY-BopenSAFETY B | 0x755B | 0x0000 | No | No | 0x0000 | 0x20FE | View |
CRC-16/PROFIBUSIEC 61158-2 CRC | 0x1DCF | 0xFFFF | No | No | 0xFFFF | 0xA819 | View |
CRC-16/RIELLORIELLO CRC-16 | 0x1021 | 0xB2AA | Yes | Yes | 0x0000 | 0x63D0 | View |
CRC-16/SPI-FUJITSUCRC-16/AUG-CCITT | 0x1021 | 0x1D0F | No | No | 0x0000 | 0xE5CC | View |
CRC-16/T10-DIFSCSI DIF CRC | 0x8BB7 | 0x0000 | No | No | 0x0000 | 0xD0DB | View |
CRC-16/TELEDISKTeledisk CRC | 0xA097 | 0x0000 | No | No | 0x0000 | 0x0FB3 | View |
CRC-16/TMS37157TMS37157 CRC-16 | 0x1021 | 0x89EC | Yes | Yes | 0x0000 | 0x26B1 | View |
CRC-16/UMTSCRC-16/BUYPASS · CRC-16/VERIFONE | 0x8005 | 0x0000 | No | No | 0x0000 | 0xFEE8 | View |
CRC-16/USBUSB CRC16 | 0x8005 | 0xFFFF | Yes | Yes | 0xFFFF | 0xB4C8 | View |
CRC-16/XMODEMCRC XMODEM · ZMODEM CRC | 0x1021 | 0x0000 | No | No | 0x0000 | 0x31C3 | View |
- Poly
- 0x8005
- Init
- 0x0000
- RefIn
- Yes
- RefOut
- Yes
- XorOut
- 0x0000
- Check
- 0xBB3D
- Poly
- 0xC867
- Init
- 0xFFFF
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0x4C06
- Poly
- 0x8005
- Init
- 0xFFFF
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0xAEE7
- Poly
- 0x8005
- Init
- 0x800D
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0x9ECF
- Poly
- 0x0589
- Init
- 0x0000
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0001
- Check
- 0x007E
- Poly
- 0x0589
- Init
- 0x0000
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0x007F
- Poly
- 0x3D65
- Init
- 0x0000
- RefIn
- Yes
- RefOut
- Yes
- XorOut
- 0xFFFF
- Check
- 0xEA82
- Poly
- 0x3D65
- Init
- 0x0000
- RefIn
- No
- RefOut
- No
- XorOut
- 0xFFFF
- Check
- 0xC2B7
- Poly
- 0x1021
- Init
- 0xFFFF
- RefIn
- No
- RefOut
- No
- XorOut
- 0xFFFF
- Check
- 0xD64E
- Poly
- 0x1021
- Init
- 0x0000
- RefIn
- No
- RefOut
- No
- XorOut
- 0xFFFF
- Check
- 0xCE3C
- Poly
- 0x1021
- Init
- 0xFFFF
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0x29B1
- Poly
- 0x1021
- Init
- 0xFFFF
- RefIn
- Yes
- RefOut
- Yes
- XorOut
- 0xFFFF
- Check
- 0x906E
- Poly
- 0x1021
- Init
- 0xC6C6
- RefIn
- Yes
- RefOut
- Yes
- XorOut
- 0x0000
- Check
- 0xBF05
- Poly
- 0x1021
- Init
- 0x0000
- RefIn
- Yes
- RefOut
- Yes
- XorOut
- 0x0000
- Check
- 0x2189
- Poly
- 0x6F63
- Init
- 0x0000
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0xBDF4
- Poly
- 0x5935
- Init
- 0xFFFF
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0x772B
- Poly
- 0x8005
- Init
- 0x0000
- RefIn
- Yes
- RefOut
- Yes
- XorOut
- 0xFFFF
- Check
- 0x44C2
- Poly
- 0x1021
- Init
- 0xFFFF
- RefIn
- Yes
- RefOut
- Yes
- XorOut
- 0x0000
- Check
- 0x6F91
- Poly
- 0x080B
- Init
- 0xFFFF
- RefIn
- Yes
- RefOut
- Yes
- XorOut
- 0x0000
- Check
- 0xA066
- Poly
- 0x5935
- Init
- 0x0000
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0x5D38
- Poly
- 0x755B
- Init
- 0x0000
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0x20FE
- Poly
- 0x1DCF
- Init
- 0xFFFF
- RefIn
- No
- RefOut
- No
- XorOut
- 0xFFFF
- Check
- 0xA819
- Poly
- 0x1021
- Init
- 0xB2AA
- RefIn
- Yes
- RefOut
- Yes
- XorOut
- 0x0000
- Check
- 0x63D0
- Poly
- 0x1021
- Init
- 0x1D0F
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0xE5CC
- Poly
- 0x8BB7
- Init
- 0x0000
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0xD0DB
- Poly
- 0xA097
- Init
- 0x0000
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0x0FB3
- Poly
- 0x1021
- Init
- 0x89EC
- RefIn
- Yes
- RefOut
- Yes
- XorOut
- 0x0000
- Check
- 0x26B1
- Poly
- 0x8005
- Init
- 0x0000
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0xFEE8
- Poly
- 0x8005
- Init
- 0xFFFF
- RefIn
- Yes
- RefOut
- Yes
- XorOut
- 0xFFFF
- Check
- 0xB4C8
- Poly
- 0x1021
- Init
- 0x0000
- RefIn
- No
- RefOut
- No
- XorOut
- 0x0000
- Check
- 0x31C3
Looking for a different width? Browse the full 70-algorithm catalog.