Symfony 1.4的信用卡验证器

时间:2011-06-07 15:15:43

标签: php regex validation symfony1 credit-card

是否有人使用Symfony 1.4工作的信用卡号验证器?

我通过https://gist.github.com/181049找到http://brentertainment.com/2009/09/01/some-helpful-symfony-form-validators/,但至少切换正则表达式模式似乎肯定已经破解,并且可能也是jcb / enroute。

我认为问题在于它使用方括号而不是括号,它试图匹配前缀,但如果它被破坏,那么它会让我怀疑验证器的其余部分。

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

应该是

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

有没有人有他们在生产中使用的经过验证的有效验证器?最好是英国卡?

2 个答案:

答案 0 :(得分:1)

我会远离美国的regexps,这个例子省略了许多有效的前缀:Visa * 40 *,Visa / Electron 48 *,独奏35 *。

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

BIN前缀(前6个)经常被修改(范围被添加/退出/免除e-comm),并且在较小程度上同样适用于前4个,所以你可能想要依赖第1个数字和放大器;而是检查LUHN。

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

答案 1 :(得分:0)

RegexBuddy Library建议如下:

^(?: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
4123456789012345
4123 4567 8901 2345
4123-4567-8901-2345

MasterCard
5123456789012345
5123-4567-8901-2345
5123 4567 8901 2345

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

American Express
341234567890123
3412 345678 90123
3412-345678-90123

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

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