Я знаю, что это старый вопрос, но ради других, ищущих ответы, я решил добавить быструю функцию javascript для проверки правильности заданного SSN.
function checkSSN() {
var inputSSN = #YourInput#,
ssnRegex = new RegExp("^(9[0-9][0-9]|666|000|078051120|219099999|123456789|123121234|321214321)|^([0-8][0-9][0-9]00)|^([0-8][0-9][0-9][0-9][0-9]000)$"),
repeats = /^(.)\1+$/;
//make sure we have 2 dashes in the input Social Security number
if( inputSSN.match(/./g).length === 2) {
//Once we have confirmed that there are the right number of dashes, remove them, and make sure that the resulting string is a number (you may or may not need this logic depending on the format of your input SSN.
inputSSN = inputSSN.replace(/-/g, "");
if(!isNaN(inputSSN)) {
//Test the input SSN against our regex to ensure that it doesn't contain any disqualifying combinations.
if(!ssnRegex.test(inputSSN)) {
//Make sure the input SSN isn't just a repeated number
if(!repeats.test(inputSSN)) {
//If it lands inside of this, we know it's a valid option for a social security number.
}
}
}
}
Для логики ssnRegex :
Первый раздел обрабатывает, если SSN начинается с номера 900-999, 666, 000 или одного из известных дисквалифицирующих SSN, упомянутых выше.
^ (9 [0-9] [0-9] | 666 | 000 | 078051120 | 219099999 | 123456789 | 123121234 | 321214321)
второй раздел гарантирует, что двузначная часть не будет 00
^ ([0-8] [0-9] [0-9] 00)
Третий раздел гарантирует, что последняя часть не 0000
^ ([0-8] [0-9] [0-9] [0-9] [0-9] 0000)
Мы дополнительно проверяем, что они ввели число, и что они не просто используют повторный номер.