Regex SEDOL (UK security code)
A SEDOL, assigned by the London Stock Exchange, has 7 characters: six alphanumeric characters and a numeric check digit. Since January 2004 new SEDOLs are alphanumeric and never contain a vowel (A, E, I, O, U); the check digit uses weights 1, 3, 1, 7, 3, 9 (Wikipedia article, citing the SEDOL Masterfile technical guide). Among the attempts read, formvalidation's accepts any letter, vowels included; the JavaScript code in the Wikipedia article only tests the first six characters and so rejects a full SEDOL; the sec_id gem makes the check digit optional. Here's a pattern requiring the check digit in seventh position, compared against those attempts. The check digit is not recomputed.
/^[0-9BCDFGHJKLMNPQRSTVWXYZ]{6}[0-9]$/passes 25/25 cases
Comparison of existing patterns
| Source | pattern | Score on the 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 | safe |
| 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 | safe |
| 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 | safe |
Implementation
const re = new RegExp("^[0-9BCDFGHJKLMNPQRSTVWXYZ]{6}[0-9]$", "");
re.test(input);Limits
- 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.