Валидатор кредитных карт для Symfony 1.4 - PullRequest
1 голос
/ 07 июня 2011

Кто-нибудь использует работающий валидатор номеров кредитных карт с 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 ]

1 голос
/ 07 июня 2011

Я бы держался подальше от регулярных выражений США, в этом примере пропущено много действительных префиксов: 40 * для Visa DR, 48 * для Visa / Electron, 35 * для соло.

Длина может также охватывать 16-19 цифр для большинства схем, поэтому ограничение длины неверно.

Префиксы BIN (1-й 6) регулярно изменяются (диапазоны добавляются / удаляются / освобождаются от e-comm), и в меньшей степени то же самое верно для 1-го 4, поэтому вы можете полагаться на 1-ю цифру и вместо этого проверка LUHN.

Если вы в Великобритании; http://www.barclaycard.co.uk/business/documents/pdfs/bin_rules.pdf

0 голосов
/ 07 июня 2011

Библиотека 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
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
...