SSN и вопросы проверки 9 номеров
Это регулярное выражение ищет номера социального страхования в нескольких форматах, но оно также игнорирует явно недействительные ssn, такие как 123-45-6789 или 000-00-0000 и т. Д.... Это выражение должно найти номер социального страхования, который: числовой разделитель (т.е. ### -##-####, ###. ##. #### или ### ### ####). Он также должен перехватывать 9 цифр в последовательности с без разделителя, но ограничен пробелами (т. е. текст ######### text или ### ######### ###) Это выражение будет игнорировать номер социального страхования, который: содержит все нули в любой конкретной группе (то есть 000 -##-####, ### - 00 - #### или ### - ## - 0000) Начинается с "666". Начинается с любого значения от "900". -999 'равно' 078-05-1120 '(из-за бумажника Вулворта Fiasco) равно' 219-09-9999 '(появилось в рекламном объявлении для Администрации социального обеспечения) Содержит все совпадающие значения (т.е. 000- 00-0000, 111-11-1111, 222-22-2222 и т. Д.) Содержит все инкрементные значения (т. Е. 123-45-6789) public static
Regex (@ "(?! \ B (\d)\1+\D?(\ D) \ 1+ \ D? (\ D)\1+\b)(?!123\D?45\D?6789|219\D 09\D 9999|?? 078\D 05\D 1120)(?!666|? 000 | 9 \ д {2}) (?
Проблема в том, что мы ловим другие записи, которые похожи на них, но мы должны быть достаточно конкретными, чтобы они не были пойманы.
Такие как -
(хххх) ххх-хх-хххх
684072943 (и номер заказа и т. Д.)
FA300217F0090
Потенциальный матч #1:--------------- нт: например: 201[[71230 0821]] am: 201 [[71230 0821]] 26 июня 2012 г. ----- ---------- Потенциальный матч #2:--------------- am ex: 201[[71230 0821]] am 26 ИЮНЯ 2012 DTG (группа даты и времени)
"[[210v13: 2012]],"
Есть идеи?
1 ответ
Ты можешь использовать \D?
для сопоставления с любым нецифровым символом в качестве разделителя. Это будет более упрощенный валидатор SSN:
^(?!219\D?09\D?9999|078\D?05\D?1120)(?!666|000|9\d{2})d{3}\D?(?!00)\d{2}\D?(?!0{4})\d{4}$
Эта статья может быть полезна: http://rion.io/2013/09/10/validating-social-security-numbers-through-regular-expressions-2/
В статье также дается более общее решение, которое может быть тем, что вы ищете:
^(?!\b(\d)1+\D?(\d)1+\D?(\d)1+\b)(?!123\D?45\D?6789|219\D?09\D?9999|078\D?05\D?1120)(?!666|000|9d{2})\d{3}\D?(?!00)\d{2}\D?(?!0{4})\d{4}$