Большинство из нас ежедневно пользуется кредитными и дебитными пластиковыми картами, которые содержат на лицевой стороне шестнадцатизначный шифр. Данные цифры являются уникальным номером карты. По очевидным причинам, здесь не может использоваться случайная комбинация цифр. Уникальный номер составляется по определенному алгоритму.
Рассмотрим пример с уже использованной пластиковой картой:
Несколько первых цифр определяют тип карты: Visa, MasterCard, American Express и т.д., которые вы можете идентифицировать, воспользовавшись приведенной таблицей.
Возьмите несколько пластиковых карт из кошелька и проверьте прямо сейчас. Полный список идентификационных номеров вы можете найти по ссылке.
Контрольная цифра
Номера пластиковых карт очень часто вводят в различные формы, передают с помощью мессенджеров или SMS, диктуют. В ходе данных операций можно совершить ошибку, ведь людям свойственно ошибаться при переносе цифр. Для того, чтобы минимизировать возможность ошибки, было решено использовать контрольную цифру.
В стандартном шестнадцатизначном номере кредитной карты первые 15 цифр определяются эмиссионным банком, а последнее значение, названное контрольным, вычисляется математическим путем в зависимости от всех предыдущих значений.
Математический алгоритм вычисления контрольной цифры был разработан инженером компании IBM Гансом Питером Луном (Hans Peter Luhn) в 1954 году. Алгоритм был запатентован в 1960 году в соответствии со стандартом ISO/IEC 7812. Очевидно, что с помощью всего одной контрольной цифры могут быть выявлены не все ошибки, ведь с одной десятой доли вероятности случайная цифра может оказаться контрольной цифрой. А вот искажение одной цифры можно обнаружить. Обнаруживаются практически все парные перестановки подряд идущих цифр (за исключением 09↔90). Также не могут быть обнаружены некоторые искажения двух подряд идущих цифр, а именно 22↔55, 33↔66 и 44↔77.
Алгоритм Луна
Для вычисления контрольной цифры необходимо умножить все цифры, расположенные на четных позициях (отсчет необходимо начинать справа), на 2. Если при умножении на 2 вы получите двухзначное число, то сложите обе цифры для получения одной цифры. Например, 9х2=18. В этом случае необходимо сложить 1 и 8, в результате чего вы получите 9. Затем необходимо сложить все полученные цифры и значения, расположенные на нечетных позициях. После этого приплюсуем эту сумму к значению, полученному после вычислений, произведенных с цифрами на четных позициях. В нашем случае в сумме получится 67. Контрольная цифра — это то число, которое необходимо прибавить к полученной сумме, чтобы оно стало кратно 10. Для того, чтобы наша сумма стала кратной 10, нам необходимо прибавить 3 к 67. Цифра 3 на данной карте и является контрольным числом.
Отметим, что данный алгоритм не дает возможности локализации и коррекции обнаруженной неточности, но позволяет с некоторой степенью достоверности судить об отсутствии ошибок в блоке передаваемых цифр, обозначенных на кредитной карте. Добавление контрольного числа — довольно частое явление, чтобы убедиться, что номера хорошо сформированы, и избежать ошибок. Помимо кредитных карт данный алгоритм также используется при вычислении VIN-номеров автомобилей, IMEI-кодов, ISBN книг и журналов.
Тех, кто заинтересован в получении дополнительной информации, стоит знать, что есть несколько более сложных алгоритмов, чем алгоритм Луна. Это алгоритм Верхоффа (1969 год) и алгоритм Дамма (2004 год). Они не только гарантируют все преимущества от использования алгоритма Луна, но также в состоянии обнаружить любые парные перестановки соседних цифр. Кроме этого, существуют системы, которые способны вычислять ошибки в тексте, а не только в последовательности цифр.
Алгоритм Луна (англ. Luhn algorithm) — алгоритм вычисления контрольной цифры номера пластиковых карт в соответствии со стандартом ISO/IEC 7812. Не является криптографическим средством. Предназначение алгоритма в первую очередь — выявление ошибок, вызванных непреднамеренным искажением данных, например, при ручном вводе номера карты, при приеме данных о номере социального страхования по телефону и т.п. Позволяет лишь с некоторой степенью достоверности судить об отсутствии ошибок в блоке цифр, но не дает возможности локализации и коррекции обнаруженной неточности. Алгоритм разработан сотрудником фирмы IBM Гансом Питером Луном, описан в США в 1954 году, патент получен в 1960 году.