誰もがこの機能を改善する方法を知っていますか?私はコードを短縮することを心配していない、私はこれがより良い正規表現で行うことができると確信している、私はより正確な論理を心配しています。私はSSN#のドキュメンテーションを見つけるのにひどい時を過ごしました。私が以下に使用しているルールのほとんどは、クレジット業界で働く他のプログラマーからのものです(ソースは引用されていません)。私はどのように米国社会保障番号を確認できますか?
- あなたが認識している追加規則はありますか?
- これは間違っていますか?
- ソースをサイトに配置できますか?
ありがとうございました!
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:2011年6月の変更を反映するように答えを更新しました。 –
非常に興味深い。 – Jeffpowrs
すばらしい答え。ありがとうございました。 – catbadger