Best CRC Polynomials

Philip Koopman, Carnegie Mellon University

Best CRCs | CRC Selection | CRC Zoo | Checksum and CRC Blog

These are the "Best" general-purpose CRC polynomials with specific Hamming Distance Properties. (See also: Notation and copyright statement). IMPORTANT NOTE: These are "BEST" polynomials under an assumption of a low, constant random independent BERsuch as you'd find in communication networks. If you have a BER that is higher than, say, 1 bit in 100,000, or is non-constant, or is non-random/non-independent, then you need to understand more before using these polynomials.

This data includes work-in-progress results.

CRC Summary Tables

Below is a table of CRC Polynomial performance by Hamming Distance. Click a CRC size for detailed information about CRC polynomials.

 Max length at HD / Polynomial CRC Size (bits) 3 4 5 6 7 8 9 10 11 12 13 14 15 16 HD=2 0x5 0x9 0x12 0x33 0x65 0xe7 0x119 0x327 0x5db 0x987 0x1abf 0x27cf 0x4f23 0x8d95 HD=3 4  0x5 11  0x9 26  0x12 57  0x33 120  0x65 247  0xe7 502  0x119 1013   0x327 2036   0x5db 4083   0x987 8178   0x1abf 16369   0x27cf 32752   0x4f23 65519   0x8d95 HD=4 10 0x15 25 0x23 56 0x5b 119 0x83 246 0x17d 501 0x247 1012 0x583 2035 0x8f3 4082 0x12e6 8177 0x2322 16368 0x4306 32751 0xd175 HD=5 4 0x72 9 0xeb 13 0x185 21 0x2b9 26 0x5d7 53 0xbae 52 0x1e97 113 0x212d 136 0x6a8d 241 0xac9a HD=6 4 0x9b 8 0x13c 12 0x28e 22 0x532 27 0xb41 52 0x1e97 57 0x372b 114 0x573a 135 0x9eb2 HD=7 5 0x29b 12 0x571 11 0xa4f 12 0x12a5 13 0x28a9 16 0x5bd5 19 0x968b HD=8 4 0x4f5 11 0xa4f 11 0x10b7 11 0x2371 12 0x630b 15 0x8fdb HD=9 5 0x5a47 6 0xe92f HD=10 5 0xed2f HD=11

 Max length at HD / Polynomial CRC Size (bits) 17 18 19 20 21 22 23 24 HD=2 0x16fa7 0x23979 0x6fb57 0xb5827 0x1707ea 0x308fd3 0x540df0 0x8f90e3 HD=3 131054  0x16fa7 262125  0x23979 524268  0x6fb57 1048555  0xb5827 2097130  0x1707ea 4194281  0x308fd3 8388584  0x540df0 16777191  0x8f90e3 HD=4 65518 0x1165d 131053 0x25f53 262124 0x77b0f 524267 0xc1acf 1048554 0x10df8f 2097129 0x248794 4194280 0x400154 8388583 0x9945b1 HD=5 240 0x1724e 493 0x39553 494 0x5685a 1005 0xc8a89 1004 0x1edfb7 2025 0x2a952a 2026 0x6bc0f5 4073 0x98ff8c HD=6 240 0x1724e 240 0x32c69 494 0x5685a 494 0xe2023 1004 0x1edfb7 1004 0x395b53 2026 0x6bc0f5 2026 0xbd80de HD=7 46 0x1751b 45 0x25f6a 46 0x50b49 49 0x8810e 106 0x12faa5 105 0x289cfe 106 0x5e2419 231 0x880ee6 HD=8 22 0x11bf5 45 0x25f6a 45 0x779c7 45 0xd41cf 48 0x198313 105 0x289cfe 105 0x469d7c 105 0xcba785 HD=9 8 0x123bd 11 0x27bbc 13 0x7573f 21 0xbe73e 20 0x16e976 22 0x2aedd3 26 0x53df6e 39 0xed93bb HD=10 6 0x176a7 8 0x2e7de 10 0x44f75 13 0xe6233 20 0x16e976 20 0x247bc4 24 0x463b77 26 0xc7ad89 HD=11 5 0x26a3d 7 0x6d133 11 0x8d3cc 10 0x165751 12 0x36f627 24 0x463b77 23 0x8cd929 HD=12 5 0x51d79 7 0x9d587 10 0x165751 10 0x22efb7 13 0x49ad52 23 0x8cd929 HD=13 6 0x2dce91 5 0x4b79d1 7 0xd9588b HD=14 5 0x4b79d1 6 0xb73e91 HD=15

 Max length at HD / Polynomial CRC Size (bits) 25 26 27 28 HD=2 0x101690c 0x33c19ef 0x5e04635 0x91dc1e3 HD=3 33554406  0x101690c 67108837  0x33c19ef 134217700  0x5e04635 268435427  0x91dc1e3 HD=4 16777190 0x10bba2d 33554405 0x278b495 67108836 0x745e8bf 134217699 0xb67b511 HD=5 4072 0x1b9189d 8165 0x2c45446 8166 0x6c3ff0d 16357 0x9037604 HD=6 4072 0x1b9189d 4072 0x2186c30 8166 0x6c3ff0d 8166 0xd120245 HD=7 230 0x136fd31 230 0x2bd893b 484 0x521f64b 483 0xb9ccb75 HD=8 230 0x136fd31 230 0x2bd893b 230 0x4cb658f 483 0xb9ccb75 HD=9 40 0x12b00d4 41 0x311e9ad 48 0x4429686 99 0xeaa72ab HD=10 40 0x12b00d4 40 0x32def69 41 0x51aff9a 48 0xacb6aed HD=11 24 0x162054b 24 0x248d3be 36 0x474fd47 35 0xb094a3e HD=12 23 0x15ed6a9 23 0x2bfbd8f 23 0x4258c0f 35 0xb094a3e HD=13 8 0x12728bf 9 0x2d7a067 11 0x6986313 15 0xe9dadcb HD=14 7 0x1291ccf 8 0x23bb612 9 0x6a611bf 11 0xaf74fc7 HD=15 5 0x251f66b 7 0x58695e3 8 0xcf11b95 HD=16 5 0x251f66b 6 0x65bd513 8 0xcf11b95 HD=17

 Max length at HD / Polynomial CRC Size (bits) 29 30 31 32 HD=2 0x16dfbf51 0x31342a2f 0x737e312b 0xad0424f3 HD=3 536870882  0x16dfbf51 1073741793  0x31342a2f 2147483616  0x737e312b 4294967263  0xad0424f3 HD=4 268435426 0x11c4dfb5 536870881 0x2254329d 1073741792 0x52aa4332 2147483615 0xc9d204f5 HD=5 16356 0x1cf492f3 32737 0x2adf3aaf 32738 0x74f9e7cb 65505 0xd419cc15 (**) HD=6 16356 0x1cf492f3 16356 0x2ad4a56a 32738 0x74f9e7cb 32738 0x9960034c (**) HD=7 484 0x12e8b5b6 993 0x2a9b3e15 992 0x60f2920b 992 0xf8c9140a (**) HD=8 483 0x13a46755 483 0x2017ed6a 992 0x60f2920b 992 0xf8c9140a HD=9 100 0x1e150a87 100 0x242c0684 100 0x6c740b8d 223 0x9d7f97d6 HD=10 100 0x1e150a87 100 0x242c0684 100 0x6c740b8d 100 0xb49c1c96 HD=11 35 0x1c27bd8b 36 0x34c8e00d 36 0x456a3501 38 0x85b9561d HD=12 35 0x1c27bd8b 35 0x2468c69c 35 0x6bee283f 36 0x950ebfae HD=13 14 0x13a6f65c 16 0x2b967ef9 18 0x6624b2eb 20 0x93b39b1b HD=14 14 0x13a6f65c 14 0x3c9a0b27 16 0x47e62564 19 0xa094afb5 HD=15 9 0x12ff393a 11 0x290d6d0e 12 0x52d246e1 15 0xa2572962 HD=16 8 0x15e165a6 9 0x23136e56 11 0x6d094c5d 13 0xe89061db HD=17 4 0x229df1ac 5 0x47d2d9ab 7 0xa86be4db HD=18 4 0x46e56a7c 5 0x973afb51 HD=19

