Позволю себе немного дополнить и уточнить пост Сергея для придания ему математической точности.
Цитата
CRC - это остаток от деления массива данных (который берется как очень длинное число) на полином. По аналогии с простым делением - если A/B дает в остатке C, то (A-C)/B дадут в остатке ноль.
Здесь под А нужно понимать не исходный массив данных как он есть, а массив исходных данных с дописанными к нему в конце нулевыми байтами (для CRC-16 - это 2 байта). Простое деление исходного массива без дополнения его сзади нулями на порождающий полином не есть циклический код.
Во всех готовых реализациях (аппаратных и программных) это "дописывание" происходит само собой.
Это на случай, если кто-то захочет проверить код "на бумажке", а у него не будет сходиться ответ.
Сообщение отредактировал DiMomite - Oct 6 2007, 22:21