Что проверяет сервис
Номер карты можно проверить по трём признакам, не обращаясь в банк. Сервис выполняет все три проверки и показывает результат каждой:
- Диапазон эмитента (IIN). Первые цифры указывают на платёжную систему: 4 — Visa, 51–55 или 2221–2720 — Mastercard, 34 или 37 — American Express, 6011/644–649/65 — Discover, 3528–3589 — JCB и так далее.
- Длина. У каждой системы свои допустимые длины: 15 цифр у Amex, 14 у большинства карт Diners Club, 16 почти у всех остальных и до 19 у некоторых карт Visa, Discover, JCB, UnionPay и Maestro.
- Контрольная сумма Луна. Последняя цифра — контрольная. Формула Луна находит любую ошибку в одной цифре и большинство перестановок двух соседних цифр.
Если все три проверки пройдены, номер корректно сформирован. Больше сайт сам по себе узнать не может: существует ли счёт, открыт ли он и есть ли на нём средства, знает только банк-эмитент — и проверяет это при авторизации платежа.
Алгоритм Луна по шагам
Вот расчёт для тестового номера 4111 1111 1111 1111. Каждая вторая цифра, считая справа, удваивается; если результат больше 9, из него вычитается 9. Затем все значения складываются:
| Цифра | 4 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Удваивается? | 8 | – | 2 | – | 2 | – | 2 | – | 2 | – | 2 | – | 2 | – | 2 | – |
| Прибавляем | 8 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 |
Сумма равна 30. Поскольку 30 делится на 10, номер проверку проходит. Измените любую одну цифру — и сумма перестанет быть кратной 10. Попробуйте сделать это в форме выше: сервис покажет, какой должна быть контрольная цифра у изменённого номера.
Из чего состоит номер карты
| Часть | Цифры | Что означает |
|---|---|---|
| Идентификатор отрасли (MII) | 1-я | Отрасль: 3 — путешествия и развлечения, 4–5 — банки и финансы, 6 — торговля и банки |
| Идентификатор эмитента (IIN / BIN) | Первые 6–8 | Платёжная система и банк-эмитент, тип карты (кредитная, дебетовая, предоплаченная) и страна |
| Идентификатор счёта | Средние | Назначается эмитентом для конкретной карты |
| Контрольная цифра | Последняя | Вычисляется по алгоритму Луна из всех остальных цифр |
Как проверять номер карты в своей форме оплаты
Если вы пишете валидацию для собственного checkout, несколько правил избавят клиентов от ложных отказов, а вас — от лишних обращений в поддержку:
- Сначала очистите ввод. Уберите пробелы и дефисы и только потом проверяйте номер: люди копируют его в самом разном виде.
- Проверяйте по порядку и объясняйте ошибку. Длина и IIN — до алгоритма Луна; сообщение «слишком короткий номер» полезнее, чем просто «неверная карта».
- Подсказывайте во время ввода, но не блокируйте незнакомые BIN. Новые диапазоны появляются регулярно — вспомните серию 2 у Mastercard или «Мир» с префиксами 2200–2204.
- Помните, что Луна проверяет только формат. Пройдёт ли платёж, решает шлюз и банк-эмитент, а не ваша форма.
- Не логируйте и не храните полные номера карт в средах разработки и staging — этого требует PCI DSS. Для тестов берите тестовые номера.
Когда пригодится проверка номера карты
- Чтобы понять, почему платёжная форма не принимает номер, который ввёл клиент.
- Чтобы проверить фикстуры и тестовые данные перед импортом.
- Чтобы сравнить собственный код валидации с эталонной реализацией.
- Чтобы разобраться, как устроены номера карт, и объяснить это на занятии.
Если вам нужны номера для тестов, генератор банковских карт создаёт до 1000 тестовых карт за раз со сроком действия и CVV и выгружает их в CSV, JSON или XML. Помните: даже пройдя эту проверку, они остаются вымышленными данными — ни один шлюз в боевом режиме не примет их к оплате.
Частые вопросы
Если номер прошёл проверку, значит, карта существует?
Нет. Сервис проверяет только формат. Существует ли счёт, активен ли он и есть ли на нём деньги, может подтвердить только банк-эмитент при авторизации платежа.
Безопасно ли вставлять сюда номер настоящей карты?
Проверка выполняется на JavaScript в вашем браузере, и номер не попадает на наш сервер. И всё же лучше взять за правило не вводить номера настоящих карт на сайтах без необходимости.
Какие ошибки находит алгоритм Луна?
Он ловит любую ошибку в одной цифре и большинство перестановок двух соседних цифр. Поэтому формы оплаты используют его, чтобы сразу подсказать об опечатке ещё до отправки платежа.
Почему мой номер считается неверным?
Чаще всего это опечатка: одной неверной цифры достаточно, чтобы сумма Луна не сошлась. Сервис показывает, какой должна быть контрольная цифра, так что разницу легко заметить.