Rexact
Cheatsheet

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

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.