Часть об использовании математических формул для генерации CR C полиномов несколько вводит в заблуждение. Число 1 бит в полиноме CR C является максимально возможным расстоянием Хемминга (HD) для полинома, и обычно фактическое расстояние Хемминга будет меньше в зависимости от длины данных. Максимальное обнаружение ошибок по битам - это расстояние Хэмминга - 1.
Обычно полиномы CR C, которые обнаруживают большее количество бит, являются произведением нескольких простых полиномов. Например, для 32-битного CR C, который может обнаружить до 7 ошибок для данных + cr c длина = 1024 бит, 33-битный CR C полином 0x1f1922815 = 0x787 * 0x557 * 0x465 * 0x3 * 0x3. Коэффициент 0x3 обнаружит любое нечетное количество битовых ошибок, поэтому CR C должен обнаружить все возможные 6-битные ошибки в 1024 битах.
Мне неизвестна формула для определения максимальной битовой ошибки обнаружение и, как правило, несколько оптимизированный поиск методом грубой силы. В качестве примера, скажем, проверяется 32-битный полином CR C, чтобы увидеть, может ли он обнаружить все 6-битные ошибки для данных + cr c длиной 1024 бит, количество возможных 6-битных шаблонов ошибок в 1024 битах гребень (1024,6) = 1 577 953 087 760 896. Чтобы свести это к чему-то разумному, число возможных 3-битных ошибок, comb (1024,3) = 178 433 024, используется для создания большой таблицы, каждая запись которой содержит CR C и 3-битные индексы. Таблица сортируется и затем используется для проверки коллизий, в которых CR C 3-битного шаблона совпадает с CR C другого 3-битного шаблона. Также потребуется проверка на сбой для 4-битных комбинаций (проверка на наличие коллизий между двумя различными 2-битными комбинациями).
Как правило, когда длина данных уменьшается, максимальное количество битов ошибок, гарантированных для обнаружения, увеличивается. Вот ссылка на набор полиномов CR C и их возможность обнаружения ошибок.
https://users.ece.cmu.edu/~koopman/crc/crc32.html
На странице примечаний объясняются записи в таблице:
http://users.ece.cmu.edu/~koopman/crc/notes.html