Command Palette

Search for a command to run...

Алгоритм Луна: как работает проверка кредитной карты

Алгоритм Луна: как работает проверка кредитной карты

T
Toolz Team
|Sep 13, 2026|16 Мин. читать
Предпочитайте Toolz.dev в Google

Часть коллекции Безопасность

Валидатор кредитной карты

Проверьте номер кредитной карты на контрольной сумме Luhn и определите сеть ее карт. Подтверждает только формат, никогда не связывается с банком.

Используйте Валидатор кредитной карты

я строю Toolz.devи до этого я потратил годы, отправляя плагины WordPress и Ларавель API, некоторые из которых должны были принимать платежи. первая форма оформления заказа, которую я когда-либо писал, отправляла каждый неправильно напечатанный номер карты прямо на платежный шлюз и ждала, пока он подскочит. Это работало, технически, но это было медленно и оно сгорело через запросы шлюза на номера, которые никогда не могли быть действительными в первую очередь. исправление было смущающе маленьким: запустить контрольную сумму Луна в браузере перед отправкой. Это изменение мгновенно поймало большинство опечаток и остановило поток бессмысленных вызовов API. Это руководство о том чеке, правила префикса, которые сидят рядом с ним, и Валидатор кредитной карты Я построил так, что вам никогда не придется заново реализовывать это по памяти.

TL;DR: Валидатор кредитной карты подтверждает, что число структурно верно, а не то, что оно принадлежит реальному счету. Он запускает два независимых теста: контрольную сумму Луна из ISO/IEC 7812-1, которая фиксирует почти каждую однозначную опечатку и соседнюю транспозицию, а также проверку длины и префикса по каждой сети и #39; опубликованным диапазонам эмитентов. номер может пройти один и подвести другой, поэтому два результата сообщаются отдельно. Он полностью работает в вашем браузере, поэтому номер карты никогда не загружается, и он никогда не сможет сказать вам, есть ли на карте деньги. Только эмитент знает, что.

Что значит, чтобы номер карты был действительным?

Номер платежной карты, формально Первичный Номер Счета или PAN, не является случайной строкой цифр Его структура определяется ИСО/МЭК 7812. Первые шесть-восемь цифр - это идентификационный номер эмитента, или IIN, который раньше назывался банковским идентификационным номером (BIN). Эти цифры идентифицируют сеть и банк-эмитент. Цифры после этого до предпоследнего являются индивидуальным идентификатором счета, а самая последняя цифра - это контрольная цифра, вычисленная с помощью алгоритма Луна.

Так & quot;valid & quot; имеет два отдельных значения, и это помогает держать их отдельно. первый заключается в том, что число подчиняется контрольной сумме Луна, то есть контрольная цифра согласуется с остальной частью числа. второй заключается в том, что число имеет правильную длину и префикс для реальной карточной сети. число может удовлетворять одному условию, а не другому. 4111 1111 1111 1112 имеет префикс Visa и длину Visa, но не работает Luhn. случайная шестнадцатизначная строка, которая заканчивается правой контрольной цифрой, проходит Luhn, но может начинаться с префикса, которым не владеет ни одна сеть. хороший валидатор сообщает вам, какой из двух не удалось, потому что исправление в каждом случае различно.

Что не может сделать ни один чек, так это сказать вам, что карта реальна. Структурная достоверность касается формы номера, а не состояния счета, стоящего за ним. Счет может не существовать, может быть заморожен, может превысить лимит или может быть закрыт много лет назад. Единственная система, которая знает, это банк-эмитент, и он отвечает ровно один раз, во время запроса авторизации в реальной транзакции. Все, что делает валидатор на стороне браузера, - это дешевый предварительный фильтр, который работает до того, как вы когда-либо доберетесь до этой точки.

Как работает алгоритм Луна?

