Меню

Формат номера банковской карты: длина, префикс, контрольная цифра

Формат номера банковской карты — это три части: идентификатор эмитента, номер счёта и контрольная цифра. Разбираем допустимые длины и значение первой цифры.

Опубликовано

  • тестовые данные
  • платежи

Когда человек впервые узнаёт, что номера карт бывают разной длины, это обычно вызывает удивление: кажется, что шестнадцать цифр — обязательный стандарт. Это не так, и формат номера банковской карты устроен гибче, чем принято думать. Строка состоит из нескольких смысловых частей, каждая из которых отвечает за своё, а общая длина зависит от платёжной системы и от того, как банк решил нумеровать счета. Понимание этой анатомии объясняет сразу несколько вещей: почему форма ругается на «неправильную» карту, почему нельзя проверять только количество цифр и почему первая цифра важнее, чем кажется.

Из каких частей складывается номер

Любой номер карты — это три блока, записанные подряд без разделителей.

Блок Что в нём Кто его определяет
Идентификатор эмитента Начальные цифры, по которым система находит платёжную сеть и выпустивший банк Платёжная система и банк
Номер счёта Середина строки, уникальная внутри выделенного диапазона Банк-эмитент
Контрольная цифра Одна последняя цифра, вычисленная из всех предыдущих Опубликованное правило нумерации

Идентификатор эмитента исторически называли номером банковской идентификации, а сейчас всё чаще называют идентификатором эмитента — речь про одни и те же первые цифры. В некоторых схемах этот идентификатор занимает восемь цифр вместо шести, и это одна из причин, по которой слепо копировать старые таблицы префиксов не стоит.

Почему длина номера различается?

Стандарт нумерации задаёт верхнюю границу в девятнадцать цифр, но не требует какой-то одной длины. На практике чаще всего встречаются тринадцать, четырнадцать, пятнадцать и шестнадцать цифр, причём внутри одной платёжной системы возможны варианты: карты, выпущенные в разные годы и разными программами, могут отличаться по длине.

Для формы это означает простую вещь: проверка «ровно шестнадцать» отбрасывает часть реальных карт. Правильнее сначала определить платёжную систему по началу строки, а затем сверить длину именно с её допустимым набором. И да, существуют корректные номера короче шестнадцати цифр — их тоже нужно уметь принять.

Что означает первая цифра

Самый первый символ строки — не часть идентификатора банка, а признак отрасли. Это публичная схема распределения диапазонов, и она объясняет, почему одни карты начинаются с четвёрки, а другие с шестёрки.

Первая цифра Отрасль
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.

Практический вывод для тестировщика: одного «универсального» тестового номера недостаточно. Нужны как минимум по одному значению на каждую платёжную систему, которую вы собираетесь поддерживать, включая ту, чьи карты покупатели держат редко. И обязательно нужен как минимум один номер несуществующего начала — чтобы проверить, что форма честно скажет «неизвестная платёжная система», а не промолчит.

Бывают ли номера карт без контрольной цифры?

Нет — контрольная цифра есть всегда, иначе номер невозможно проверить на опечатку. Отсюда важное следствие: последняя цифра не случайна, она вычисляется из предыдущих по алгоритму Луна. Любой номер, который не сходится по этому правилу, отвергается ещё на подходе, без обращения к банку.

При этом сама контрольная цифра не несёт никакой информации о карте: она не подтверждает ни существование счёта, ни право на оплату. Она лишь ловит часть ошибок ввода. Подробно это правило разобрано в отдельном материале про алгоритм Луна.

Как форма должна показывать номер

С точки зрения системы хранения номер — это непрерывная строка цифр без разделителей. Пробелы, которыми номер разбит на карте и которые человек по привычке набирает, к данным не относятся и должны исчезать при вводе. Дефисы, точки, скобки — то же самое.

Пользователю при этом нужно показывать совсем другое: разбивку на группы по четыре цифры, потому что так строку легче прочитать и продиктовать по телефону. Прятать часть цифр полезно в интерфейсе, где номер просто подтверждают: стандартная практика — показывать начало и последние четыре цифры, а остальное заменять точками.

Отсюда типичная ошибка при проектировании: разделители попадают в базу вместе с номером, и потом одна и та же карта существует в системе в нескольких видах — с пробелами, без пробелов, с дефисами. Это ломает поиск, сверку и отчётность.

Что важно разработчику

Порядок обработки ввода лучше зафиксировать сразу, потому что переделывать его позже дорого. Сначала очистка: удалите всё, кроме цифр, включая пробелы, дефисы и невидимые символы, которые часто попадают в строку при копировании из мессенджеров и таблиц. Затем проверка алфавита: если после очистки остались буквы, это ошибка, и сообщать о ней нужно отдельно. Затем длина и допустимое начало, и только в конце — контрольная цифра.

Ещё одна тонкость — маска ввода. Она удобна, но должна быть снисходительной: если жёстко зафиксировать шестнадцать позиций, форма откажет владельцу пятнадцатизначной карты, а он решит, что его карта не поддерживается. Полезно заранее решить, что важнее: единообразие отображения или способность принять любой законный номер. Для платёжной формы правильный ответ — второе.

И последнее: никогда не полагайтесь на проверку в браузере как на единственную. Поле ввода легко обойти, а данные приходят в систему не только из формы. О том, как выглядит полная последовательность отсева, рассказано в материале про проверку номера в коде.

Что делать дальше

Возьмите любой номер из генератора и разберите его по частям: какая цифра отвечает за отрасль, где заканчивается идентификатор эмитента, сходится ли контрольная сумма. Номера там структурно корректны, но никогда не выпускались ни одним банком, поэтому с ними можно работать без опаски. Такое упражнение снимает большую часть непонимания. Дальше сверьтесь с чек-листом платёжной формы, чтобы ни один из описанных сценариев не остался непроверенным.

Читать дальше

Статьи: Генератор фальшивых номеров банковских карт