Regex SEDOL (code de titre britannique)
Un SEDOL, attribué par la Bourse de Londres, compte 7 caractères : six caractères alphanumériques et une clé de contrôle chiffrée. Depuis janvier 2004 les nouveaux SEDOL sont alphanumériques et ne contiennent jamais de voyelle (A, E, I, O, U) ; la clé est calculée avec les poids 1, 3, 1, 7, 3, 9 (article Wikipédia, qui cite le guide technique du SEDOL Masterfile). Parmi les tentatives relues, celle de formvalidation accepte n'importe quelle lettre, voyelles comprises ; le code JavaScript de l'article Wikipédia ne teste que les six premiers caractères et rejette donc un SEDOL complet ; le gem sec_id rend la clé facultative. Voici un motif qui exige la clé en septième position, comparé à ces tentatives. La clé n'est pas recalculée.
/^[0-9BCDFGHJKLMNPQRSTVWXYZ]{6}[0-9]$/passe 25/25 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| formvalidation (@form-validation/validator-sedol 2.4.0) — « [0-9A-Z]{7} » : accepte les voyelles (« BA0YBK7 ») et une lettre en dernière position | ^[0-9A-Z]{7}$ | 21 / 25 | sûr |
| Wikipédia (code JavaScript de l'article SEDOL, test du corps) — vérifie seulement 6 caractères sans voyelle : rejette un SEDOL complet de 7 caractères | ^[0-9BCDFGHJKLMNPQRSTVWXYZ]{6}$ | 12 / 25 | sûr |
| sec_id (gem Ruby, ID_REGEX du SEDOL, mode /x condensé) — mêmes caractères sans voyelle mais clé finale facultative : un corps de 6 caractères passe | ^[0-9BCDFGHJKLMNPQRSTVWXYZ]{6}\d?$ | 24 / 25 | sûr |
Implémentation
const re = new RegExp("^[0-9BCDFGHJKLMNPQRSTVWXYZ]{6}[0-9]$", "");
re.test(input);Limites
- Valide seulement la FORME : « BD9MZZ6 » a la bonne structure mais une clé fausse (la bonne valeur est 7) et passe ce motif. La clé (poids 1, 3, 1, 7, 3, 9) n'est pas recalculée par la regex.
- L'article Wikipédia indique que les nouveaux SEDOL commencent par une lettre et que les anciens sont numériques ; ce motif n'impose pas cette séparation (une plage réservée à l'utilisateur, commençant par 9, peut contenir des lettres d'après l'article, mention marquée « citation needed »).
- Aucune vérification d'existence : seul le SEDOL Masterfile du London Stock Exchange Group le confirme. Un SEDOL britannique devient un ISIN en ajoutant deux zéros devant, le code pays GB et la clé ISIN : voir la fiche isin.
- Pas de tolérance pour espaces, tirets ou minuscules. Les voyelles sont refusées, même si elles comptent dans le calcul de la clé (H = 17, J = 19) ; les exemples du corpus sont tirés de la documentation de bibliothèques ou synthétiques.