[ Home | Up | Prev | Next | Disclaimer ]
CRC width (bits) | Records | ||||
---|---|---|---|---|---|
Attested | Confirmed | Academic | Third-party | Total | |
3 | – | – | 2 | – | 2 |
4 | – | – | 2 | – | 2 |
5 | 1 | 1 | 1 | – | 3 |
6 | 2 | – | 3 | – | 5 |
7 | – | – | 3 | – | 3 |
8 | 12 | – | 7 | 1 | 20 |
10 | 1 | – | 2 | – | 3 |
11 | 1 | – | 1 | – | 2 |
12 | – | – | 4 | – | 4 |
13 | 1 | – | – | – | 1 |
14 | 1 | – | 1 | – | 2 |
15 | 1 | – | 1 | – | 2 |
16 | 23 | 4 | 1 | 3 | 31 |
17 | – | – | 1 | – | 1 |
21 | – | – | 1 | – | 1 |
24 | 5 | – | 3 | – | 8 |
30 | – | – | 1 | – | 1 |
31 | – | 1 | – | – | 1 |
32 | 8 | 3 | 1 | – | 12 |
40 | – | – | 1 | – | 1 |
64 | 3 | 2 | 2 | – | 7 |
82 | 1 | – | – | – | 1 |
Total | 60 | 11 | 38 | 4 | 113 |
width
poly
poly
is written in the hexadecimal, direct notation found in MSB-first code. The least significant bit corresponds to the inward end of the shift register, and is always set. The highest-order term is omitted.init
init
is written in the hexadecimal, direct notation found in MSB-first code. The least significant bit corresponds to the inward end of the shift register.refin
false
, specifies that the characters of the message are read bit-by-bit, most significant bit (MSB) first; if equal to true
, the characters are read bit-by-bit, least significant bit (LSB) first. Each sampled message bit is then XORed with the bit being simultaneously shifted out of the register at the most significant end, and the result is passed to the feedback taps.refout
false
, specifies that the contents of the register after reading the last message bit are unreflected before presentation; if equal to true
, it specifies that they are reflected, character-by-character, before presentation. For the purpose of this definition, the reflection is performed by swapping the content of each cell with that of the cell an equal distance from the opposite end of the register; the characters of the CRC are then true images of parts of the reflected register, the character containing the original MSB always appearing first.xorout
xorout
is written in hexadecimal notation, having the same endianness as the CRC such that its true image appears in the characters of the CRC.check
"123456789"
(as 8-bit characters), optionally reflecting, and applying the final XOR.residue
refout=true
), but not applying the final XOR. This is mathematically equivalent to initialising the register with the xorout
parameter, reflecting it as described (if refout=true
), reading as many zero bits as there are cells in the register, and reflecting the result (if refin=true
). The residue of a crossed-endian model is calculated assuming that the characters of the received CRC are specially reflected before submitting the codeword.name
Robert Bosch GmbH (September 1991), CAN 2.0 Specification.
Dipl. Inf. Johann N. Löfflmann (30 July 2006), Jacksum. CRC and hash calculator in Java.
Thomas Pircher (5 November 2022), pycrc. Python based parametrised CRC calculator and C code generator.
William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling (1992), Numerical recipes in C: The art of scientific computing. 2nd ed. Cambridge: Cambridge University Press. ISBN 0-521-43108-5
Dr Ross N. Williams (19 August 1993), "A Painless Guide to CRC Error Detection Algorithms" (courtesy of the Internet Archive).
Lammert Bies (August 2011), "On-line CRC calculation and free library".
Lammert Bies, "Error detection and correction" Web forum (courtesy of the Internet Archive).
Jonathan Graham Harston (21–23 June 2011), "Source Code for Calculating CRCs".
PicList MassMind, "Cyclic Redundancy Check error detection".
Tom Torfs, IOCCC winning entry, 1998, CRC generator.
Every effort has been made to ensure accuracy, however there may be occasional errors or omissions. All trademarks and registered trademarks are the intellectual property of their respective owners. The code and documentation included in this document are supplied without warranty, not even the implied warranties of merchantability or fitness for a particular purpose. In no event shall the author or his suppliers be liable for any loss, damage, injury or death, of any nature and howsoever caused, arising from the use of, or failure, inability or unwillingness to use, this software or documentation.
[ Top of page ]
Map of common 16-bit CRC algorithms.
"123456789" (UTF-8) |
Polynomial | 1021 | 8005 | ||
---|---|---|---|---|---|
Reflected? | False | True | False | ||
Initial value | Final XOR | ||||
0000 | 0000 | 31C3 (XMODEM) |
2189 (KERMIT) |
BB3D (ARC) |
FEE8 (UMTS) |
FFFF | CE3C (GSM) |
DE76 (–) |
44C2 (MAXIM) |
0117 (–) |
|
FFFF | D64E (GENIBUS) |
906E (SDLC) |
B4C8 (USB) |
5118 (–) |
|
0000 | 29B1 (IBM 3740) |
6F91 (MCRF4XX) |
4B37 (MODBUS) |
AEE7 (CMS) |
Cross-reference of generator polynomials to Professor Koopman's CRC Polynomial Zoo.
Width | Polynomial | Zoo names | Models | ||
---|---|---|---|---|---|
Direct | Reflected | Koopman | |||
3 | 0x3 | 0x6 | 0x5 | (*p) CRC-3K; RFC 3095; FP-3 | CRC-3/GSM , CRC-3/ROHC |
4 | 0x3 | 0xc | 0x9 | (*p) CCITT-4; FP-4; ITU-T G.704 | CRC-4/G-704 , CRC-4/INTERLAKEN |
5 | 0x05 | 0x14 | 0x12 | (*p) CRC-5-EPC; CRC-5-USB; FP-5 | CRC-5/USB |
5 | 0x09 | 0x12 | *< 0x14 | (*p) CRC-5-EPC; CRC-5-USB; FP-5 | CRC-5/EPC-C1G2 |
5 | 0x15 | 0x15 | *< 0x1a | (*op) CRC-5; CRC-5-ITU; CRC-5F/4; FOP-5 ("65") | CRC-5/G-704 |
6 | 0x03 | 0x30 | 0x21 | (*p) CRC-6; CRC-6-ITU; FP-6 | CRC-6/G-704 |
6 | 0x07 | 0x38 | 0x23 | (*op) CRC-6-CDMA2000-B; FOP-6 | CRC-6/CDMA2000-B |
6 | 0x19 | 0x26 | < 0x2c | (*op) DARC-6 | CRC-6/DARC |
6 | 0x27 | 0x39 | 0x33 | (*p) CRC-6-CDMA2000-A; CRC-6F/3 ("147p") | CRC-6/CDMA2000-A |
6 | 0x2f | 0x3d | 0x37 | (*op) CRC-6-GSM; CRC-6F/4 ("157") | CRC-6/GSM |
7 | 0x09 | 0x48 | 0x44 | (*p) CRC-7 | CRC-7/MMC |
7 | 0x45 | 0x51 | < 0x62 | (*op) CRC-7P | CRC-7/UMTS |
7 | 0x4f | 0x79 | 0x67 | (*o) RFC 3095 | CRC-7/ROHC |
8 | 0x07 | 0xe0 | 0x83 | (*op) FOP-8; ATM-8; CRC-8P | CRC-8/I-432-1 , CRC-8/ROHC , CRC-8/SMBUS |
8 | 0x31 | 0x8c | < 0x98 | (*op) DOWCRC | CRC-8/MAXIM-DOW , CRC-8/NRSC-5 |
8 | 0x1d | 0xb8 | 0x8e | (*p) SAE J-1850; FP-8 | CRC-8/GSM-A , CRC-8/HITAG , CRC-8/I-CODE , CRC-8/MIFARE-MAD , CRC-8/SAE-J1850 , CRC-8/TECH-3250 |
8 | 0x49 | 0x92 | < 0xa4 | (*o) CRC-8-GSM-B | CRC-8/GSM-B |
8 | 0x2f | 0xf4 | 0x97 | (*op) C2; CRC-8-AUTOSAR; CRC-8F/4.2 ("457") | CRC-8/AUTOSAR , CRC-8/OPENSAFETY |
8 | 0x39 | 0x9c | = 0x9c | DARC-8 | CRC-8/DARC |
8 | 0xd5 | 0xab | < 0xea | (*o) CRC-8 | CRC-8/DVB-S2 |
8 | 0x9b | 0xd9 | 0xcd | (*op) WCDMA-8 | CRC-8/CDMA2000 , CRC-8/LTE , CRC-8/WCDMA |
8 | 0xa7 | 0xe5 | 0xd3 | (*op) CRC-8-Bluetooth | CRC-8/BLUETOOTH |
10 | 0x3d9 | 0x26f | < 0x3ec | (*op) CRC-10-CMDA2000 | CRC-10/CDMA2000 |
10 | 0x175 | 0x2ba | = 0x2ba | CRC-10-GSM | CRC-10/GSM |
10 | 0x233 | 0x331 | 0x319 | (*op) CRC-10 | CRC-10/ATM |
11 | 0x385 | 0x50e | < 0x5c2 | (*o) FlexRay-11 | CRC-11/FLEXRAY |
11 | 0x307 | 0x706 | 0x583 | (*op) CRC-11F/4.2 "7015" | CRC-11/UMTS |
12 | 0xd31 | 0x8cb | < 0xe98 | CRC-12-GSM | CRC-12/GSM |
12 | 0x80f | 0xf01 | 0xc07 | (*op) CRC-12 | CRC-12/DECT , CRC-12/UMTS |
12 | 0xf13 | 0xc8f | < 0xf89 | (*op) CRC-12-CMDA2000 | CRC-12/CDMA2000 |
13 | 0x1cf5 | 0x15e7 | < 0x1e7a | (*o) CRC-13-BBC | CRC-13/BBC |
14 | 0x0805 | 0x2804 | 0x2402 | (*op) DARC-14 (*op) | CRC-14/DARC |
14 | 0x202d | 0x2d01 | < 0x3016 | (*op) CRC-14-GSM | CRC-14/GSM |
15 | 0x4599 | 0x4cd1 | < 0x62cc | (*o) CAN | CRC-15/CAN |
15 | 0x6815 | 0x540b | < 0x740a | CRC-15-MPT1327 | CRC-15/MPT1327 |
16 | 0x0589 | 0x91a0 | 0x82c4 | (*o) CRC-16-DECT | CRC-16/DECT-R , CRC-16/DECT-X |
16 | 0x080b | 0xd010 | 0x8405 | – | CRC-16/NRSC-5 |
16 | 0x1021 | 0x8408 | < 0x8810 | (*op) CCITT-16 | CRC-16/GENIBUS , CRC-16/GSM , CRC-16/IBM-3740 , CRC-16/IBM-SDLC , CRC-16/ISO-IEC-14443-3-A , CRC-16/KERMIT , CRC-16/MCRF4XX , CRC-16/RIELLO , CRC-16/SPI-FUJITSU , CRC-16/TMS37157 , CRC-16/XMODEM |
16 | 0x1dcf | 0xf3b8 | 0x8ee7 | ProfiBus | CRC-16/PROFIBUS |
16 | 0x3d65 | 0xa6bc | 0x9eb2 | (*o) C1; CRC-16-DNP; CRC-16F/6.2 ("236545") | CRC-16/DNP , CRC-16/EN-13757 |
16 | 0x8005 | 0xa001 | *< 0xc002 | (*op) CRC-16; CRC-16-IBM | CRC-16/ARC , CRC-16/CMS , CRC-16/DDS-110 , CRC-16/MAXIM-DOW , CRC-16/MODBUS , CRC-16/UMTS , CRC-16/USB |
16 | 0x5935 | 0xac9a | = 0xac9a | C3; CRC-16F/5 ("254465s") | CRC-16/M17 , CRC-16/OPENSAFETY-A |
16 | 0x6f63 | 0xc6f6 | 0xb7b1 | IEEE WG77.1 | CRC-16/LJ1200 |
16 | 0x755b | 0xdaae | 0xbaad | CRC-16K/4 | CRC-16/OPENSAFETY-B |
16 | 0x8bb7 | 0xedd1 | 0xc5db | (*p) CRC-16-T10-DIF | CRC-16/T10-DIF |
16 | 0xa097 | 0xe905 | 0xd04b | (*o) IBM-16 | CRC-16/TELEDISK |
16 | 0xc867 | 0xe613 | 0xe433 | (*p) CRC-16-CMDA2000 | CRC-16/CDMA2000 |
17 | 0x1685b | 0x1b42d | = 0x1b42d | (*o) CRC-17-CAN | CRC-17/CAN-FD |
21 | 0x102899 | 0x132281 | < 0x18144c | (*o) CRC-21-CAN | CRC-21/CAN-FD |
24 | 0x00065b | 0xda6000 | 0x80032d | (*op) BLE-24 (Bluetooth Low Energy) | CRC-24/BLE |
24 | 0x328b63 | 0xc6d14c | 0x9945b1 | (*op) CRC-24/4 | CRC-24/INTERLAKEN |
24 | 0x5d6dcb | 0xd3b6ba | 0xaeb6e5 | (*o) CRC-24; CRC-24/6.1; FlexRay-24 | CRC-24/FLEXRAY-A , CRC-24/FLEXRAY-B |
24 | 0x800063 | 0xc60001 | 0xc00031 | (*op) WCDMA-24 | CRC-24/LTE-B , CRC-24/OS-9 |
24 | 0x864cfb | 0xdf3261 | 0xc3267d | (*op) CRC-24-Radix-64 | CRC-24/LTE-A , CRC-24/OPENPGP |
30 | 0x2030b9c7 | 0x38e74301 | 0x30185ce3 | (*op) CRC-30 | CRC-30/CDMA |
31 | 0x04c11db7 | 0x76dc4190 | 0x42608edb | – | CRC-31/PHILIPS |
32 | 0x000000af | 0xf5000000 | 0x80000057 | (*p) FP-32, CRC-32K/3 | CRC-32/XFER |
32 | 0x04c11db7 | 0xedb88320 | 0x82608edb | (*p) IEEE 802.3; CRC-32 | CRC-32/BZIP2 , CRC-32/CKSUM , CRC-32/ISO-HDLC , CRC-32/JAMCRC , CRC-32/MPEG-2 |
32 | 0x1edc6f41 | 0x82f63b78 | < 0x8f6e37a0 | (*op) iSCSI; CRC-32C; CRC-32/4 | CRC-32/ISCSI |
32 | 0x741b8cd7 | 0xeb31d82e | 0xba0dc66b | (*o) CRC-32K/6.1 | CRC-32/MEF |
32 | 0x8001801b | 0xd8018001 | 0xc000c00d | – | CRC-32/CD-ROM-EDC |
32 | 0x814141ab | 0xd5828281 | 0xc0a0a0d5 | (*op) CRC-32Q | CRC-32/AIXM |
32 | 0xf4acfb13 | 0xc8df352f | < 0xfa567d89 | (*o) CRC-32/6 corrected | CRC-32/AUTOSAR |
32 | 0xa833982b | 0xd419cc15 | = 0xd419cc15 | CRC-32/5.1 | CRC-32/BASE91-D |
40 | 0x0004820009 | 0x9000412000 | 0x8002410004 | – | CRC-40/GSM |
64 | 0x000000000000001b | 0xd800000000000000 | 0x800000000000000d | (*p) FP-64, CRC-64-ISO | CRC-64/GO-ISO |
64 | 0x259c84cba6426349 | 0x92c64265d32139a4 | < 0x92ce4265d32131a4 | – | CRC-64/MS |
64 | 0xad93d23594c935a9 | 0x95ac9329ac4bc9b5 | < 0xd6c9e91aca649ad4 | (*p) Jones | CRC-64/REDIS |
64 | 0xad93d23594c93659 | 0x9a6c9329ac4bc9b5 | < 0xd6c9e91aca649b2c | – | CRC-64/NVME |
64 | 0x42f0e1eba9ea3693 | 0xc96c5795d7870f42 | 0xa17870f5d4f51b49 | (*o) CRC-64-ECMA | CRC-64/ECMA-182 , CRC-64/WE , CRC-64/XZ |
82 | 0x0308c0111011401440411 | 0x220808a00a2022200c430 | 0x218460088808a00a20208 | – | CRC-82/DARC |
Legend: < Lexically greater than its reciprocal in the Reflected column. *< Lexically greater than its reciprocal listed in the Zoo and in the Reflected column. = Palindromic polynomial. (*o) Multiple of (x + 1). (*p) Primitive polynomial. (*op) Product of a primitive polynomial and (x + 1).
[ Top of page ]