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
License information
Copyright (C) 2013 Johannes Spielmann
This module, damm
, is licensed under the terms of the GNU General Public Licenses as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
For a full description of the license, please see the file
LICENSE