evaluate this permutation quickly use that to get that This is the same reflection being iteratively multiplied. Use that reflections are their own inverse. In practice the algorithm is implemented using simple lookup tables without needing to understand how to generate those tables from the underlying group and permutation theory. This is more properly considered a family of algorithms, as other permutations work too. Verhoeff's notes that the particular permutation, given above, is special as it has the property of detecting 95.3% of the phonetic errors. The strengths of the algorithm are that it detects all transliteration and transposition errors, and additionally most twin, twin jump, jump transposition and phonetic errors. The main weakness of the Verhoeff algorithm is its complexity. The calculations required cannot easily be expressed as a formula in say . Lookup tables are required for easy calculation. A similar code is the Damm algorithm, which has similar qualities. Table-based algorithm The Verhoeff algorithm can be implemented using three tables: a multiplication table d, an inverse table inv, and a permutation table p. The first table, d, is based on multiplication in the dihedral group D5. and is simply the Cayley table of the group. Note that this group is not commutative, that is, for some values of j and k, d(j,k) ≠ d(k, j). The inverse table inv represents the multiplicative inverse of a digit, that is, the value that satisfies d(j, inv(j)) = 0. The permutation table p applies a permutation to each digit based on its position in the number. This is actually a single permutation applied iteratively; i.e. p(i+j,n) = p(i, p(j,n)). The Verhoeff checksum calculation is performed as follows: Create an array n out of the individual digits of the number, taken from right to left (rightmost digit is n0, etc.). Initialize the checksum c to zero. For each index i of the array n, starting at zero, replace c with . The original number is valid if and only if . To generate a check digit, append a , perform the calculation: the correct check digit is . Examples Generate a check digit for 236: c is 2, so the check digit is inv(2), which is 3. Validate the check digit 2363: c is zero, so the check is correct. References External links Detailed description of the Verhoeff algorithm Modular arithmetic Checksum algorithms Error detection and correction 1969 introductions