Best CRC Polynomials
Philip Koopman, Carnegie Mellon University
***CRC & Checksum
Book*** | Get software to compute HD
lengths for yourself. |
Pointers to CRC
Resources
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.
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)
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
0x98
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)
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
5
0x25d467
5
0x4b79d1
7
0xd9588b
HD=14
5
0x4b79d1
6
0xb73e91
HD=15
Max length
at HD /
Polynomial
CRC Size (bits)
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)
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.
- 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.
Creative Commons License
This work is licensed under a
Creative
Commons Attribution 4.0 International License.
Please note that if any data errors or other issues are identified they will
be updated at this page, but not necessarily anywhere that has copied these
results. Therefore, you should always confirm at this URL:
http://users.ece.cmu.edu/~koopman/crc/
that you have the most current version of data before using it.