Математики, шпионы и хакеры. Кодирование и криптография
Шрифт:
Кредитные карты
Дебетовые и кредитные карты, предлагаемые крупными банками и универмагами, фактически определяются набором групп чисел, рассчитанных и проверяемых одним и тем же алгоритмом, основанным на уже известной нам модульной арифметике.
Большинство карт имеет 16 цифр от 0 до 9. Числа сгруппированы по четыре цифры, чтобы их легче было прочитать. Для наших целей мы будем обозначать их следующим образом:
ABCD EFGH IJKL MNOP
Каждая группа цифр кодирует определенную информацию: первая группа (ABCD) идентифицирует
Каждый банк имеет свой номер, который может меняться в зависимости от континента, а также от бренда карты и условий. Пятая цифра (Е) соответствует типу карты и указывает, какое финансовое учреждение управляет счетом.
Как мы видим, это не жесткое правило.
Следующие десять цифр (FGH IJKL MNO) являются уникальным идентификатором для каждой карты. Эти числа связаны с номером счета клиента, с уровнем карты — Classic, Gold, Platinum и т. д., а также с кредитным лимитом, сроком действия и процентными ставками по типу баланса.
Наконец, контрольная цифра (Р) связана с предыдущими цифрами в соответствии с алгоритмом Луна.
В России первые шесть цифр номера карты (ABCDEF) являются банковским идентификационным номером (БИН). Первая из этих шести цифр указывает на платежную систему. Например, у карт Visa первая цифра — 4, у MasterCard — 5.
Седьмая и восьмая цифры номера карты (GH) уточняют, в рамках какой программы банка была выпущена карта. Следующие семь цифр (IJKL MNO) идентифицируют непосредственно карту. Последняя цифра (Р) — контрольная.
Алгоритм Луна назван так в честь Ганса Питера Луна, немецкого инженера, разработавшего его. Для 16-значной карты этот алгоритм работает следующим образом.
1. Каждую цифру в нечетной позиции, начиная с первого числа слева, мы умножаем на два. Если результат больше 9, мы складываем обе цифры этого двузначного числа (или, что то же самое, вычитаем из него 9). Например, если мы получили 18, сложение цифр дает 1 + 8 = 9, а вычитание — 18 — 9 = 9.
2. Затем мы складываем все полученные таким образом результаты, а также цифры, расположенные на четных позициях (в том числе последнюю контрольную цифру).
3. Если окончательная сумма кратна 10 (то есть ее значение равно нулю по модулю 10), номер карты является действительным. Заметим, что именно последняя контрольная цифра делает общую сумму кратной 10.
* * *
DINER’S CLUB
Одной из первых кредитных карт, получивших широкое признание, была карта Diner's Club. Автором идеи был американец Фрэнк Макнамара. В 1950 г. ему удалось убедить различные рестораны принимать оплату безналично с помощью персональных гарантированных кредитных карт, которые Макнамара распространил среди своих лучших клиентов. Наиболее часто в первые десятилетия кредитными картами расплачивались за обеды американские коммивояжеры, будучи в дороге.
* * *
Например, пусть карта имеет следующий номер:
1234 5678 9012 3452
По алгоритму Луна имеем:
1•2 = 2
3•2 = 6
5•2 = 10 => 1 + 0 = 1
7•2=14 => 1 + 4 = 5 (или 14-9 = 5)
9•2 = 18 => 1 + 8 = 9
1•2 = 2
3•2 = 6
5•2 = 10 => 1 + 0 = 1
Далее найдем сумму результатов и цифр на четных позициях:
2 + 6 + 1 + 5 + 9 + 2 + 6 + 1 = 32
2 + 4 + 6 + 8 + 0 + 2 + 4 + 2 = 28
32 + 28 = 60
Результат равен 60, это число кратно 10. Поэтому номер карты является действительным.
Алгоритм Луна можно применить другим способом: номер карты ABCD EFGH IJKL MNOP является правильным, если удвоенная сумма цифр на нечетных позициях и сумма цифр на четных позициях плюс количество цифр на нечетных позициях, которые больше, чем 4, кратно 10. Это правило записывается так:
2 (A + C + E + G + 1 + К + М + О) + (B + D + F + H + J + L + N + P) + (количество цифр на нечетных позициях, которые больше, чем 4) = 0 (mod 10).
Применим это правило к предыдущему примеру:
1234 5678 9012 3452
2 (1 + 3 + 5 + 7 + 9 + 1 + 3 + 5) + (2 + 4 + 6 + 8 + 0 + 2 + 4 + 2) + (4) = 100
Снова мы убедились, что номер кредитной карты является действительным, и показали, что на первый взгляд случайные номера карт соответствуют строгому математическому стандарту.
* * *
ПРИМЕР РАСЧЕТА КОНТРОЛЬНОЙ ЦИФРЫ КРЕДИТНОЙ КАРТЫ В EXCEL
Номер кредитной карты состоит из 15 цифр плюс контрольная цифра. Цифры сгруппированы в четыре группы по четыре цифры. Контрольная цифра (КЦ) рассчитывается следующим образом.
* * *
Можно ли восстановить цифру, отсутствующую в номере карты? Да, если мы имеем дело с действительной кредитной картой. Найдем, например, цифру X в номере 4539 4512 03X8 7356.
Начнем с умножения на 2 цифр на нечетных позициях (4–3—4—1–0—X—7–5), сразу преобразуя результат к одной цифре.
4•2 = 8
3•2 = 6
4•2 = 8
1•2 = 2
0•2 = 0
X•2 = 2Х
7•2 = 14, 14 — 9 = 5
5•2 = 10, 10 — 9 = 1.
Складывая цифры, стоящие на четных позициях, и новые цифры на нечетных, получим:
30 + 41+ 2Х = 71 + 2Х.
Мы знаем, что число (71 + 2Х) должно быть кратно 10.
Если значение X меньше или равно 4, то для таких X (71 + 2Х) никогда не будет кратно 10.
Если же значение X больше 4, то кратно 10 должно быть выражение (71 + 2Х + 1), так как X стоит на нечетной позиции. Видим, что выражение (72 + 2Х) кратно 10 только при X = 9.
Следовательно, мы нашли потерянную цифру 9, и полный номер кредитной карты: 4539451203987356.