Regex SSN américain
Un SSN, ce n'est pas juste « NNN-NN-NNNN » : la SSA interdit certaines plages précises (préfixe 000/666/900-999, groupe 00, série 0000). Le paquet npm ssn-validator applique ces plages correctement, mais rend chaque tiret optionnel indépendamment — un format incohérent comme « 123-45 6789 » passe. Il doit d'ailleurs ajouter une liste noire à la main pour rejeter le tristement célèbre 078-05-1120, un SSN utilisé par erreur dans des publicités pendant des décennies : aucune plage ne peut détecter ce cas, seule une liste explicite le peut. Voici un motif qui applique fidèlement les plages officielles, comparé à ces trois tentatives.
/^(?!000|666|9\d{2})\d{3}-(?!00)\d{2}-(?!0{4})\d{4}$/passe 20/20 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| uphold/ssn-validator (package npm réel) — chaque tiret est optionnel indépendamment, un format incohérent passe ; l'auteur a dû ajouter une liste noire séparée pour le SSN compromis 078-05-1120 | ^(?!666|000|9\d{2})\d{3}[- ]{0,1}(?!00)\d{2}[- ]{0,1}(?!0{4})\d{4}$ | 16 / 20 | sûr |
| Motif générique répété sur plusieurs sites techniques — applique les plages officielles mais ne peut jamais détecter un SSN officiellement compromis comme 078-05-1120, resté en circulation des décennies dans des publicités | ^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$ | 20 / 20 | sûr |
| regex101.com, « Comprehensive US SSN » (0 vote) — ajoute par rétro-référence une règle inventée rejetant les chiffres répétés, absente de toute règle officielle SSA | (?!(\d){3}(\-| |)\1{2}\2\1{4})(?!666|000|9\d{2})(\b\d{3}(\-| |)(?!00)\d{2}\4(?!0{4})\d{4}\b) | 18 / 20 | sûr |
Implémentation
const re = new RegExp("^(?!000|666|9\\d{2})\\d{3}-(?!00)\\d{2}-(?!0{4})\\d{4}$", "");
re.test(input);Limites
- Valide seulement les PLAGES officiellement interdites (area 000/666/900-999, group 00, serial 0000) : ne peut jamais détecter un numéro officiellement compromis comme 078-05-1120, resté en circulation des décennies dans des publicités et des portefeuilles-échantillons — aucune règle de plage ne couvre ce cas, seule une liste explicite le peut.
- Ne consulte pas la base de vérification SSA (SSNVS, réservée aux employeurs autorisés) : seule cette vérification confirme qu'un SSN est réellement attribué à une personne.
- La SSA a cessé d'attribuer les SSN selon une logique géographique/chronologique déductible depuis la randomisation du 25 juin 2011 : la structure area/group/serial existe toujours dans le format, mais n'a plus de signification exploitable.
- Exige un tiret littéral aux deux positions : les formats avec espaces ou sans aucun séparateur, parfois tolérés par des formulaires, doivent être normalisés avant validation par ce motif.