2011-06-07 102 views
1

是否有人在Symfony 1.4中使用可用的信用卡号码验证器?Symfony 1.4的信用卡验证器

我经由http://brentertainment.com/2009/09/01/some-helpful-symfony-form-validators/发现https://gist.github.com/181049但至少开关正则表达式模式似乎确实破裂,可能JCB /途中为好。

我认为问题在于它使用方括号而不是括号来试图匹配前缀,但如果这样做被破坏了,那么它会导致我怀疑验证程序的其余部分。

/^[4903|4911|4936|5641|6333|6759|6334|6767]\d{12}$/ 

应该

/^(4903|4911|4936|5641|6333|6759|6334|6767)\d{12}$/ 

没有人有工作,测试验证他们在生产中使用?最好用英国卡?

回答

1

我会远离美国正则表达式,该示例省略了许多有效前缀:Visa DR的40 *,Visa/Electron的48 *,单独的35 *。

对于大多数方案,长度也可以跨越16-19位,所以长度约束不正确。

BIN前缀(第1 6)定期修改(范围增加/退休/免除电子通信),并在较小的程度上也是如此第1 4,所以你可能要依靠第一位数字而是用LUHN检查代替&。

如果你在英国; http://www.barclaycard.co.uk/business/documents/pdfs/bin_rules.pdf

0

使用RegexBuddy图书馆提出以下建议:

^(?:4\d{3}[ -]*\d{4}[ -]*\d{4}[ -]*\d(?:\d{3})?|5[1-5]\d{2}[ -]*\d{4}[ -]*\d{4}[ -]*\d{4}|6(?:011|5[0-9]{2})[ -]*\d{4}[ -]*\d{4}[ -]*\d{4}|3[47]\d{2}[ -]*\d{6}[ -]*\d{5}|3(?:0[0-5]|[68][0-9])\d[ -]*\d{6}[ -]*\d{4}|(?:2131|1800)[ -]*\d{6}[ -]*\d{5}|35\d{2}[ -]*\d{4}[ -]*\d{4}[ -]*\d{4})$ 

以上会匹配所有的信用卡,如下面的例子:

Visa 
4123456789
4123 4567 8901 2345 
4123-4567-8901-2345 

MasterCard 
5123456789
5123-4567-8901-2345 
5123 4567 8901 2345 

Discover 
6011123456789012 
6011-1234-5678-9012 
6011 1234 5678 9012 

American Express 
34123456789
3412 345678 9
3412-345678-9

Diner's Club 
30
3001 234567 8901 
3001-234567-8901 

JCB 
213112345678901 
2131 123456 78901 
2131-123456-78901 
35123456789
3512 3456 7890 1234 
3512-3456-7890-1234