Математический трюк, скрытый в номере вашей карты: вот почему вы видите ошибку ввода мгновенно

Пост опубликован в блогах iXBT.com, его автор не имеет отношения к редакции iXBT.com
| Мнение | Наука и космос

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

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

Пластиковая карта
Автор: by Jorge Franganillo, CC BY 4.0 Источник: www.flickr.com
Анатомия числа: что скрыто за 16 цифрами?

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

  1. Первая цифра — это код платёжной системы. Например, 4 — это всегда Visa, 5 — Mastercard, 6 — Discover или Maestro, а 2 — отечественная система «Мир».
  2. Следующие 5-7 цифр идентифицируют банк-эмитент, выпустивший карту. Это позволяет системе понять, в какой именно финансовый институт следует обращаться за подтверждением транзакции.
  3. Последующие цифры (до последней) формируют уникальный номер вашего счёта внутри банка.
  4. Последняя цифра стоит особняком. Она не имеет отношения ни к банку, ни к счёту. Это проверочная цифра, или «контрольная сумма». Её значение вычисляется на основе всех предыдущих цифр по специальному правилу — тому самому алгоритму Луна. Её единственная задача — подтвердить, что весь номер введён без распространённых ошибок.
Танец цифр: как работает алгоритм Луна

Алгоритм, запатентованный инженером IBM Гансом Петером Луном в 1960 году, поражает своей простотой. Его можно выполнить даже с карандашом на бумаге. Представим гипотетический номер карты: 4275 8318 0246 137_. Нам нужно вычислить последнюю, 16-ю цифру.

  1. Отбрасываем место для последней, проверочной цифры. Получаем: 4275 8318 0246 137.
  2. Начиная справа, удваиваем каждую вторую цифру: (7), 3→6, (1), 6→12, (4), 2→4, (0), 8→16, (1), 3→6, (8), 5→10, (7), 2→4, (4).
  3. Теперь самое интересное: все результаты нужно сложить. Но если при удвоении получилось двузначное число (как 12, 16 или 10), мы складываем его цифры (1+2=3, 1+6=7, 1+0=1).
  4. Сложим все обработанные и необработанные цифры:4 + (4) + 7 + (1+0) + 8 + (6) + 1 + (1+6) + 0 + (4) + 4 + (1+2) + 1 + (6) + 7 = 4+4+7+1+8+6+1+7+0+4+4+3+1+6+7 = 63.
  5. Теперь нам нужно подобрать такую проверочную цифру, чтобы при добавлении к 63 сумма стала кратной 10. Ближайшее такое число — 70. Следовательно, проверочная цифра — это 7 (потому что 63 + 7 = 70).

Полный номер карты: 4275 8318 0246 1377. Если теперь пользователь при вводе ошибётся хотя бы в одной цифре или поменяет местами две соседние, итоговая сумма с огромной вероятностью перестанет делиться на 10, и система мгновенно выдаст ошибку.

Инженерный компромисс: почему «хорошо» победило «идеально»?

С математической точки зрения алгоритм Луна неидеален. Он отлавливает подавляющее большинство ошибок ввода: ошибку в одной цифре и перестановку двух соседних цифр. Как показала практика, на эти два типа приходится почти 90% всех человеческих опечаток. Однако у него есть слепое пятно: он не заметит, если вы поменяете местами 0 и 9 (или 9 и 0), так как их «вклад» в итоговую сумму одинаков.

Ещё в 1969 году нидерландский математик Якобус Верхуфф предложил свой алгоритм, который был математически безупречен. Он ловил все одиночные ошибки и все перестановки соседних цифр, включая злополучную пару 09/90. Казалось бы, вот он, идеальный кандидат на замену. Но мир финансов остался верен алгоритму Луна. Почему?

Ответ кроется в понятии инженерного компромисса.

  • Простота и скорость. Алгоритм Луна требует минимальных вычислительных ресурсов. Для компьютеров 1960-х годов это было критически важно. Алгоритм Верхуффа, основанный на более сложных математических структурах (группах диэдра), требовал больше вычислений.
  • «Достаточная эффективность». Зачем усложнять систему ради отлова ошибки, которая встречается крайне редко, если текущее решение уже справляется с подавляющим большинством реальных проблем? Затраты на внедрение более сложного алгоритма не окупались незначительным приростом надёжности.
  • Наследие. К моменту появления решения Верхуффа алгоритм Луна уже был широко распространён. Перевод всей мировой финансовой инфраструктуры на новый стандарт был бы колоссально дорогим и сложным проектом.

История Луна и Верхуффа — это классический пример того, как в реальном мире побеждает не самое совершенное, а самое прагматичное решение.

Ввод номера карты
Автор: Freepik Источник: www.freepik.com
Невидимый страж: экономика и психология ошибки

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

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

  • Затраты времени. Транзакция занимала бы несколько лишних секунд, чтобы в итоге вернуться с отказом.
  • Финансовые издержки. Каждая такая проверка стоит продавцу денег (комиссии за процессинг).
  • Нагрузка на систему. Миллионы ошибочных запросов ежедневно создавали бы бессмысленный трафик и нагружали серверы банков.

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

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

Изображение в превью:
Автор: by Jorge Franganillo, CC BY 4.0
Источник: www.flickr.com

8 комментариев

Добавить комментарий

m
задумывались ли вы, как система поняла это за долю секунды, даже не обратившись к вашему банку?

Куда скатился Хобот… А ведь пару лет назад была серия статьей про карточные системы…
Korzh
Ну она ж не в блогах была, положим ;)
А так… до продолжения немножко руки не доходят. Может к зиме…
P
Интересно выплывет или упадет на дно?
Kisskin
С точки зрения теории вероятностей т.к. контрольная сумма хранится в 1 цифре, то вероятность ошибки будет 10%, каким бы хитрым алгоритм не был.
Korzh
А оно уже давно всем абсолютно пофиг — просто память о лохматых годах с ручным вводом всяких номеров… кстати — стандарт вообще говоря банковскими картами не ограничивается. Это довольно мелкий частный случай
m
не всегда так… Если есть комбинации цифр, на которые приходится бОльшее количество ошибок, то алгоритм может это учитывать. И тогда вероятность не найти ошибки может быть меньше.
P
Да бед в статье написан
Z
Математика — крутая штука. Я вот не знал про такую проверку и хз догадался ли бы.

Добавить комментарий

Сейчас на главной

Новости

Публикации

Обзор профессионального блендера RAWMID RPB-05: 4 литра смузи за 15 секунд не хотите?

RAWMID RPB-05 — блендер создан для настоящих нагрузок. В нём сразу чувствуется промышленный масштаб: огромный резервуар на 4 литра позволяет готовить коктейли на целую компанию или...

Синдром отложенной жизни: почему стратегия начинать жизнь с понедельника никогда не работает

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

Многопортовое зарядное устройство Ugreen Gan Desktop Fast Charger 100W (X765)

Очень удобно когда от одной розетки можно зарядить сразу 6 разных устройств. Причём даже мощных. Но для этого нужно многопортовое зарядное устройство. И одним из интересных вариантов является...

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

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

Зачем русские кавалеристы носили на плечах кавказскую бурку, как у горцев

Кавказская бурка — один из знаковых элементов экипировки русских казаков и кавалеристов, который на протяжении веков сочетал в себе практичность, защиту и большое символическое значение....

Как куркума разобщила кулинаров и филологов: секрет слова, ударение в котором вы точно ставите не туда

Если вы хоть раз покупали приправу в супермаркете или смотрели кулинарные шоу, вы наверняка заметили, что повара, продавцы, да и большинство из нас произносят «куркума» с ударением на последний слог.