CreditCardAttribute使用哪种算法进行信用卡号格式验证

tug*_*erk 4 .net c# algorithm validation credit-card

.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;
}
Run Code Online (Sandbox Code Playgroud)

有谁知道这里应用了哪种算法来验证数字格式?Luhn的算法?另外,这是ISO标准吗?最后,你认为这是正确的,100%正确的实施?

MSDN没有提供有关此内容的更多信息.事实上,他们有错误的信息如下:

备注

使用正则表达式验证该值.该类不会验证信用卡号码是否对购买有效,只是它的格式正确.

Jam*_*iec 6

最后一行:

return num % 10 == 0;
Run Code Online (Sandbox Code Playgroud)

这是一个非常强烈的提示,这是一个Luhn算法