Когда человек впервые узнаёт, что номера карт бывают разной длины, это обычно вызывает удивление: кажется, что шестнадцать цифр — обязательный стандарт. Это не так, и формат номера банковской карты устроен гибче, чем принято думать. Строка состоит из нескольких смысловых частей, каждая из которых отвечает за своё, а общая длина зависит от платёжной системы и от того, как банк решил нумеровать счета. Понимание этой анатомии объясняет сразу несколько вещей: почему форма ругается на «неправильную» карту, почему нельзя проверять только количество цифр и почему первая цифра важнее, чем кажется.
Из каких частей складывается номер
Любой номер карты — это три блока, записанные подряд без разделителей.
| Блок | Что в нём | Кто его определяет |
|---|---|---|
| Идентификатор эмитента | Начальные цифры, по которым система находит платёжную сеть и выпустивший банк | Платёжная система и банк |
| Номер счёта | Середина строки, уникальная внутри выделенного диапазона | Банк-эмитент |
| Контрольная цифра | Одна последняя цифра, вычисленная из всех предыдущих | Опубликованное правило нумерации |
Идентификатор эмитента исторически называли номером банковской идентификации, а сейчас всё чаще называют идентификатором эмитента — речь про одни и те же первые цифры. В некоторых схемах этот идентификатор занимает восемь цифр вместо шести, и это одна из причин, по которой слепо копировать старые таблицы префиксов не стоит.
Почему длина номера различается?
Стандарт нумерации задаёт верхнюю границу в девятнадцать цифр, но не требует какой-то одной длины. На практике чаще всего встречаются тринадцать, четырнадцать, пятнадцать и шестнадцать цифр, причём внутри одной платёжной системы возможны варианты: карты, выпущенные в разные годы и разными программами, могут отличаться по длине.
Для формы это означает простую вещь: проверка «ровно шестнадцать» отбрасывает часть реальных карт. Правильнее сначала определить платёжную систему по началу строки, а затем сверить длину именно с её допустимым набором. И да, существуют корректные номера короче шестнадцати цифр — их тоже нужно уметь принять.
Что означает первая цифра
Самый первый символ строки — не часть идентификатора банка, а признак отрасли. Это публичная схема распределения диапазонов, и она объясняет, почему одни карты начинаются с четвёрки, а другие с шестёрки.
| Первая цифра | Отрасль |
|---|---|
| 1 или 2 | Авиаперевозки |
| 3 | Туризм и развлечения |
| 4, 5 | Банковские платёжные системы |
| 6 | Торговля и банковские сервисы |
| 7 | Нефтяная отрасль |
| 8 | Телекоммуникации |
| 9 | Национальные назначения |
Из таблицы видно, что «четвёрка в начале» — не признак конкретного банка, а признак группы платёжных систем. А вот следующие за ней цифры действительно определяют сеть: у каждой платёжной системы есть свой опубликованный набор диапазонов, и по нему форма понимает, какой значок нарисовать рядом с полем ввода.
Как читать опубликованные диапазоны префиксов
Платёжные системы публикуют свои диапазоны открыто, поэтому их можно использовать в тестах. Выглядит это так: у 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.
Практический вывод для тестировщика: одного «универсального» тестового номера недостаточно. Нужны как минимум по одному значению на каждую платёжную систему, которую вы собираетесь поддерживать, включая ту, чьи карты покупатели держат редко. И обязательно нужен как минимум один номер несуществующего начала — чтобы проверить, что форма честно скажет «неизвестная платёжная система», а не промолчит.
Бывают ли номера карт без контрольной цифры?
Нет — контрольная цифра есть всегда, иначе номер невозможно проверить на опечатку. Отсюда важное следствие: последняя цифра не случайна, она вычисляется из предыдущих по алгоритму Луна. Любой номер, который не сходится по этому правилу, отвергается ещё на подходе, без обращения к банку.
При этом сама контрольная цифра не несёт никакой информации о карте: она не подтверждает ни существование счёта, ни право на оплату. Она лишь ловит часть ошибок ввода. Подробно это правило разобрано в отдельном материале про алгоритм Луна.
Как форма должна показывать номер
С точки зрения системы хранения номер — это непрерывная строка цифр без разделителей. Пробелы, которыми номер разбит на карте и которые человек по привычке набирает, к данным не относятся и должны исчезать при вводе. Дефисы, точки, скобки — то же самое.
Пользователю при этом нужно показывать совсем другое: разбивку на группы по четыре цифры, потому что так строку легче прочитать и продиктовать по телефону. Прятать часть цифр полезно в интерфейсе, где номер просто подтверждают: стандартная практика — показывать начало и последние четыре цифры, а остальное заменять точками.
Отсюда типичная ошибка при проектировании: разделители попадают в базу вместе с номером, и потом одна и та же карта существует в системе в нескольких видах — с пробелами, без пробелов, с дефисами. Это ломает поиск, сверку и отчётность.
Что важно разработчику
Порядок обработки ввода лучше зафиксировать сразу, потому что переделывать его позже дорого. Сначала очистка: удалите всё, кроме цифр, включая пробелы, дефисы и невидимые символы, которые часто попадают в строку при копировании из мессенджеров и таблиц. Затем проверка алфавита: если после очистки остались буквы, это ошибка, и сообщать о ней нужно отдельно. Затем длина и допустимое начало, и только в конце — контрольная цифра.
Ещё одна тонкость — маска ввода. Она удобна, но должна быть снисходительной: если жёстко зафиксировать шестнадцать позиций, форма откажет владельцу пятнадцатизначной карты, а он решит, что его карта не поддерживается. Полезно заранее решить, что важнее: единообразие отображения или способность принять любой законный номер. Для платёжной формы правильный ответ — второе.
И последнее: никогда не полагайтесь на проверку в браузере как на единственную. Поле ввода легко обойти, а данные приходят в систему не только из формы. О том, как выглядит полная последовательность отсева, рассказано в материале про проверку номера в коде.
Что делать дальше
Возьмите любой номер из генератора и разберите его по частям: какая цифра отвечает за отрасль, где заканчивается идентификатор эмитента, сходится ли контрольная сумма. Номера там структурно корректны, но никогда не выпускались ни одним банком, поэтому с ними можно работать без опаски. Такое упражнение снимает большую часть непонимания. Дальше сверьтесь с чек-листом платёжной формы, чтобы ни один из описанных сценариев не остался непроверенным.