Регулярное выражение для номера социального страхования США

Используйте /^(?!000|666|9\d\d)\d{3}-(?!00)\d{2}-(?!0000)\d{4}$/, чтобы проверить, что вся строка является корректным номером социального страхования США. Каждый пример ниже протестирован по этому шаблону, и его можно открыть в Regex Tester с уже загруженными образцами.

Обновлено

/^(?!000|666|9\d\d)\d{3}-(?!00)\d{2}-(?!0000)\d{4}$/
Открыть в Regex Tester
ВводРезультат
123-45-6789✓ Совпадение
219-09-9999✓ Совпадение
000-12-3456✗ Нет совпадения
666-12-3456✗ Нет совпадения
123-00-4567✗ Нет совпадения
123456789✗ Нет совпадения
900-12-3456✗ Нет совпадения

Как работает шаблон

ЧастьЗначение
(?!000|666|9\d\d)\d{3}Номер области: три цифры, но никогда не 000, 666 или 900–999
(?!00)\d{2}Номер группы: никогда не 00
(?!0000)\d{4}Серийный номер: никогда не 0000
-Дефисы между частями

Примеры кода

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;

Примечания и ограничения

Отрицательные опережающие проверки (lookahead) исключают диапазоны номеров, которые Администрация социального обеспечения США никогда не выдаёт. Относитесь к SSN как к конфиденциальным данным: маскируйте их в логах и интерфейсах.

Часто задаваемые вопросы

Какое регулярное выражение для номера социального страхования США?
/^(?!000|666|9\d\d)\d{3}-(?!00)\d{2}-(?!0000)\d{4}$/ — оно проверяет всю строку целиком. Что делает каждая часть, см. в таблице выше.
Какие примеры совпадают?
Из проверенных примеров совпадают: 123-45-6789 и 219-09-9999. Остальные — нет.
Как протестировать это регулярное выражение?
Нажмите «Открыть в Regex Tester» — шаблон, флаги и образец текста загрузятся автоматически, а совпадения будут подсвечиваться по мере редактирования.