Comment calculer la clé du numéro qui compose votre compte bancaire ou votre numéro de sécurité sociale ? Vous allez voir que la notion de nombres premiers n’est pas étrangère à cette question…
Comment calculer la clé d’un numéro (sécurité sociale, compte bancaire,…): rappels sur les nombres premiers
Un nombre est dit premier s’il n’est divisible que par lui-même et 1.
À ce titre, “1” n’est pas un nombre premier.
Pour avoir la liste des premiers nombres premiers, on peut par exemple utiliser le crible d’Eratosthène en Python (pourquoi pas ?)
Les cents premiers nombres premiers sont :
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Remarquez que le dernier nombre premier inférieur à 100 est 97. Je dis ça, je dis rien…
Calculer la clé d’un numéro de sécurité sociale avec une division euclidienne
Je vais prendre un numéro de sécurité sociale au hasard:
Comment calculer sa clé ?
Avant tout, effectuons la division euclidienne de ce nombre par… 97 !
\documentclass{article} \usepackage{xlop} \begin{document} \opidiv{1891275125012}{97} \end{document}
Je ne me suis pas embêté, et ai fait cela en \(\LaTeX\). Pas folle la guêpe!
Maintenant, on soustrait à 97 le reste de cette division euclidienne:
97 – 15 = 82
La clé de contrôle de ce numéro de sécurité sociale est donc 82.
Calculer la clé d’un numéro de compte français avec une division euclidienne
Un numéro de compte bancaire est composé de 3 parties:
- le code établissement (que l’on va noter A),
- le code guichet (noté B),
- le numéro de compte dans la banque (noté C).
Nous allons effectuer la division euclidienne de 89A+15B+3C par 97 (encore lui sacré vin diou!).
Une fois trouvé le reste de cette division, on le soustraira à 97, comme précédemment.
Prenons par exemple le compte (fictif):
13335 | 00301 | 04123456789 |
A | B | C |
89A+15B+3C = 12371561697
97 – 16 = 81
La clé est donc égale à 81. Bien joué Barnabé !
Il arrive cependant que des compte possèdent des lettres. Dans ce cas, il faut les remplacer par un nombre comme indiqué dans le tableau suivant:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|
A | B | C | D | E | F | G | H | I |
J | K | L | M | N | O | P | Q | R |
S | T | U | V | W | X | Y | Z |
Pour votre plus grand plaisir, je vous propose une fonction Python pour vérifier si un IBAN est correct:
def cle(iban): L = {} alphabet = 'ABCDEFGHIJKLMNOPQR' alphabet2 = 'STUVWXYZ' n = 1 for lettre in alphabet: L[lettre] = str(n) n = (n + 1) % 10 if n == 0: n += 1 n = 2 for lettre in alphabet2: L[lettre] = str(n) n = n+1 iban = iban.replace(' ','') for c in iban: if c in L: iban = iban.replace(c,L[c]) K = int( iban[-2:] ) iban = iban[4:-2] R = ( 89 * int( iban[0:5] ) + 15*int( iban[5:10] ) + 3*int( iban[10:] ) ) % 97 N = 97 - R return N == K
Ce script est basé sur les opération précédentes.
>>> cle('FR7613335003010412345678981')
True
>>> cle('FR7613335003010412345678957')
False
Pourquoi ces calculs ?
En fait, la clé de contrôle d’un numéro de compte en France est le nombre K de deux chiffres tel que le nombre \(R\) défini par:$$R=A\times10^{18}+B\times10^{13}+C\times10^{2} + K$$ est tel que \(R \equiv 0 \mod 97\).
Remarquez que les exposants ne sont pas choisis au hasard et sont en fonction du nombre de chiffres qu’il y a dans le numéro de compte. C’est pour cela que ces calculs ne fonctionnent pas sur un compte étranger par exemple.
Il faut donc l’adapter aux différentes normes…
Je ne connaissais pas le package Latex XLOP, merci de me l’avoir fair découvrir, il me servira !
Pour les numéros de cartes bancaires, il y a un autre algorithme assez simple (algorithme de Luhn) pour déterminer le dernier chiffre de contrôle.
J’ai fait une vidéo à ce sujet : https://www.youtube.com/watch?v=oJ_pYopnoR0
Algorithme inutile donc essentiel. Je me suis amusé à le réécrire 🙂
Merci.