Алгоритм Луна, также называемый алгоритмом mod-10, был запатентован Гансом Петером Луном в IBM в 1960 году и сейчас находится в открытом доступе. это контрольная сумма, что означает, что вся его цель - обнаружить случайные ошибки, а не обеспечить какую-либо безопасность. Он работает так. начиная с самой правой цифры и двигаясь влево, вы удваиваете каждую вторую цифру. если удвоение дает число больше девяти, вы вычитаете из него девять (что равнозначно сложению двух цифр).Тогда вы суммируете все цифры, удвоенные и нетронутые.Если сумма делится на десять, число проходит.

Вот проверка на 4111 1111 1111 1111, работая справа налево. крайняя правая цифра - это позиция один и не удваивается. Удвоение каждой второй цифры дает набор единиц и двойок, двойки приходят из удвоенных позиций. сложите их все и общее количество приземляется на кратное десяти, так что число проходит. Измените любую одну цифру, и сумма почти всегда перестанет быть кратной десяти, что как раз и делает проверку полезной.

Значение Luhn в том, что он ловит Он обнаруживает каждую однозначную ошибку, означающую любую одну цифру, введенную неправильно Он также ловит почти каждую транспозицию двух соседних цифр, классический & quot;I набрал 21 вместо 12 & quot; ошибка, за одним известным исключением: он не ловит своп 09 а 90, потому что оба отображаются в одну и ту же взвешенную сумму. Это настоящее слепое пятно, но оно редкое, и это причина, по которой Лун является контрольной суммой, а не криптографической гарантией. Для проверки формы это более чем достаточно хорошо, и именно поэтому он находится за полями карт практически каждого кассы в Интернете.

Как обнаруживается карточная сеть?

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

сеть Начинается с Действительные длины Код безопасности
Виза 4 13, 16, 19 3
Мастеркард 51-55, 2221-2720 16 3
Американский экспресс 34, 37 15 4
Откройте для себя 6011, 65, 644-649, 622126-622925 16, 19 3
Дайнерс Клуб 300-305, 309, 36, 38-39 14, 16, 19 3
JCB 3528-3589 16-19 3
ЮнионПэй 62 16-19 3
Маэстро 50, 56-69 (выбрано) 12-19 3

Перекрытия - интересная часть, и ошибаться - это то, как наивные детекторы дают осечки. Mastercard добавила 2221-2720 диапазон в 2017 году, поэтому детектор, написанный до этого, сообщает, что эти карты неизвестны. Discover владеет узким фрагментом 62 космос, 622126 через 622925, а UnionPay владеет остальной частью 62Итак, порядок, в котором вы их тестируете, решает, будет ли a 6221 карта читается как Discover или UnionPay. валидатор проверяет конкретное окно Discover перед широким префиксом UnionPay, чтобы оба приземлились правильно. American Express - это тот, который запускает код форматирования, поскольку он использует пятнадцать цифр, сгруппированных 4-6-5, а не обычные четыре группы по четыре человека, и использует четырехзначный код безопасности (CID, напечатанный на лицевой стороне), а не трехзначный CVV на оборотной стороне.

Как использовать валидатор кредитной карты

Инструмент намеренно прост. вы вставляете число и читаете результат. нет кнопки отправки и нечего настроить.

Шаг 1: Введите номер

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

Шаг 2: Прочтите приговор

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

Шаг 3: Проверьте обнаруженную сеть

Инструмент показывает сеть, которую он определил из префикса, длины, которые позволяет сеть, и как долго должен быть ее код безопасности Это полезно само по себе, когда вы строите форму и хотите показать правильный логотип карты, или когда вам нужно знать, ожидать ли трех- или четырехзначный CVV.

Шаг 4: Скопируйте отформатированный или замаскированный номер

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

Где подходит валидация и где она останавливается?

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

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

Как это соотносится с проверкой на сервере?

