Regex identifiant ORCID
Un ORCID, ce n'est pas juste « 16 chiffres » : le dernier caractère de contrôle peut être un « X » (calculé selon ISO 7064 MOD 11-2), une norme complète qu'aucune des tentatives trouvées en ligne ne vérifie réellement. Plus surprenant : la propre bibliothèque Angular officielle d'ORCID contient un bug de regex signalé publiquement — l'absence d'ancrage en début de motif laisse passer un préfixe invalide devant un identifiant par ailleurs correct. Voici un motif qui vérifie au moins la structure complète, comparé à cette regex officielle bugguée et deux autres tentatives.
/^\d{4}-\d{4}-\d{4}-\d{3}[0-9X]$/passe 22/22 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| Gist GitHub (asencis) — non ancrée, matche n'importe où dans une chaîne plus longue | (\d{4}-){3}\d{3}(\d|X) | 15 / 22 | sûr |
| Bug réel signalé dans orcid-angular, le dépôt officiel d'ORCID lui-même — absence d'ancre de début, un préfixe invalide passe devant un identifiant par ailleurs correct | (\d{4}[- ]{0,}){3}\d{3}[0-9X]$ | 15 / 22 | sûr |
| CitrineInformatics/jpif (Java) — le dernier groupe est 4 chiffres stricts, rejette « X » en position finale et donc un ORCID réel comme celui de Stephen Hawking | ^\s*(?:(?:https?://)?orcid.org/)?([0-9]{4})\-?([0-9]{4})\-?([0-9]{4})\-?([0-9]{4})\s*$ | 17 / 22 | sûr |
Implémentation
const re = new RegExp("^\\d{4}-\\d{4}-\\d{4}-\\d{3}[0-9X]$", "");
re.test(input);Limites
- Valide seulement la FORME (16 caractères groupés par 4) : ne calcule pas la clé de contrôle ISO 7064 MOD 11-2 — un identifiant syntaxiquement valide selon ce motif peut avoir une clé fausse et ne correspondre à aucun chercheur réel.
- Ne consulte pas le registre public ORCID (pub.orcid.org) : seule une requête à l'API officielle confirme qu'un identifiant est réellement attribué et actif.
- N'accepte pas le préfixe URL parfois utilisé pour citer un ORCID (« https://orcid.org/0000-0002-1825-0097 ») : ce motif valide l'identifiant nu, pas sa forme complète en citation.
- Le caractère de contrôle final est sensible à la casse dans ce motif (« X » majuscule uniquement) : un « x » minuscule est parfois accepté par des bibliothèques tierces, dont un bug réel signalé dans l'outil Angular officiel d'ORCID lui-même.