En bref
Un numéro de sécurité sociale, un IBAN ou un SIRET n'est pas une suite de chiffres quelconque. Les derniers chiffres forment une clé, calculée à partir des autres. Elle sert à repérer une faute de frappe, et elle permet à un programme de savoir si un nombre ressemble à un vrai identifiant. Cet article refait les trois calculs sur des exemples, puis montre leurs limites : une clé juste ne prouve pas qu'un numéro existe.
À toute personne qui automatise le traitement de documents français (factures, e-mails, contrats) et se demande comment un outil reconnaît un identifiant dans un texte. Il n'y a pas besoin de savoir programmer pour suivre les calculs. Une section facultative donne le code pour les refaire dans un nœud Code n8n.
Dans un texte, on repère facilement une suite de 13 chiffres. Reste à savoir s'il s'agit d'un numéro de sécurité sociale ou d'une simple référence de commande.
Pour aider à trancher, les administrations et les banques ajoutent à chaque identifiant une clé, calculée à partir des autres chiffres. Si la clé ne colle pas, il y a une erreur quelque part. Si elle colle, le numéro est cohérent. Cet indice est utile, mais il ne prouve rien à lui seul.
Le numéro de sécurité sociale s'appelle officiellement le NIR, pour numéro d'inscription au répertoire. Il compte 13 chiffres, suivis d'une clé de 2 chiffres.[1][2] Les 13 premiers se lisent par blocs :
| Positions | Contenu |
|---|---|
| 1 | Sexe : 1 pour les hommes, 2 pour les femmes |
| 2 à 3 | Deux derniers chiffres de l'année de naissance |
| 4 à 5 | Mois de naissance, de 01 à 12 |
| 6 à 10 | Lieu de naissance, d'après le code géographique de l'INSEE |
| 11 à 13 | Numéro d'ordre, qui distingue les personnes nées au même endroit à la même période |
Source : INSEE.[1] Le lieu varie selon l'origine : deux chiffres de département puis trois de commune en métropole, trois chiffres de département puis deux de commune en outre-mer, et le code 99 suivi du pays pour une naissance à l'étranger.[1]
Le calcul de la clé. On divise le nombre de 13 chiffres par 97, et la clé est la différence entre 97 et le reste.[1] Prenons un numéro fictif, 2 69 05 49 588 157 :
Une faute de frappe suffit à casser la clé. Avec un dernier chiffre 8 au lieu de 7, la clé attendue devient 79, et le numéro 2 69 05 49 588 158 80 est rejeté.
Le cas de la Corse. Depuis 1976, les départements corses s'écrivent 2A et 2B.[1] Pour le calcul, l'INSEE remplace la lettre par un 0, puis retire 1 000 000 pour 2A ou 2 000 000 pour 2B.[1] Sur le numéro fictif 1 80 07 2A 001 001, le nombre devient 1 800 719 001 001. Le reste vaut 37 et la clé 60.
Un dernier conseil de l'INSEE : traiter le NIR comme un identifiant opaque, sans en tirer d'informations sur la personne, car sa structure peut évoluer.[1] Un contrôle qui exigerait un mois entre 01 et 12 rejetterait par exemple les codes prévus pour un mois de naissance inconnu.[1]
Un IBAN français compte 27 caractères : le code pays FR, une clé de 2 caractères, le code banque (5), le code guichet (5), le numéro de compte (11) et la clé RIB (2).[3] Les 23 derniers caractères forment le BBAN, l'identifiant national du compte.[3]
Le calcul de la clé. Voici les étapes sur l'IBAN d'exemple FR76 3000 6000 0112 3456 7890 189 :[4]
Cette méthode suit la norme ISO 13616 pour la structure et ISO/IEC 7064 pour la clé.[4] Elle vaut pour tous les pays, mais la longueur change, avec 34 caractères au maximum.[4]
Un SIREN compte 9 chiffres. Un SIRET en compte 14 : le SIREN, suivi d'un NIC de 5 chiffres qui désigne l'établissement.[5] L'INSEE les contrôle avec l'algorithme de Luhn.[5]
Le calcul. On part de la droite :
Essayons avec le SIREN 120 027 016, qui est celui de l'INSEE. En partant de la droite, les chiffres sont 6, 1, 0, 7, 2, 0, 0, 2, 1. On double le deuxième (1 devient 2), le quatrième (7 devient 14, donc 5), le sixième (0 reste 0) et le huitième (2 devient 4). La somme 6 + 2 + 0 + 5 + 2 + 0 + 0 + 4 + 1 vaut 20, un multiple de 10. Le numéro est cohérent.
Une clé juste dit que le numéro est cohérent. Elle ne dit pas qu'il a été attribué à quelqu'un.
Un nombre de 15 chiffres tiré au hasard passe le contrôle du NIR une fois sur 97, soit environ 1 %. Un tirage de 200 000 nombres aléatoires a donné 1,01 %. L'IBAN suit la même proportion, puisque le reste doit tomber sur une valeur parmi 97. Luhn est plus tolérant : il laisse passer un nombre sur dix, et le tirage a donné 9,9 % sur 9 chiffres.
Dans un vrai document, cela donne ceci. Sur 500 références de 15 chiffres sans rapport avec la sécurité sociale, comme des numéros de commande ou de suivi, environ 5 passeraient le contrôle du NIR. Ce sont de faux positifs. À l'inverse, un vrai NIR saisi avec une faute est rejeté, alors qu'il reste une donnée personnelle. Un contrôle strict laisse donc passer des numéros erronés, et un contrôle large signale des références sans danger. Aucun réglage ne supprime les deux erreurs à la fois. Le bon compromis dépend de l'usage.
Cette section est facultative. Voici trois petites fonctions JavaScript qui reprennent les calculs ci-dessus. Elles ont été testées sur les exemples de l'article. Pour la Corse, la fonction du NIR remplace 2A par 19 et 2B par 18, ce qui revient à la soustraction décrite par l'INSEE.
const luhn = s => [...s].reverse().reduce((t, c, i) => {
let d = +c;
if (i % 2) { d *= 2; if (d > 9) d -= 9; }
return t + d;
}, 0) % 10 === 0;
const nirOk = s => { // 15 caractères : 13 + clé
const n = s.slice(0, 13).replace('2A', '19').replace('2B', '18');
return 97 - (Number(n) % 97) === Number(s.slice(13));
};
const ibanOk = s => { // sans espaces, en majuscules
const r = (s.slice(4) + s.slice(0, 4)).replace(/[A-Z]/g, c => c.charCodeAt(0) - 55);
return BigInt(r) % 97n === 1n;
};
Ces fonctions contrôlent une clé. Elles ne cherchent pas les numéros dans un texte et ne regardent pas ce qui les entoure.
Un contrôle de clé répond à la question « ce numéro est-il cohérent ? ». Il ne dit rien de ce dont parle le document. Une référence de commande de 15 chiffres a une chance sur 97 de passer pour un NIR. Les mots voisins (« sécurité sociale », « n° INSEE », « IBAN », « SIRET »), la présentation en groupes de chiffres et la longueur exacte réduisent ce risque.
Un bon détecteur combine donc la structure, la clé et le contexte. Il laisse aussi le choix de la réaction : annoter le résultat, arrêter le workflow ou aiguiller les éléments signalés, comme le décrit l'article 6 de la série. Les calculs de cet article en forment la première couche.
Le NIR est un identifiant encadré. D'après la CNIL, tout usage du NIR dans un traitement de données doit être autorisé par un décret en Conseil d'État, sauf exceptions prévues par l'article 30 de la loi Informatique et Libertés, comme les statistiques publiques, la recherche ou un service public en ligne.[6] Le décret cadre du 19 avril 2019 (n° 2019-341) liste les traitements permis, et la CNIL précise que tout autre usage est interdit.[6] La page consultée détaille ces usages pour l'assurance. Les autres secteurs ont leurs propres règles, que cet article ne couvre pas.
Un NIR qui se retrouve dans un prompt pose donc une question de finalité, avant même la question technique. Pour un cas précis, mieux vaut s'adresser à la CNIL ou à un juriste.
Non. Elle prouve qu'il est cohérent. Un nombre tiré au hasard passe le contrôle du NIR une fois sur 97.
Le calcul du reste modulo 97 est le même.[4] La longueur et la structure changent d'un pays à l'autre, et cet article ne détaille que le cas français.
Dans un nœud Code avant l'appel au modèle, ou dans un node de détection dédié. La liste de contrôle de la série situe cette étape dans le trajet des données.
[1] INSEE, identifiant d'individus NIR
[2] INSEE, définition du numéro d'inscription au répertoire
[3] Banque de France, RIB, IBAN, BIC
[4] Banco de Portugal, International Bank Account Number
[5] INSEE, identifiants économiques SIREN, NIC et SIRET
[6] CNIL, minimisation et traitements du NIR dans le secteur de l'assurance