Валидатор банковских карт
РазработкаПроверяйте номера карт с помощью контрольной суммы Луна и определяйте бренд (Visa, Mastercard, Amex, UnionPay, Discover). Полностью в браузере.
Удалённые URL не запрашиваются; вставьте JSON напрямую.
- Бренд
- Проверка Луна
- Длина
На этой странице
Что такое валидатор номера карты?#
Номер платёжной карты (PAN, Primary Account Number) — не случайная строка. Его ведущие цифры — это BIN-префикс, идентифицирующий эмитента (Visa начинается с 4, Mastercard — с 51–55 или 2221–2720 и т. д.), общая длина попадает в узкий диапазон по бренду, а последняя цифра — контрольная, вычисленная так, чтобы всё число удовлетворяло алгоритму Луна. Валидатор растасовывает эти три сигнала и сообщает для любой строки цифр, корректно ли она сформирована, — а не является ли она реальной, выпущенной, платёжеспособной картой.
Эта страница делает ровно это, целиком в вашем браузере. Введите или вставьте номер — и она определит бренд по BIN-префиксу, отформатирует цифры в читаемые группы по 4, прогонит контрольную сумму Луна и сверит длину с тем, что реально использует этот бренд. Это инструмент, за которым тянутся при создании формы оформления заказа (совпадает ли моя валидация на уровне поля с реальными правилами BIN?), при изучении работы Луна или при sanity-check’е тестового фикстура.
Никогда не вводите реальный номер карты. Используйте тестовые PAN (те, что публикуют платёжные шлюзы для sandbox) или числа, сгенерированные вами для обучения. Всё здесь выполняется локально и ничего не передаётся, но относиться к любому PAN как к чувствительному — правильная привычка.
Как пользоваться#
- Прочитайте примечание о конфиденциальности над полем ввода — оно подтверждает, что номер не покидает ваш браузер.
- Введите или вставьте номер в поле Номер карты. Пробелы, дефисы, точки и буквы вырезаются автоматически; можно вставить
4111-1111 1111.1111, и это будет прочитано как4111111111111111. - Нажмите Пример, чтобы загрузить известный тестовый PAN Visa, или Очистить для сброса.
- Читайте карточку результата:
- Строка вердикта говорит, корректно ли сформирован номер.
- Значок бренда показывает определённого эмитента (Visa, Mastercard, American Express, Discover, UnionPay) либо «Неизвестен», когда ни один BIN-префикс не подошёл.
- Группировка показывает цифры, отформатированные четвёрками, готовые к копированию.
- Три строки проверки отдельно отчитываются по бренду, Луну (пройдена / не пройдена) и длине (в диапазоне / вне диапазоне), поэтому видно, какое именно правило не сработало, а не просто «недействительно».
Ключевые возможности#
- Контрольная сумма Луна собственной реализацией. Тот же алгоритм, что карты носят с 1960-х: обход цифр справа налево, удвоение каждой второй, суммирование и проверка делимости на десять. Контрольная цифра в конце — то, что делает опечатку в одной цифре всегда ошибочной.
- Детекция BIN-префикса для пяти брендов. Visa, Mastercard, American Express, Discover и UnionPay, сопоставляются в порядке приоритета, чтобы бренды с префиксом
6(Discover 6011/65 против UnionPay 62) не конфликтовали. - Проверка длины по бренду. Amex — 15 цифр; Visa — 13 или 16; Discover и UnionPay могут быть от 16 до 19. Применяется правило длины для детектированного бренда, с откатом к общему диапазону 12–19, когда префикс неизвестен.
- Локаль-безопасная нормализация цифр. Арабско-индийские (٤١١١), персидские, деванагари, бенгальские и fullwidth (123) глифы цифр транслитерируются в ASCII 0–9 до валидации, поэтому один и тот же PAN проходит проверку независимо от метода ввода или локали пользователя.
- Группировка по 4 цифры для отображения. 16-значный PAN становится
4111 1111 1111 1111; 15-значный Amex принимает привычный вид3782 8224 6310 005(4-4-4-3). - Строго локально. Бэкенда и сетевых запросов нет. PAN обрабатывается в памяти и выводится в карточку результата в той же нажатии клавиши.
Разбор примера#
Нажмите Пример, чтобы загрузить канонический тестовый PAN Visa, или введите 4111 1111 1111 1111. Карточка результата покажет:
verdict Valid
brand Visa
grouped 4111 1111 1111 1111
Luhn pass
length ok (16 digits)
Теперь попробуйте тестовый PAN American Express с неловкими пробелами — вставьте 3782 822463 10005. Инструмент убирает пробелы, детектирует Amex по префиксу 37 и переформатирует в собственную группировку Amex:
verdict Valid
brand American Express
grouped 3782 8224 6310 005
Luhn pass
length ok (15 digits)
Наконец, измените одну цифру номера Visa на 4111 1111 1111 1112. Бренд и длина по-прежнему в порядке, но Лун теперь провален — и инструмент явно говорит об этом, а не прячет, какая проверка сломалась:
verdict Invalid
brand Visa
grouped 4111 1111 1111 1112
Luhn fail
length ok (16 digits)
Это разделение важно при отладке формы: проваленный Лун указывает на опечатку, а проваленная длина — на неверный бренд или обрезанную вставку.
FAQ#
Значит ли «действителен», что карта реально сработает?#
Нет. «Действителен» лишь означает, что номер корректно сформирован — его префикс отображается на известный бренд, длина соответствует этому бренду и он удовлетворяет Луну. Это ничего не говорит о том, была ли карта когда-либо выпущена, активна ли и есть ли на ней средства. Трактовать это надо как проверку формата — так же, как вы валидируете форму email, не зная, существует ли ящик.
Почему Лун ловит каждую однозначную опечатку?#
Из-за того, как контрольная сумма удваивает чередующиеся цифры: изменение одной цифры сдвигает сумму на величину, никогда не кратную десяти, а перестановка двух соседних цифр меняет сумму так, что Лун тоже это замечает (с одним узким исключением). Алгоритм спроектирован именно для ловли опечаток, которые люди совершают на клавиатуре.
В номере, который я вставил, не-латинские цифры. Сработает ли?#
Да. Валидатор транслитерирует арабско-индийские, персидские, деванагари, бенгальские и fullwidth глифы цифр в ASCII до каких-либо других действий, поэтому ٤١١١ трактуется как 4111. Это сохраняет консистентность валидации вне зависимости от локали и метода ввода, а отображаемая «группировка» всегда использует ASCII-цифры.
Какие бренды карт распознаются?#
Visa, Mastercard, American Express, Discover и UnionPay по их публичным диапазонам BIN-префиксов. Номера с префиксом, не подходящим ни под один из них (например, начинающиеся с 1 или 9), сообщают бренд «Неизвестен», но если длина попадает в общий диапазон 12–19 и Лун проходит, номер всё равно считается корректно сформированным — просто он не из пяти моделируемых брендов.