<P> A variant of the previous algorithm is to add all the "words" as unsigned binary numbers, discarding any overflow bits, and append the two's complement of the total as the checksum . To validate a message, the receiver adds all the words in the same manner, including the checksum; if the result is not a word full of zeros, an error must have occurred . This variant too detects any single - bit error, but the promodular sum is used in SAE J1708 . </P> <P> The simple checksums described above fail to detect some common errors which affect many bits at once, such as changing the order of data words, or inserting or deleting words with all bits set to zero . The checksum algorithms most used in practice, such as Fletcher's checksum, Adler - 32, and cyclic redundancy checks (CRCs), address these weaknesses by considering not only the value of each word but also its position in the sequence . This feature generally increases the cost of computing the checksum . </P> <P> A message that is m bits long can be viewed as a corner of the m - dimensional hypercube . The effect of a checksum algorithm that yields an n - bit checksum is to map each m - bit message to a corner of a larger hypercube, with dimension m + n (\ displaystyle m + n). The 2 corners of this hypercube represent all possible received messages . The valid received messages (those that have the correct checksum) comprise a smaller set, with only 2 corners . </P> <P> A single - bit transmission error then corresponds to a displacement from a valid corner (the correct message and checksum) to one of the m adjacent corners . An error which affects k bits moves the message to a corner which is k steps removed from its correct corner . The goal of a good checksum algorithm is to spread the valid corners as far from each other as possible, so as to increase the likelihood "typical" transmission errors will end up in an invalid corner . </P>

The check sum method of testing a rom