Regex numéro IMEI
Un IMEI, ce n'est pas juste « 15 chiffres » : la bibliothèque npm validator.js le vérifie correctement en isolant la longueur du calcul de la clé de Luhn, mais une republication de cette même regex sur regexpattern.com élargit la longueur acceptée à 15-17 chiffres sans expliquer pourquoi. Un utilitaire GitHub, lui, rejette à tort tout IMEI composé d'un chiffre unique répété — une restriction qui n'existe dans aucune norme. Voici un motif qui vérifie la seule chose qu'une regex peut vérifier ici (la forme), comparé à ces trois tentatives.
/^\d{15}$/passe 22/22 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| regexpattern.com — republication de la regex validator.js, longueur élargie à 15-17 chiffres sans justification (un IMEI en a toujours exactement 15) | ^\d{15,17}$ | 20 / 22 | sûr |
| Utilitaire GitHub (Somsubhra1) — rejette à tort tout IMEI composé d'un seul chiffre répété, restriction absente de toute norme | ^(?!\b(.)\1+\b)\d{15}$ | 20 / 22 | sûr |
| validator.js (bibliothèque npm) — variante avec tirets, exige le format « 49-015420-323751-8 » et rejette la forme brute à 15 chiffres pourtant la plus courante | ^\d{2}-\d{6}-\d{6}-\d{1}$ | 12 / 22 | sûr |
Implémentation
const re = new RegExp("^\\d{15}$", "");
re.test(input);Limites
- Valide seulement la FORME (15 chiffres) : ne vérifie pas la clé de contrôle de Luhn calculée sur les 14 premiers chiffres — un IMEI syntaxiquement valide selon ce motif peut avoir une clé fausse et ne correspondre à aucun appareil réel.
- N'exclut aucun TAC (Type Allocation Code, les 8 premiers chiffres) invalide : la liste des TAC réellement alloués par la GSMA évolue en continu et n'est pas encodable dans une regex.
- Exige une chaîne de 15 chiffres consécutifs sans séparateur : la notation par groupes parfois affichée sur un appareil ou une facture (« 49-015420-323751-8 ») doit être retirée avant validation.
- Ne distingue pas l'IMEI (15 chiffres) de l'IMEISV (Software Version, 16 chiffres : TAC + série + version logicielle, sans clé de contrôle) — les deux se ressemblent mais ne servent pas le même usage.