Regex ISWC (musical work code)
An ISWC (ISO 15707) is written 'T-034.524.680-1': the T prefix, nine work-identifier digits in groups of three separated by dots, a hyphen and a modulo 10 check digit (sum 1 + Σ i×di for i = 1..9, then 10 minus the remainder). The unseparated form 'T0345246801' is common in storage. The attempts I read are either tolerant (MusicBrainz and IsoCodes accept mixed or missing separators, IsoCodes even spaces), or have an unescaped dot (music-codes: 'T-034x524x680-1' passes), or reject the unseparated form (Wikidata, unanchored). Here's a pattern accepting the two consistent forms, compared against those attempts.
/^T(?:-[0-9]{3}\.[0-9]{3}\.[0-9]{3}-[0-9]|[0-9]{10})$/passes 28/28 cases
Comparison of existing patterns
| Source | pattern | Score on the corpus | ReDoS |
|---|---|---|---|
| Wikidata P1827 — forme avec séparateurs seulement (« T0345246801 » refusé), non ancrée : « xT-034.524.680-19 » passe | T-[0-9]{3}\.[0-9]{3}\.[0-9]{3}-[0-9] | 21 / 28 | safe |
| MusicBrainz — tout séparateur facultatif et indépendant : « T034.524680-1 » et « T-034.524.680.1 » passent | ^T-?[0-9]{3}\.?[0-9]{3}\.?[0-9]{3}[-.]?[0-9]$ | 24 / 28 | safe |
| IsoCodes (PHP) — insensible à la casse, espaces autour tolérés, séparateurs mélangés acceptés (« T.034-524.680-1 » passe) | ^\s*T[\-.]?(\d)(\d)(\d)[\-.]?(\d)(\d)(\d)[\-.]?(\d)(\d)(\d)[\-.]?(\d)\s*$ | 20 / 28 | safe |
| music-codes (PHP), forme avec séparateurs — points non échappés : « T-034x524x680-1 » passe | ^(T)-([0-9]{3}).([0-9]{3}).([0-9]{3})-([0-9]{1})$ | 24 / 28 | safe |
Implementation
const re = new RegExp("^T(?:-[0-9]{3}\\.[0-9]{3}\\.[0-9]{3}-[0-9]|[0-9]{10})$", "");
re.test(input);Limits
- Valide seulement la FORME : la clé de contrôle n'est pas calculée (« T-034.524.680-2 », clé fausse, passe). Calculez 1 + Σ i×di (i = 1..9) puis 10 moins le reste modulo 10 pour la vérifier ; l'existence de l'œuvre dans la base de la CISAC ne peut pas être contrôlée par une regex.
- L'algorithme de clé vient d'un brouillon de comité ISO/TC 46/SC 9 (1999), cohérent avec la bibliothèque IsoCodes ; la norme ISO 15707 publiée est payante et n'a pas été consultée.
- Seule la forme cohérente (tout avec séparateurs ou tout sans) est acceptée ; la minuscule, les espaces et les mélanges de séparateurs sont refusés : normalisez avant validation.