Comme vous le savez certainement, un numéro de sécurité sociale est constitué de 15 chiffres, qui obéissent à des règles particulières. Prenons par exemple le numéro 1 37 04 76 243 484 15
- le premier chiffre indique le sexe, 1 pour les hommes, 2 pour les femmes
- deux chiffres pour l’année de naissance (1937 dans notre cas)
- deux chiffres pour le mois de naissance (avril)
- deux chiffres pour le département de naissance (76)
- trois chiffres pour la commune
- trois chiffres pour le rang dans la commune
- et enfin deux chiffres, qui sont une clé, ici 15.
Dans ce billet, nous allons nous pencher sur ce concept de clé, que l’on retrouve dans de nombreux numéros comme ceux des numéros de comptes bancaires.
La formule de la clé
La clé est un procédé de vérification qui permet de détecter et, dans une certaine mesure, de corriger les erreurs dans les numéros de ce genre. Le principe en est que les deux chiffres de la clé dépendent de manière mathématique des 13 premiers chiffres du numéro. Dans le cas de la sécu, la formule mathématique est relativement simple, il s’agit de
Clé = 97 – N modulo 97
où N est le nombre formé des 13 premiers chiffres. Pour ceux qui l’auraient oublié, l’opération de « modulo » désigne le reste de la division entière. Dans notre cas, si on divise 1370476243484 par 97, on obtient 14128621067 et il reste 82, donc Clé = 97 – 82 = 15.
A quoi cela sert-il ? Eh bien imaginons que notre individu ait mal écrit son numéro et qu’il ait fait un 4 au lieu d’un 3 dans le second chiffre, il a alors écrit : 1 47 04 76 243 484 15. Alors on peut repérer qu’il y a une erreur : en effet la clé normalement associée à 1 47 04 76 243 484 est le numéro 10. Donc si les 13 premiers chiffres étaient corrects, la clé devrait être 10, et pas 15. Il y a une incohérence.
Corriger automatiquement les erreurs
Est-il possible d’aller plus loin, et de corriger automatiquement cette erreur, même sans savoir où elle se situe ? Nous allons considérer le numéro erroné 1 47 04 76 243 484, supposer que la clé 15 est correcte, et essayer de retrouver quelle est la faute. Pour cela, on essaye à la main toutes les corrections possibles, en calculant à chaque fois la clé que ça donnerait, jusqu’à tomber sur une substitution qui donne la clé correcte : 15. Voici un exemple de ce qu’on obtient en partant du numéro erroné, et en essayant par exemple de substituer l’avant-avant-dernier chiffre (4) par toutes les autres possibilités.
Tentative Clé
1470476243184 19 1470476243284 16 1470476243384 13 1470476243484 10 1470476243584 7 1470476243684 4 1470476243784 1 1470476243884 95 1470476243984 92 1470476243084 22
On voit qu’aucune de ces tentatives de substitution ne permet de retrouver la clé 15, donc aucune n’est la bonne. Il n’y a plus qu’à répéter ce petit jeu de substitution avec toutes les positions, jusqu’à en trouver une qui donne la clé 15. Si on considère que le premier chiffre ne peut être que 1 ou 2, et que le quatrième ne peut être que 0 ou 1 (c’est le premier chiffre d’un mois), il y a au total 11*9+2 = 101 substitutions à essayer. Figurez-vous que j’ai fait l’exercice, et que dans notre cas il n’y en a qu’une seule qui marche : changer le deuxième chiffre (4) en 3 ! Nous avons donc bien retrouvé et corrigé l’erreur.
Une formule optimisée
Dans ce cas on a bien été aidé par le fait qu’il n’y avait qu’une seule possibilité de correction qui permette de retrouver la clé d’origine. Il n’y a donc pas d’ambiguïté sur la source de l’erreur. En fait grâce à la formule de la clé, qui a été bien choisie, c’est très souvent le cas. Cela signifie qu’il est (presque) impossible de changer un chiffre dans le numéro sans affecter la clé, et que donc tout erreur sera repérée, et pourra être corrigée presque sans ambiguïté. Bien entendu cela suppose 1) que l’erreur ne porte pas sur la clé et 2) qu’il n’y a qu’une seule erreur. Si on s’autorise à substituer deux chiffres, alors on est plus certain de rien.
Une question que l’on peut se poser concerne le choix du nombre pivot 97 dans la formule. Pour que la clé tienne sur 2 chiffres, il faut un pivot à deux chiffres. En outre si on choisit un pivot P, la clé prendra des valeurs entre 0 et P-1, on a donc intérêt à prendre le pivot le plus grand possible pour que la clé prenne le plus de valeurs possibles et minimiser les situations d’ambiguïté. Si on choisit P=11 il est impossible de corriger de manière univoque l’erreur. Mais alors pourquoi ne pas prendre 99 ? Je suppose que le fait que 97 soit premier doit avoir un rôle pour disperser le plus possible les valeurs des clés.
Si le pivot avait été 99, la clé « normale » de mon numéro 1 37 04 76 243 484 aurait été 37. Si on commet l’erreur précédente et qu’on écrit 1 47 04 76 243 484 (dont la clé serait normalement 27), on se rend compte qu’il y a une erreur. Mais au moment de rechercher les substitutions qui redonneraient la clé correcte de 37, on se rend compte qu’il y en a 5 qui sont possibles ! Et pas moyen de savoir quelle substitution est celle qui permet de corriger l’erreur.
En faisant divers tests numériques, on peut se rendre compte que si le pivot n’est pas premier, cette situation d’ambiguïté se produit beaucoup plus souvent ! Une idée de démonstration ?
Crédits
Carte vitale, Wikimedia Commons
4 Comments
Article sympa !
J’aurai pris 93 au lieu de 97. Avec 97 on trouve des cas pathologiques du genre :
1 21 01 76 381 136 clé : 63
Il existera toujours des cas pathologiques (j’ai une clef qui me permet de corriger l’erreur, mais j’ai plusieurs possibilités) car si je ne fais qu’une erreur, j’ai 10 chiffres décimaux (10×9 erreurs) + le mois (11 erreurs) + le genre (1 erreur) soit 102 erreurs possibles. la clé n’est que sur 2 chiffres (100 possibilités), donc j’ai toujours la possibilité d’un erreur avec 2 corrections possibles. Mais la méthode du modulo ne permet pas d’atteindre ce meilleur possible (pour 97, l’exemple que je donne a 5 « bonnes corrections », pour 93, j’ai trouvé des exemples à 3 possibilités).
Il faudrait un calcul de clef plus complexe pour l’atteindre avec certitude.
J’avoue
Les codes correcteurs d’erreur sont un outil important pour l’efficacité des réseaux de télécom. Et on fait des choses beaucoup plus sioux qu’un simple modulo …
Voir par exemple :
http://fr.wikipedia.org/wiki/Code_correcteur
http://fr.wikipedia.org/wiki/Turbo_code
Bonjour, je n’ai pas d’idée de démonstration et ça me hante 🤣😅 je n’arrive pas à comprendre pourquoi la répartition des modulos changerait en fonction du diviseur ? Les restes des divisions euclidiennes vont s’incrementer entre 0 et le diviseur-1. Donc plus celui ci est grand plus l’intervalle des restes possibles est grand mais reste cyclique non ? Je suis vraiment preneur d’une démonstration ou d’une perception intuitive du phénomène svp. Merci d’avance