信用卡验证正则表达式

时间:2015-06-27 16:25:08

标签: c# regex

我在Visual C#中为信用卡号码验证程序创建正则表达式时遇到了一些问题。 卡的号码需要用短划线( - )分隔,第一个数字必须是1-9,第二个数字必须是1-3。所以一个例子是2204-1232-9746-5558,或1111-1111-1111-1111。

这是我到目前为止所做的:

    Regex card = new Regex(@"^[1-9][0-9]{2}-[1-3]{3}-[0-9]{3}-[0-9]{3}$");
        string myCard = txtCard.Text;
        Match m  = card.Match(myCard);

        if(m.Success)
        {
            MessageBox.Show("The card number entered is vaild");
        }
        else
        {
            MessageBox.Show("The card number entered is an invaild card number...");
        }

        txtCard.Clear();
        txtCard.Focus();

我尝试的每张卡号都给我相同的结果,数字无效。 任何人都可以引导我朝着正确的方向前进吗? 非常感谢!

2 个答案:

答案 0 :(得分:2)

您的问题出在正则表达式中。它应该是

^[1-9][0-9]{3}-[1-3]{4}-[0-9]{4}-[0-9]{4}$

{4}是[]中应该有多少位数。

您还应该注意,信用卡的第二个[1-3]是不正常的。至少从我的银行来。

我会将上述内容改为此。您可能想要检查速度,以及这是否适用于您想要的。

^[1-9][0-9]{3}(-[0-9]{4}){3}$

答案 1 :(得分:1)

查看Finding and Verifying Credit Card Numbers,其中有关于此主题的深入讨论。提出的正则表达式(在剥离连字符和空格之后):

^(?:4[0-9]{12}(?:[0-9]{3})?          # Visa
 |  5[1-5][0-9]{14}                  # MasterCard
 |  3[47][0-9]{13}                   # American Express
 |  3(?:0[0-5]|[68][0-9])[0-9]{11}   # Diners Club
 |  6(?:011|5[0-9]{2})[0-9]{12}      # Discover
 |  (?:2131|1800|35\d{3})\d{11}      # JCB
)$