¿Alguien sabe cómo mejorar esta función? No estoy preocupado por acortar el código, estoy seguro de que esto podría hacerse con mejor expresión regular, estoy más preocupado por la lógica correcta. Me ha costado mucho encontrar documentación para los números del SSN. La mayoría de las reglas que uso a continuación provienen de otros programadores que trabajan en la industria del crédito (no se citan fuentes).¿Cómo puedo validar el número de seguridad social de los EE. UU.?
- ¿Hay reglas adicionales que usted conoce de ?
- ¿Sabe si algo de esto está mal?
- ¿Puede ubicar sus fuentes?
¡Gracias por cualquier idea!
public static bool isSSN(string ssn)
{
Regex rxBadSSN = new Regex(@"(\d)\1\1\1\1\1\1\1\1");
//Must be 9 bytes
if(ssn.Trim().Length != 9)
return false;
//Must be numeric
if(!isNumeric(ssn))
return false;
//Must be less than 772999999
if((Int32)Double.Parse(ssn.Substring(0,3)) > 772)
{
//Check for Green Card Temp SSN holders
// Could be 900700000
// 900800000
if(ssn.Substring(0,1) != "9")
return false;
if(ssn.Substring(3,1) != "7" && ssn.Substring(3,1) != "8")
return false;
}
//Obviously Fake!
if(ssn == "123456789")
return false;
//Try again!
if(ssn == "123121234")
return false;
//No single group can have all zeros
if(ssn.Substring(0,3) == "000")
return false;
if(ssn.Substring(3,2) == "00")
return false;
if(ssn.Substring(5,4) == "0000")
return false;
//Check to make sure the SSN number is not repeating
if (rxBadSSN.IsMatch(ssn))
return false;
return true;
}
@ user2864740: He actualizado la respuesta para reflejar los cambios de junio de 2011. –
Muy interesante. – Jeffpowrs
excelente respuesta. gracias. – catbadger