CRC Polynomials Evaluation Software

Philip Koopman, Carnegie Mellon University

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

This is a C++ program that computes the maximum length achievable at a particular HD for a given CRC polynomial. It also computes examples codewords to show why the HD cannot be achieved at longer dataword lengths than computed.

Program Usage Examples

Note: all polynomials are in implicit +1 format.

Interpreting Program Output:

Program Usage Notes:

While significant effort has been spent on ensuring accuracy, USE OF THIS SOFTWARE IS ENTIRELY AT YOUR OWN RISK. All warranties and assurances of fitness for purpose are disclaimed. In particular, this code has NOT been developed to safety critical software standards. You have the source code, so if you want to use this to validate CRC performance you should first assure yourself that you trust the source code (probably with the compiled optimization #define flag turned off). If someone has the resources and team depth to certify this code to an appropriate SIL I'd be delighted to redistribute that code. This source code is completely different than the Hamming Weight evaluation code, and uses generally different algorithms. All that having been said, if you find a bug let me know and I'll look into it as I have time. If someone would like to perform independent review and evaluation to ensure quality that would be great -- let me know.

Compiled with g++ 5.3.0 (GCC) with minimal library dependencies, but has been updated to use of -std=c++11
More recently compiled with g++ 6.4.0 (GCC). If you're getting run time errors please ensure that your copy of GCC is up to date. In several cases a GCC update has solved run-time problems.

The code is written to handle up to 64 bit CRCs. However, it is a brute force evaluation tool, so for large dataword lengths evaluation times can get long. 32-bit polynomials can be evaluated within reasonable time with a few particular HD value exceptions. Special case code for HD=3 and HD=4 evaluation helps, but does not attempt to exploit analytic properties of primitive polynomials.

This web page and all data files are Copyrighted 2015-2019 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: that you have the most current version of data before using it.

Change log: