Computing the Damm check digit

## Damm algorithm decimal check digit

Note that check digits are NOT used for verification of data transfers between computers – use a CRC or a hash for that purpose! Check digits are used to check manual entry of a digit into a computer system.

A Damm check digit is a single check digit that can detect any single-digit error as well as any adjacent-digit transpositions. The digit computed in this module also detects some important phonetic errors (13<->30, 14<->40, … 19<–>90).

This makes the Damm check digit better than other, more well-known check digits like the Luhn code (used in credit cards) and the ISBN base-11 check digit. It is equal in detection strength to a Verhoeff check digit, but much simpler to compute.

Furthermore, a hexadecimal Damm check digit was added. This single hexadecimal check digit that detects every single-digit error as well as any adjacent-digit transpositions. The digit computed in this module also detects some important phonetic errors (13<->30, 14<->40, … 19<–>90). It also detects all jump-transposition errors (abc -> cba), 93.5 % of all twin digit errors (aa -> bb) and 93.5 % of all jump twin digit errors (aca -> bcb).

There are four functions in this module: encode, encode16, check and check16. The first two, encode and encode16 are used to calculate the check digit for a number that you have. Pass in a string with the number you want encoded and get a string with the check digit back. The other two, check and check16 are used to check that a number that was entered was entered correctly. Pass in a string with a number including check digit and get back True/False.

## Damm algorithm

The Damm check digit is computed by starting with a check digit of zero and then continually multiplying this check digit with the digits of a given number, using the multiplication of a totally anti-symmetric quasigroup. The properties and the selection of the group ensure the qualities of the check digit stated above.

For further reference on how the algorithm works see http://en.wikipedia.org/wiki/Damm_algorithm

## Project details

This version 1.0 0.1