Regex para número do Seguro Social dos EUA

Use /^(?!000|666|9\d\d)\d{3}-(?!00)\d{2}-(?!0000)\d{4}$/ para verificar se uma string inteira é um número do Seguro Social dos EUA válido. Todos os exemplos abaixo foram testados contra o padrão, e você pode abri-los no Testador de Regex com as amostras já carregadas.

Atualizado em

/^(?!000|666|9\d\d)\d{3}-(?!00)\d{2}-(?!0000)\d{4}$/
Abrir no Testador de Regex
EntradaResultado
123-45-6789✓ Correspondência
219-09-9999✓ Correspondência
000-12-3456✗ Sem correspondência
666-12-3456✗ Sem correspondência
123-00-4567✗ Sem correspondência
123456789✗ Sem correspondência
900-12-3456✗ Sem correspondência

Como o padrão funciona

ParteSignificado
(?!000|666|9\d\d)\d{3}Número da área: três dígitos, mas nunca 000, 666 nem 900–999
(?!00)\d{2}Número do grupo: nunca 00
(?!0000)\d{4}Número de série: nunca 0000
-Traços entre as partes

Exemplos de código

JavaScript

const re = /^(?!000|666|9\d\d)\d{3}-(?!00)\d{2}-(?!0000)\d{4}$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'(?!000|666|9\d\d)\d{3}-(?!00)\d{2}-(?!0000)\d{4}', value))

PHP

preg_match('/^(?!000|666|9\d\d)\d{3}-(?!00)\d{2}-(?!0000)\d{4}$/', $value) === 1;

Notas e limitações

Lookaheads negativos excluem as faixas de números que a Social Security Administration nunca emite. Trate SSNs como dados sensíveis: mascare-os em logs e interfaces.

Perguntas frequentes

Qual é o regex para número do Seguro Social dos EUA?
/^(?!000|666|9\d\d)\d{3}-(?!00)\d{2}-(?!0000)\d{4}$/ — ele casa com a string inteira. Veja a tabela acima para entender o que cada parte faz.
Quais exemplos casam?
Dos exemplos testados, estes casam: 123-45-6789, 219-09-9999. Os outros não.
Como testo esse regex?
Clique em “Abrir no Testador de Regex” — o padrão, as flags e o texto de exemplo carregam automaticamente, e as correspondências são destacadas enquanto você edita.