Regex ABA routing number
A US ABA routing number isn't just "9 digits starting with a valid regional prefix": a weighted sum (repeating 3-7-1 weights) must be divisible by 10. A regex published on RegexLib, rated 5 out of 5 stars, only checks the prefix - and here's the clearest possible proof: its own documented "valid" example numbers on the page (614321634, 114000900, 703452098) all three fail the real check digit calculation, verified independently. A good rating guarantees nothing. Here's a pattern that honestly limits itself to what a regex can actually check here, compared against that attempt and two others.
/^[0-9]{9}$/passes 20/20 cases
Comparison of existing patterns
| Source | pattern | Score on the corpus | ReDoS |
|---|---|---|---|
| RegexLib (noté 5/5 étoiles) — se limite au préfixe régional, jamais au calcul de contrôle ; ses propres exemples « valides » documentés sur la page échouent tous au vrai calcul, vérifié indépendamment | ^((0[0-9])|(1[0-2])|(2[1-9])|(3[0-2])|(6[1-9])|(7[0-2])|80)([0-9]{7})$ | 19 / 20 | safe |
| Stack Overflow (2 votes) — exclut seulement le chiffre 5 en tête, sans aucune vérification de somme de contrôle ; la question elle-même naît d'une confusion sur un numéro réel de Bank of America | ^[012346789][0-9]{8}$ | 20 / 20 | safe |
| Stack Overflow — autorise à tort le préfixe 00 (district inexistant), oublie les préfixes valides 61-72 et 80, et ne vérifie toujours pas le chiffre de contrôle | ^(?=(?:[0][0-9]|1[0-2])|21|22|23|24|25|26|27|28|29|30|31|32)\d{9}$ | 18 / 20 | safe |
Implementation
const re = new RegExp("^[0-9]{9}$", "");
re.test(input);Limits
- Valide seulement la FORME (9 chiffres) : ne calcule pas la somme pondérée 3-7-1 qui constitue le vrai chiffre de contrôle — un numéro syntaxiquement valide selon ce motif peut échouer ce calcul et ne correspondre à aucune institution réelle (voir 123456789, 999999999 et 021000020 dans les exemples, tous structurellement valides mais faux à la clé).
- Ne consulte pas le registre officiel tenu par Accuity/LexisNexis Risk Solutions pour le compte de l'ABA : seule cette source confirme qu'un numéro est réellement attribué à une institution active.
- N'exclut aucun préfixe régional obsolète ou jamais attribué : contrairement à ce qu'une regex par plage de préfixe pourrait laisser croire, une plage syntaxiquement plausible n'a jamais garanti qu'un district existe réellement à ce jour.
- Ne distingue pas un numéro de routage ABA (établissements bancaires américains) d'un numéro à 9 chiffres d'un tout autre système (SIREN français, par exemple) : la forme seule, 9 chiffres, est insuffisante pour identifier le système dont provient un numéro isolé de son contexte.