error detection hash function noncryptographic hash check digit parity modular sum weighted sum ones complement twos complement fletcher checksum adler-32 crc cyclic code linear code polynomial code