A Permutation-Free Length 3 Decimal Check Digit Code
Larry A. Dunning
TL;DR
The paper tackles the need for a permutation-free, length-3 decimal check-digit code capable of detecting all cyclic errors and permutations of codeword digits, including phonetic misorderings. It achieves this by modeling the code as a latin-square-derived orthogonal array of triplets and solving a mixed-integer linear program to enforce both latin-square structure and phonetic constraints, yielding a permutation-free code (Code47374800) and a family of six conjugate, pairwise-disjoint codes via $S_3$-based permutations. A central contribution is the demonstration that all cyclic errors and any digit permutation are detectable, while still avoiding certain triple-error scenarios. The work provides a framework for constructing robust, compact, length-3 check digits and extends naturally to multiple disjoint codes through group actions, with practical relevance for static, one-time assignments in constrained settings.
Abstract
In 1969 J. Verhoeff provided the first examples of a decimal error detecting code using a single check digit to provide protection against all single, transposition and adjacent twin errors. The three codes he presented are length 3-digit codes with 2 information digits. Existence of a 4-digit code would imply the existence of 10 such disjoint 3-digit codes. Apparently, not even a pair of such disjoint 3-digit codes is known. The code developed herein, has the property that the knowledge of any two digits is sufficient to determine the entire codeword even though their positions were unknown. This fulfills Verhoeff's desire to eliminate "cyclic errors". Phonetic errors, where 2 digit pairs of the forms X0 and 1X are interchanged, are also eliminated.
