Regex code BIC / SWIFT
L'article Wikipédia sur la norme ISO 9362, cité tel quel dans une réponse Stack Overflow, donne une regex... sans ancrage début/fin de chaîne. Un article de blog qui détaille pas à pas la construction d'une regex BIC part lui aussi d'un premier brouillon trop permissif : il autorise de 2 à 5 caractères après le code pays, alors que la norme n'en autorise exactement que 2 ou 5, jamais 3 ou 4. Voici un motif qui corrige ces deux points, comparé à ces deux tentatives réelles et à une troisième qui, elle, fonctionne mais rejette les saisies en minuscules — une limite que son propre auteur reconnaît dans sa réponse.
/^[A-Z]{6}[A-Z0-9]{2}(?:[A-Z0-9]{3})?$/ipasse 20/20 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| Wikipédia (article ISO 9362), citée telle quelle dans une réponse Stack Overflow, sans ancrage début/fin de chaîne | [A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})? | 16 / 20 | sûr |
| John D. Cook (blog) — premier brouillon documenté comme trop permissif (2 à 5 caractères au lieu d'exactement 2 ou 5), également non ancré | [A-Z]{6}[A-Z0-9]{2,5} | 14 / 20 | sûr |
| Stack Overflow — réponse à 40 votes de Mark Byers telle que postée, majuscules uniquement (limite reconnue par l'auteur lui-même dans sa réponse) | ^[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?$ | 18 / 20 | sûr |
Implémentation
const re = new RegExp("^[A-Z]{6}[A-Z0-9]{2}(?:[A-Z0-9]{3})?$", "i");
re.test(input);Limites
- Ne vérifie que la forme : ne consulte aucun registre SWIFT, ne garantit ni qu'une banque porte réellement ce code, ni que le code pays (positions 5-6) correspond à un pays ISO 3166-1 existant.
- N'interprète pas la signification du second caractère du code de localisation (0 = BIC de test, 1 = participant passif, 2 = facturation inversée) : ce sont des conventions documentées par la norme, pas des contraintes de forme.
- Le code branche de 3 caractères, quand il est absent, sous-entend le siège principal (« XXX » implicite) : ce motif accepte aussi bien la forme à 8 caractères que la forme à 11 explicitement terminée par « XXX », sans les distinguer.
- N'exclut pas les combinaisons de code pays théoriquement inutilisées (par exemple un code qui ne correspond à aucun pays ISO 3166-1 ni à l'exception « XK » du Kosovo) : seule la forme (2 lettres) est vérifiée, pas la liste réelle des codes valides.