(**) means that this is a temporary result which has approximately the longest possible dataword length at the specified HD, but might not be the "best" possible value. (For example, probably there is some as yet unknown result with a slightly longer dataword length at that HD or with lower weights at the same HD.) Ongoing computations will be used to update this value to the "best" value when available. In the meantime, there's nothing wrong with using this polynomial as long as it provides adequate properties for your application.

Additional polynomials (33-64 bits; Special Properties)

• For details about these polynomials, and for CRCs larger than 32 bits, see the CRC Zoo
• For specialized polynomials, see the CRC Selection page. This includes polynomials with combination properties and good polynomials with all zero terms after the lowest byte.

To use these tables: top number in each cell is maximum dataword length at that Hamming Distance. The bottom number in each cell is a "good" polynomial that gives at least that HD up to the indicated dataword length in implicit +1 notation. For example, the polynomial 0x247 is a 10-bit CRC that provides HD=4 (or better) up to 501 bit dataword length (501+10=511 bit codeword length). The corresponding polynomial is: 0x247=x^10 +x^7 +x^3 +x^2 +x +1, and is alternately known as 0x48f in explicit +1 notation. See the Polynomial Zoo for detailed information (or click the CRC size link at the top of each column). Additionally, see the tables below for more nuanced selection criteria.

Notes: Minimum dataword length evaluated for the above table is 4 bits. Grayed-out boxes mean that it has been confirmed that the HD at that row cannot be achived with a dataword length of 4 bits or longer. Color highlighted cells indicated work in progress/missing data.

Notation:

• For details on interpreting the data rows and data file formats, see Hamming Weight Data notes section.
• *p - primitive polynomial. This has optimal length for HD=3, and good HD=2 performance above that length.
• *o - odd bit errors detected. This has a factor of (x+1) and detects all odd bit errors (implying that even number of bit errors have an elevated undetected error rate)
• *op - odd bit errors detected plus primitive. This is a primitive polynomial times (x+1). It has optimal length for HD=4, and detects all odd bit errors.
• ** - HD confirmed, but minimum weight selection at maximum length has been approximated due to long run-time. In other words, this polynomial will perform as advertised, but there is a slight chance a slightly better polynomial exists that was not found due to less than an exhaustive search. This only applies to a few 32-bit and larger polynomials.

This web page and all data files are Copyrighted 2015-2018 by Philip Koopman, Carnegie Mellon University.