Symfony 1.4 的信用卡验证器
Posted
技术标签:
【中文标题】Symfony 1.4 的信用卡验证器【英文标题】:Credit Card validator for Symfony 1.4 【发布时间】:2011-09-10 04:19:32 【问题描述】:有人在 Symfony 1.4 中使用有效的信用卡号码验证器吗?
我通过http://brentertainment.com/2009/09/01/some-helpful-symfony-form-validators/ 找到了https://gist.github.com/181049,但至少 switch 正则表达式模式似乎肯定被破坏了,并且可能 jcb / enroute 也是如此。
我认为问题在于它在尝试匹配前缀时使用方括号而不是括号,但如果它被破坏了,那么它会让我怀疑验证器的其余部分。
/^[4903|4911|4936|5641|6333|6759|6334|6767]\d12$/
应该是
/^(4903|4911|4936|5641|6333|6759|6334|6767)\d12$/
是否有人在生产中使用了有效且经过测试的验证器?最好用英国卡?
【问题讨论】:
【参考方案1】:RegexBuddy 库建议如下:
^(?:4\d3[ -]*\d4[ -]*\d4[ -]*\d(?:\d3)?|5[1-5]\d2[ -]*\d4[ -]*\d4[ -]*\d4|6(?:011|5[0-9]2)[ -]*\d4[ -]*\d4[ -]*\d4|3[47]\d2[ -]*\d6[ -]*\d5|3(?:0[0-5]|[68][0-9])\d[ -]*\d6[ -]*\d4|(?:2131|1800)[ -]*\d6[ -]*\d5|35\d2[ -]*\d4[ -]*\d4[ -]*\d4)$
以上将匹配所有信用卡,例如以下示例:
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
【讨论】:
【参考方案2】:我会远离美国正则表达式,该示例省略了许多有效前缀:Visa DR 为 40*,Visa/Electron 为 48*,solo 为 35*。
对于大多数方案,长度也可以跨越 16-19 位,因此长度限制不正确。
BIN 前缀(第 1 位 6)会定期修改(添加/取消/免除电子通信的范围),并且在较小程度上,第 4 位也是如此,因此您可能希望依赖第 1 位数字 &而是进行 LUHN 检查。
如果您在英国; http://www.barclaycard.co.uk/business/documents/pdfs/bin_rules.pdf
【讨论】:
以上是关于Symfony 1.4 的信用卡验证器的主要内容,如果未能解决你的问题,请参考以下文章