У обоих есть место, и они отвечают на разные вопросы. Проверка на стороне клиента с помощью Luhn и проверки префиксов мгновенная и конфиденциальная, она дает пользователю обратную связь перед отправкой, и это ничего не стоит вам. Ее предел в том, что она знает только о структуре. Проверка на стороне сервера через платежный процессор - единственное, что может подтвердить, что карта реальна и платна, но это стоит сетевого запроса, это может стоить денег за попытку авторизации, и это происходит после того, как пользователь взял на себя обязательство отправить. разумный дизайн использует и то, и другое: браузер ловит опечатки и ошибки формы бесплатно, и сервер делает одну проверку, которая имеет значение, когда пользователь платит. Пропуск проверки клиента делает форму медленной; пропуск проверки сервера означает, что вы никогда ничего по-настоящему не проверяли. Если вы собираете более широкий набор для такого рода работы, комплект Инструменты повышения производительности разработчик облава охватывает и другие коммунальные услуги, которые, как правило, живут рядом с ней.

Сопутствующие инструменты и дальнейшее чтение

Проверяющий карты редко путешествует в одиночку Когда вы закаливаете форму или конвейер данных, вы обычно также генерируете идентификаторы, хеширование значений, и проверка других видов ввода.The хэш-генератор это то, к чему вы стремитесь, когда вам нужно отпечатать значение, а не подтвердить его форму, и проверка силы пароля применяет тот же & quot;измерять его в браузере, никогда никуда не отправлять & quot; принцип к учетным данным. на стороне сети, the Калькулятор IP-подсети является ли сопутствующим инструментом для любого, кто строит инфраструктуру, на которой работает касса.

В более широком контексте Конфиденциальность данных и онлайн-инстру руководство объясняет, почему выполнение конфиденциальных проверок имеет значение для клиентов, и Руководство по инструментам кодирования помещает валидатор в контекст остального набора daily разработчика 's. Все на Toolz.dev запускается в вашем браузере, что является всей причиной того, что номер карты безопасно вставить в него: он никогда не покидает ваше устройство.

Часто задаваемые вопросы

Что проверяет алгоритм Луна?

Алгоритм Луна - это контрольная сумма mod-10, которая проверяет, что число не было неправильно напечатано. Он удваивает каждую вторую цифру справа, вычитает девять из любого результата выше девяти, суммирует все цифры и подтверждает, что сумма делится на десять. Он улавливает каждую однозначную ошибку и почти каждую замену двух соседних цифр, но это контрольная сумма, а не функция безопасности, и он не может доказать, что карта реальна.

Означает ли действительное число, что карта работает?

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

Как по номеру обнаруживается марка карты?

Бренд считывается с первых цифр, Идентификационный номер эмитента.Visa начинается с 4, Mastercard с 51-55 или 2221-2720, American Express с 34 или 37 и так далее.Каждая сеть также допускает только определенные общие длины, поэтому валидатор проверяет префикс и длину вместе и сообщает о сети, которой он соответствовал.

Безопасно ли вводить номер карты в этот инструмент?

Да. номер полностью обрабатывается в вашем браузере и никогда не загружается, не регистрируется и не передается. Вы можете подтвердить это, отключившись от Интернета, потому что валидатор продолжает работать без подключения. Тем не менее, вам все равно следует избегать вставки реального номера карты куда угодно и предпочитать опубликованные тестовые номера для разработки.

Почему моя настоящая карта проходит Луна, но не проходит проверку длины?

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

Что такое номера тестовых карт и почему они существуют?

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

В чем разница между CVV и номером карты?

Номер карты - это длинный Первичный Номер Счета, который идентифицирует счет CVV, CVC, или CID - это короткий код безопасности, три цифры для большинства сетей и четыре для American Express, напечатанные отдельно от номера Этот инструмент проверяет только номер карты; он не проверяет код безопасности, который проверяется эмитентом во время транзакции.

Может ли этот валидатор генерировать работающие кредитные карты?

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


Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!