Регулярное выражение для проверки SSN (номера социального страхования)

В этом руководстве по регулярным выражениям Java мы научимся использовать регулярные выражения для проверки того, ввел ли пользователь действительный номер социального страхования в форму вашего приложения или веб-сайта.

1. Действительный шаблон SSN

Номера социального страхования США представляют собой девятизначные числа в формате AAA-GG-SSSS со следующими правилами.

  • Первые три цифры называются номером области. Номер области не может быть 000, 666 или между 900 и 999.
  • Цифры четыре и пять называются номером группы и находятся в диапазоне от 01 до 99.
  • Последние четыре цифры — серийные номера от 0001 до 9999.

Для проверки всех трех вышеприведенных правил наше регулярное выражение будет выглядеть так:

Регулярное выражение: ^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$

2. Объяснение регулярного выражения

 ^ # Утверждает позицию в начале строки.(?!000|666) # Утверждаем, что ни «000», ни «666» не могут быть сопоставлены здесь.[0-8] # Найдите цифру от 0 до 8.[0-9]{2} # Найдите цифру, совпадающую ровно два раза.- # Соответствует буквальному "-".(?!00) # Утверждаем, что «00» не может быть сопоставлено здесь.[0-9]{2} # Найдите цифру, совпадающую ровно два раза.- # Соответствует буквальному "-".(?!0000) # Утверждаем, что «0000» не может быть сопоставлено здесь.[0-9]{4} # Найдите цифру, совпадающую ровно четыре раза.$ # Утверждает позицию в конце строки.

3. Демонстрация

Теперь давайте протестируем наше регулярное выражение для проверки SSN, используя несколько демонстрационных SSN.

List<String> ssns = new ArrayList<String>();//Valid SSNsssns.add("123-45-6789");ssns.add("856-45-6789");//Invalid SSNsssns.add("000-45-6789");ssns.add("666-45-6789");ssns.add("901-45-6789");ssns.add("85-345-6789");ssns.add("856-453-6789");ssns.add("856-45-67891");ssns.add("856-456789");String regex = "^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$";Pattern pattern = Pattern.compile(regex);for(String number : ssns){Matcher matcher = pattern.matcher(number);System.out.println(matcher.matches());}

Вывод программы:

truetruefalsefalsefalsefalsefalsefalsefalse

Я посоветую поиграться с приведенным выше простым регулярным выражением, чтобы попробовать больше вариаций.

Прокрутить вверх