.NET 4.5 には、as という名前の新しい検証属性が含まれてCreditCardAttribute
おり、この属性は、データ フィールドの値がクレジット カード番号であることを指定します。このクラスを含むアセンブリを逆コンパイルすると、クレジット カード番号を検証する次のコードが表示されます。
public override bool IsValid(object value)
{
if (value == null)
{
return true;
}
string text = value as string;
if (text == null)
{
return false;
}
text = text.Replace("-", "");
text = text.Replace(" ", "");
int num = 0;
bool flag = false;
foreach (char current in text.Reverse<char>())
{
if (current < '0' || current > '9')
{
return false;
}
int i = (int)((current - '0') * (flag ? '\u0002' : '\u0001'));
flag = !flag;
while (i > 0)
{
num += i % 10;
i /= 10;
}
}
return num % 10 == 0;
}
数値形式を検証するためにここで適用されるアルゴリズムを知っている人はいますか? ルーンのアルゴリズム?また、これはISO規格ですか?最後に、これは正しく、100% 正しい実装だと思いますか?
MSDN は、これに関する多くの情報を提供していません。実際、彼らは以下のように間違った情報を持っています:
備考
値は正規表現を使用して検証されます。このクラスは、クレジット カード番号が購入に有効であることを検証するのではなく、適切な形式であることのみを検証します。