Проверка кредитной карты с помощью регулярного выражения?

Как правильно проверить кредитную карту с помощью регулярного выражения? Если какой из них использовать, то в Интернете их масса. Если нет, как проверить?


person level20dm    schedule 22.09.2009    source источник


Ответы (5)


Как я могу использовать номера кредитных карт, содержащие пробелы? охватывает все, что вам может понадобиться.

person cletus    schedule 23.09.2009

См. Эту ссылку. Поиск или проверка номеров кредитных карт с помощью регулярных выражений.

  • Visa: ^ 4 [0-9] {12} (?: [0-9] {3})? $ Все номера карт Visa начинаются с 4. Новые карты имеют 16 цифр. На старых картах их 13.
  • MasterCard: ^ 5 [1-5] [0-9] {14} $ Все номера MasterCard начинаются с цифр от 51 до 55. Все они состоят из 16 цифр.
  • American Express: ^ 3 [47] [0-9] {13} Номера карт American Express на сумму $ начинаются с 34 или 37 и состоят из 15 цифр.
  • Diners Club: ^ 3 (?: 0 [0-5] | [68] [0-9]) [0-9] {11} Номера карт $ Diners Club начинаются с 300 по 305, 36 или 38. У всех по 14. цифры. Существуют карты Diners Club, которые начинаются с 5 и имеют 16 цифр. Это совместное предприятие Diners Club и MasterCard, и их следует обрабатывать как MasterCard.
  • Discover: ^ 6 (?: 011 | 5 [0-9] {2}) [0-9] {12} $ Номера карт Discover начинаются с 6011 или 65. Все они состоят из 16 цифр.
  • JCB: ^ (?: 2131 | 1800 | 35 \ d {3}) \ d {11} Карты $ JCB, начинающиеся с 2131 или 1800, имеют 15 цифр. Карты JCB, начинающиеся с 35, имеют 16 цифр.

Пока.

person RRUZ    schedule 23.09.2009
comment
Карты Discover добавили несколько новых диапазонов. Вот обновленное регулярное выражение для карт Discover ^6(?:0110[0-9]|011[2-4][0-9]|01174|0117[7-9]|0118[6-9]|0119[0-9]|4[4-9][0-9]{3}|5[0-9]{4})[0-9]{10}$ - person realgt; 04.05.2012
comment
как насчет China UNion Pay? - person Raju yourPepe; 25.04.2013

Я думаю, вы ищете алгоритм Луна. Это простая формула контрольной суммы, используемая для проверки различных идентификационных номеров.

person csharptest.net    schedule 23.09.2009

Это зависит от того, насколько точной должна быть предварительная проверка. Чтобы проверить все, что вы можете, вам нужно вычислить, какой должна быть последняя цифра карты, и сравнить с тем, что введено, чего не может сделать RegEx.

Алгоритм и другие сведения см. В этой ссылке, где также представлен список распространенных префиксов номеров, вы могли бы подтвердить против.

person Eric J.    schedule 23.09.2009

-- Редактировать:

На самом деле, я немного не согласен с собой и согласен с cletus. Подтвердите как можно больше (не вдаваясь в подробности о конкретных типах кредитных карт [IMHO]) перед отправкой. И само собой разумеется (надеюсь), что эта проверка должна выполняться в JavaScript, чтобы сделать это быстро, а затем на сервере для двойной проверки (и для людей с ограниченными возможностями JavaScript).

- Предыдущий ответ:

Не беспокойтесь; просто позвольте провайдеру подтвердить это, когда вы действительно попытаетесь произвести оплату. Нет законной причины пытаться проверить это самостоятельно. Вы можете использовать this, если действительно хотите.

person Noon Silk    schedule 23.09.2009
comment
Не могу больше не согласиться. Платежные шлюзы требуют времени. Вы должны сделать все возможное, чтобы убедиться, что он действителен, прежде чем пытаться его использовать. - person cletus; 23.09.2009
comment
cletus: Затем сделайте беглую проверку с помощью системы Luhn и, очевидно, убедитесь, что все необходимые данные отправлены вам, прежде чем отправлять их. - person Noon Silk; 23.09.2009