Outil pour calculer et vérifier des numéros avec l'algorithme de Damm. Générer des chiffres de contrôle, détecter les erreurs de saisie et sécuriser vos codes-barres et identifiants.
Algorithme de Damm - dCode
Catégorie(s) : Somme de Contrôle, Arithmétique
dCode est gratuit et ses outils sont une aide précieuse dans les jeux, les maths, les énigmes, les géocaches, et les problèmes à résoudre au quotidien !
Une suggestion ? un problème ? une idée ? Écrire à dCode !
L'algorithme de Damm est un système de calcul de chiffre de contrôle / checksum conçu pour détecter les erreurs de saisie dans les identifiants numériques décimaux (numéros de série, codes administratifs, etc.). Conçu pour être simple à mettre en œuvre à la main ou par programmation, cet algorithme permet de détecter toutes les erreurs de substitution simple, toutes les transpositions adjacentes de chiffres, ainsi qu'une partie des erreurs multiples.
Le calcul repose sur l'utilisation d'une table de substitution unique de type quasigroupe d'ordre 10, dite table de Damm.
Le calcul commence avec c = 0. Pour chaque chiffre du nombre, lu de gauche à droite, calculer c = table[c][chiffre].
| 0 | 3 | 1 | 7 | 5 | 9 | 8 | 6 | 4 | 2 |
| 7 | 0 | 9 | 2 | 1 | 5 | 4 | 8 | 6 | 3 |
| 4 | 2 | 0 | 6 | 8 | 7 | 1 | 3 | 5 | 9 |
| 1 | 7 | 5 | 0 | 9 | 8 | 3 | 4 | 2 | 6 |
| 6 | 1 | 2 | 3 | 0 | 4 | 5 | 9 | 7 | 8 |
| 3 | 6 | 7 | 4 | 2 | 0 | 9 | 5 | 8 | 1 |
| 5 | 8 | 6 | 9 | 7 | 2 | 0 | 1 | 3 | 4 |
| 8 | 9 | 4 | 5 | 3 | 6 | 2 | 0 | 1 | 7 |
| 9 | 4 | 3 | 8 | 6 | 1 | 7 | 2 | 0 | 5 |
| 2 | 5 | 8 | 1 | 4 | 3 | 6 | 7 | 9 | 0 |
Exemple : Le chiffre de contrôle final est la valeur de c après traitement de tous les chiffres.
Pour vérifier un nombre, ajouter le chiffre de contrôle à la fin, puis traiter tous les chiffres : le résultat final doit être 0.
Exemple : Exemple avec 123 :
Exemple :
| Itération | Chiffre | Table | c |
|---|---|---|---|
| #1 | 1 | table[0][1]=3 | 3 |
| #2 | 2 | table[3][2]=5 | 5 |
| #3 | 3 | table[5][3]=4 | 4 |
L'algorithme garantit la détection des types d'erreurs suivants :
— Toutes les erreurs de substitution simple (remplacement d'un chiffre par un autre, ex. : $ 1234 \rightarrow 1239 $).
— Toutes les transpositions adjacentes (inversion de deux chiffres voisins, ex. : $ 1234 \rightarrow 1324 $).
— Une partie des erreurs multiples.
En revanche, certaines permutations complexes ne sont pas détectées, telles que les permutations circulaires (ex. : $ 1234 \rightarrow 4123 $) ou certaines transpositions non adjacentes.
La complexité temporelle est linéaire en $ O(n) $, où $ n $ représente le nombre de chiffres de la séquence, puisque chaque chiffre est examiné une unique fois.
La complexité spatiale est constante en $ O(1) $ : la table de Damm est de taille fixe ($ 10 \times 10 $), ce qui nécessite un espace mémoire minimal et indépendant de la longueur de la donnée traitée.
La table de Damm est construite à partir d'un quasigroupe d'ordre 10 qui possède des propriétés algébriques spécifiques garantissant la détection des erreurs de transposition et de substitution. Plus précisément, la diagonale principale de la table ne contient que des zéros ($ N(x, x) = 0 $), et la structure mathématique respecte des conditions d'antisymétrie stricte qui empêchent les collisions lors d'échanges de chiffres adjacents.
Dans la table de Damm, $ \text{table}[0][0] = 0 $. Comme l'accumulateur démarre à $ c = 0 $, tout zéro placé en tête de séquence laisse $ c $ inchangé à $ 0 $. Ainsi, 123, 0123 et 00123 produisent exactement le même chiffre de contrôle ($ 4 $).
Si la longueur de l'identifiant est variable et que les zéros initiaux sont significatifs, imposer une longueur fixe ou préfixer le nombre avec sa longueur avant le calcul.
Oui, la méthode s'étend à n'importe quelle base $ n $ dès lors qu'il existe un quasigroupe faiblement totalement antisymétrique d'ordre $ n $. H. Michael Damm a démontré l'existence de tels quasigroupes pour tous les ordres $ n \neq 2 $ et $ n \neq 6 $ (utilisation possible en base $ 16 $ hexadécimale, base $ 32 $ ou base $ 36 $ alphanumérique, mais exclusion de la base $ 2 $ binaire et de la base $ 6 $).
L'algorithme a été introduit en 2004 par le mathématicien allemand H. Michael Damm dans sa thèse de doctorat intitulée Totally Antisymmetric Quasigroups.
dCode se réserve la propriété du code source pour "Algorithme de Damm". Tout algorithme pour "Algorithme de Damm", applet ou snippet ou script (convertisseur, solveur, chiffrement / déchiffrement, encodage / décodage, encryptage / décryptage, traducteur) ou toutes fonctions liées à "Algorithme de Damm" (calculer, convertir, résoudre, décrypter / encrypter, déchiffrer / chiffrer, décoder / encoder, traduire) codés en langage informatique (Python, Java, C#, PHP, Javascript, Matlab, etc.) ou toute base de données, ou accès API à "Algorithme de Damm" ou tout autre élément ne sont pas publics (sauf licence open source explicite). Idem avec le téléchargement pour un usage hors ligne sur PC, mobile, tablette, appli iPhone ou Android.
Rappel : dCode est une ressource éducative et pédagogique, accessible en ligne gratuitement et pour tous.
Le contenu de la page "Algorithme de Damm" ainsi que ses résultats peuvent être copiés et réutilisés librement, y compris à des fins commerciales, à condition de mentionner dCode.fr comme source (Licence de libre diffusion Creative Commons CC-BY).
L'export des résultats est gratuit et se fait simplement en cliquant sur les icônes d'export ⤓ (format .csv ou .txt) ou ⧉ copier-coller.
Pour citer dCode.fr sur un autre site Internet, utiliser le lien :
Dans un article scientifique ou un livre, la citation bibliographique recommandée est : Algorithme de Damm sur dCode.fr [site web en ligne], consulté le 12/11/2026,