Les ordinateurs en état de marche et avec un logiciel correct ne font pas d’erreurs. Cependant, les gens font beaucoup d’erreurs (y compris écrire de mauvais logiciels ou casser des ordinateurs). Dans les cercles de qualité, il y a un terme japonais, joug poka, ce qui signifie approximativement « évitement des erreurs ». L’idée est d’éviter les erreurs en les rendant trop évidentes pour qu’elles se produisent. Par exemple, considérons une carte SIM dans votre téléphone. Le petit coin en diagonale signifie qu’il ne va que dans un sens. Si vous le mettez dans le mauvais sens, c’est évidemment faux.

Pour réussir à joug poka, vous devez être capable d’imaginer ce qu’un utilisateur peut faire de mal, puis de trouver un moyen de montrer clairement que c’est mal. Il y a des exemples de cela tout autour de nous et parfois nous ne le savons même pas. Par exemple, qu’ont en commun votre numéro de carte de crédit, le code VIN de votre voiture et un code UPC sur une boîte de haricots ?

La réponse est qu’ils sont tous de longues chaînes de chiffres qui sont notoirement difficiles à saisir correctement pour les humains. Les gens manquent des chiffres ou les transposent. Donc, les personnes qui écrivent des applications qui prennent des chiffres comme celui-ci veulent souvent vérifier pour s’assurer que la personne n’a pas fait d’erreur.

Bien sûr, un nombre est un nombre, n’est-ce pas ? Si je vous dis d’entrer un code postal à cinq chiffres, je peux déterminer si vous en mettez quatre ou six, mais il est difficile de savoir si 77508 ou 77580 est celui que vous vouliez dire. C’est pourquoi les nombres longs et importants ont un ou plusieurs chiffres de contrôle.

Un chiffre de contrôle est comme une somme de contrôle ou un CRC – vous le calculez à partir des autres chiffres du nombre et si votre calcul ne correspond pas au chiffre de contrôle que vous avez obtenu, alors quelque chose a été mal inséré.

Un exemple simple

Pour simplifier les choses, supposons que vous ayez un code PIN à quatre chiffres 0000 à 9999 et que nous voulions créer un code à cinq chiffres avec un chiffre de contrôle. Une façon simple de le faire serait d’ajouter tous les chiffres ensemble et de jeter tout sauf le dernier chiffre (c’est-à-dire le reste après division par 10 ou modulo 10).

Par exemple 0052 devient 00527 et 9522 devient 95228. Simple, non ? Vous savez maintenant que 10118 n’est pas un numéro valide. Bien sûr, 00527 est valide mais 00257 ou 52007 l’est aussi. Alors peut-être pouvons-nous faire mieux.

Vrai vie

Dans la vraie vie, les algorithmes essaient de prendre en compte la position des chiffres. Il y a plusieurs façons de le faire et, comme vous vous en doutez, il y a beaucoup de maths pour décider ce qui est le mieux. De nombreux systèmes utilisent un algorithme pondéré où chaque chiffre a un poids différent, généralement un 1, 3, 7 ou 9 sans deux chiffres adjacents ayant le même poids. Étant donné que ces nombres sont premiers avec 10, tout changement d’un seul chiffre entraîne un chiffre de contrôle différent. L’utilisation de cette pondération capture également environ 90 % des transpositions simples, autres que celles impliquant un 5 et un 2 (puisque 5 et 2 se multiplient par 10).

Par exemple, le code UPC omniprésent utilise des poids de 1 et 3 pour les numéros alternatifs, le chiffre 1 étant le chiffre le plus à droite (autre que le chiffre de contrôle) suivi des chiffres 2, 3, et ainsi de suite vers la gauche. L’algorithme est :

  1. En ignorant le chiffre de contrôle, commencez par la droite et ajoutez tous les chiffres dans les positions impaires ensemble
  2. Multipliez la somme par 3 (le poids pour les chiffres impairs)
  3. En ignorant le chiffre de contrôle, ajoutez les chiffres restants au total cumulé
  4. Prenez le dernier chiffre de la somme (c’est-à-dire le reste après division par 10); si ce chiffre n’est pas zéro, soustrayez-le de 10

Par exemple, j’ai une bombe d’air pulvérisée sur mon bureau avec un UPC de 681131309516. Les six premiers chiffres sont propres à l’entreprise. Les cinq chiffres suivants sont un identifiant unique et le dernier est le chiffre de contrôle. Cela signifie que les chiffres en position impaire sont 1, 9, 3, 3, 1 et 6. Les chiffres en position paire sont 5, 0, 1, 1 et 8. La première somme est alors 23 et la multiplication par 3 donne 69. Les chiffres pairs donnent 15 pour un total général de 84 et un chiffre de contrôle préliminaire de 4. Comme ce n’est pas un zéro, le vrai chiffre de contrôle est 10-4 ou 6. Essayez de changer n’importe quel nombre ou d’échanger deux nombres entre les groupes et voyez quel résultat vous obtenez.

Encore mieux

ISBN-10 est encore plus robuste. Il utilise un nombre à dix chiffres où chaque chiffre a un poids différent de 1 à 10 et prend le reste après avoir été divisé par 11. Cela détecte toutes les erreurs courantes, mais peut entraîner un chiffre de contrôle de 10 qui est représenté par un X.

Il existe d’autres algorithmes encore plus robustes tels que Damm, Verhoeff et Luhn. Vous pouvez également ajouter plus de chiffres de contrôle pour obtenir de meilleures performances, tout comme plus de bits d’un CRC sont généralement plus robustes.

Sens

Ces chiffres de contrôle ne sont pas conçus pour agir comme un dispositif de sécurité. Habituellement, l’algorithme est bien connu et facile à comprendre. Ce n’est donc pas que les méchants ne puissent pas comprendre comment créer de faux numéros de carte de crédit à cause des chiffres de contrôle. Ils fournissent simplement un peu joug poka Ainsi, un programme peut immédiatement détecter les erreurs courantes dans des nombres comme ceux-ci. Quelque chose à retenir la prochaine fois que vous concevez une interface ou toute autre chose sujette aux erreurs humaines.

Bien sûr, si vous voulez vous protéger contre les erreurs informatiques, mieux vaut utiliser un CRC. Il existe également d’autres moyens de détecter les erreurs si vous ne vous inquiétez pas que les humains calculent les chiffres de contrôle.