Проверить форму на одной карте недостаточно, и это становится очевидно в первый же день работы с реальными покупателями. Тестовые номера карт Visa и Mastercard, а также номера остальных платёжных систем различаются по длине, по началу и по тому, как форма должна их показывать. Если набор данных состоит из одного значения, вы не проверите ни определение платёжной системы, ни поведение формы на пятнадцатизначном номере. Ниже — какие различия между системами действительно важны, где взять опубликованные диапазоны и как собрать из них полноценный набор для тестирования.
Что действительно отличает платёжные системы друг от друга?
Снаружи все карты выглядят одинаково: пластик, номер, срок, код проверки. Для формы оплаты различий всего четыре, и именно они определяют объём работы.
| Различие | На что влияет в форме |
|---|---|
| Начало номера | Определение системы и показ её значка |
| Длина номера | Проверка полноты ввода и разбивка на группы |
| Расположение кода проверки | Текст подсказки в поле и число цифр |
| Возможности подтверждения | Сценарий дополнительной проверки личности |
Всё прочее — маркетинг и внутренние правила конкретного банка. Форме эти детали не нужны, и не стоит строить проверки на них.
Где взять опубликованные диапазоны номеров?
Платёжные системы не скрывают, какие диапазоны им выделены. Это публичная схема нумерации, и на неё можно опираться при подготовке данных.
- Visa — номера начинаются с четвёрки.
- Mastercard — с пар от 51 до 55 и с четырёхзначного блока от 2221 до 2720.
- American Express — с 34 или 37, длина пятнадцать цифр, код проверки из четырёх цифр на лицевой стороне.
- Discover — с 6011, с 65 и из нескольких узких блоков.
- JCB — из блока от 3528 до 3589.
- Diners Club — с 300–305, с 36 и с 38–39.
- UnionPay — с 62.
- Maestro — с 50 и из диапазона от 56 до 69.
Обратите внимание на две вещи. Первая: у одной системы может быть несколько несвязанных диапазонов, и обработка только первого из них — типичный дефект. Вторая: диапазоны иногда расширяются, поэтому таблицы префиксов стоит периодически сверять с первоисточником, а не хранить в виде однажды скопированного списка.
Почему длина номера различается между системами
Стандарт нумерации допускает номера до девятнадцати цифр, а конкретную длину определяет платёжная система и банк. На практике встречаются тринадцать, четырнадцать, пятнадцать и шестнадцать цифр. Для одной из систем пятнадцать цифр — норма, а не исключение, и форма, требующая ровно шестнадцать символов, откажет её держателям.
Отсюда практическое требование: правило длины должно быть привязано к определённой системе, а не задано глобально. И проверять его нужно не только на «правильных» значениях: полезно добавить номер правильной системы, но с одной лишней цифрой, — чтобы убедиться, что форма отреагирует понятным сообщением, а не молчаливым отказом.
Как собрать тестовый набор по системам
Одного универсального номера не существует, поэтому набор строится по строкам таблицы. Для каждой платёжной системы, которую вы поддерживаете, нужны минимум три значения: корректный номер, номер с испорченной контрольной цифрой и номер с незнакомым началом. Добавьте по одному значению на краевые длины и получите рабочий минимум.
Получить такой набор удобно в генераторе: можно закрепить нужную платёжную систему, выбрать количество значений и получить сразу партию. Все выданные номера структурно корректны, но никогда не выпускались ни одним банком и не принадлежат никому — это материал для проверки интерфейса и интеграций, а не платёжное средство.
Для каждого значения полезно записать, что оно проверяет. Через месяц эта подпись сэкономит больше времени, чем весь набор. И держите набор в одном файле или одном месте: когда тестовые значения разбросаны по нескольким наборам, никто не может сказать, какие системы уже покрыты, а какие забыты.
Бывают ли карты, которые не подходят ни одной системе
Да, и это не экзотика. Схема нумерации распределяет первые цифры по отраслям: единица и двойка относятся к авиаперевозкам, тройка — к туризму, семёрка — к нефтяной отрасли, восьмёрка — к телекоммуникациям, девятка — к национальным назначениям. Форма, которая просто проверяет длину и контрольную сумму, спокойно примет такой номер и попытается отправить его на оплату.
Проверка диапазона нужна именно для этого: она отделяет «номер похож на карту» от «номер относится к известной платёжной системе». Сообщение в этом случае должно быть отдельным, иначе покупатель с редкой системой будет снова и снова перепроверять цифры, которые набраны верно.
Заодно решите, сколько цифр начала вы сравниваете. Начало номера — это идентификатор эмитента, и его длина не фиксирована: исторически хватало шести цифр, но схема нумерации допускает и восьмизначные идентификаторы. Отсюда два практических вывода. Не сравнивайте начало «намертво» с шестью цифрами: правило, которое требует ровно шесть символов, сегодня не сломается, но при появлении более длинных идентификаторов начнёт ошибаться, и заметить это будет трудно — надёжнее хранить набор диапазонов разной длины и проверять вхождение, а не равенство. И не пытайтесь определять систему по одной первой цифре: единица, двойка или семёрка в начале ещё не означают карту конкретной системы, а слишком ранняя догадка приводит к неверному значку рядом с полем. Уверенное распознавание наступает после того, как совпал хотя бы один полный диапазон.
Что важно разработчику
Матрица тестирования должна повторять матрицу поддержки. Если вы заявляете приём восьми платёжных систем, в наборе должно быть не меньше восьми корректных значений, иначе про шесть из них вы не знаете ничего. Особенно это касается систем, карты которых покупатели держат редко: ошибка в них обнаруживается позже всего, обычно уже на живых операциях.
Правила лучше описать декларативно — как данные, а не как длинную цепочку условий. Список диапазонов, набор допустимых длин для каждого диапазона и признак того, где находится код проверки, удобно держать в одном месте: тогда добавление новой системы не требует правок в нескольких функциях, а тесты автоматически подхватывают новый сценарий.
Отдельно проверьте взаимодействие правил. Частая ошибка — когда определение системы по началу номера выполняется только для уже прошедших проверку длины значений. Для пятнадцатизначного номера, который относится к системе с пятнадцатизначными номерами, такое сочетание даёт отказ на ровном месте. Порядок должен быть один и тот же для всех: определить систему по началу, затем сверить длину именно для неё.
И ещё одна деталь, которая нравится не всем: значок платёжной системы рядом с полем лучше показывать после того, как начало номера распознано уверенно. Слишком раннее угадывание раздражает пользователя, когда картинка скачет на каждом введённом символе.
Что делать дальше
Распечатайте таблицу поддерживаемых систем и отметьте те, для которых у вас нет ни одного тестового значения, — это и есть список ближайших задач. Готовые номера для пропущенных строк можно получить в генераторе, а затем прогнать по ним проверку в коде, чтобы убедиться, что порядок шагов одинаков для всех систем.