Regex US SSN
A US SSN isn't just "NNN-NN-NNNN": the SSA bans specific ranges (area 000/666/900-999, group 00, serial 0000). The npm package ssn-validator applies those ranges correctly, but makes each hyphen independently optional - an inconsistent format like "123-45 6789" passes. It even has to add a hardcoded blacklist to reject the infamous 078-05-1120, an SSN used by mistake in advertising for decades: no range check can catch that, only an explicit list can. Here's a pattern faithfully applying the official ranges, compared against these three attempts.
/^(?!000|666|9\d{2})\d{3}-(?!00)\d{2}-(?!0{4})\d{4}$/passes 20/20 cases
Comparison of existing patterns
| Source | pattern | Score on the 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 | safe |
| 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 | safe |
| 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 | safe |
Implementation
const re = new RegExp("^(?!000|666|9\\d{2})\\d{3}-(?!00)\\d{2}-(?!0{4})\\d{4}$", "");
re.test(input);Limits
- 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.