Chiunque là fuori sa come migliorare questa funzione? Non sono preoccupato di accorciare il codice, sono sicuro che questo potrebbe essere fatto con una regex migliore, sono più preoccupato della logica corretta. Ho avuto un tempo terribile per trovare la documentazione per SSN #. La maggior parte delle regole che uso di seguito provengono da altri programmatori che lavorano nel settore del credito (nessuna fonte citata).Come posso convalidare il numero di previdenza sociale degli Stati Uniti?
- Ci sono delle regole aggiuntive a cui siete a conoscenza ?
- Sai se c'è qualcosa di sbagliato?
- Puoi visitare le tue fonti?
Grazie per qualsiasi intuizione!
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: Ho aggiornato la risposta per riflettere le modifiche di giugno 2011. –
Molto interessante. – Jeffpowrs
ottima risposta. grazie. – catbadger