Алгоритм «Луна» (англ. Luhn
Algorithm) — алгоритм обчислення контрольної цифри номера пластикових карт
відповідно до стандарту ISO / IEC 7812. Алгоритм був розроблений німецьким
комп’ютерним фахівцем Гансом Луном в 1954-му році.
Алгоритм «Луна»
використовує просте правило обчислення контрольної суми для перевірки
ідентифікаційних номерів, таких як номера пластикових карт. Алгоритм був
придуманий для визначення помилок при введенні номера. Алгоритм визначає
помилки введення однієї неправильної цифри, а також майже всі перестановки
сусідніх цифр, за винятком перестановки 09-90 або зворотної 90-09.
Найбільш поширені застосування
для підрахунку контрольної цифри:
— Номери всіх банківських карт.
— Номери деяких дисконтних карт.
— Коди соціального страхування.
— IMEI-коди.
— MEID (модифікований алгоритм).
Алгоритм перевірки контрольної
цифри (оригінальний алгоритм, описаний розробником):
Цифри картки нумеруються з кінця
Цифри, що опинилися на непарних
місцях, залишаються без змін.
Цифри, що стоять на парних
місцях, множаться на 2.
Якщо в результаті такого
множення виникає число більше 9, воно замінюється сумою цифр отриманого
добутку.
Всі отримані в результаті
перетворення цифри сумуються.
Якщо сума кратна 10, то карта
валідна. Інакше – карта невалідна
Приклад:
Номер картки:
6
|
7
|
6
|
2
|
4
|
6
|
6
|
0
|
0
|
2
|
5
|
4
|
9
|
8
|
6
|
7
|
6
|
2
|
4
|
6
|
6
|
0
|
0
|
2
|
5
|
4
|
9
|
8
|
3
|
8
|
|
16
|
15
|
14
|
13
|
12
|
11
|
10
|
9
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
|
12
|
7
|
12
|
2
|
12
|
6
|
60
|
0
|
0
|
2
|
10
|
4
|
18
|
8
|
6
|
8
|
|
3
|
7
|
12
|
2
|
12
|
6
|
6
|
0
|
0
|
2
|
1
|
4
|
9
|
8
|
6
|
8
|
|
3
|
7
|
3
|
2
|
3
|
6
|
6
|
0
|
0
|
2
|
1
|
4
|
9
|
8
|
6
|
8
|
70
|
Сума останньої колонки = 70. Отже, карта валідна






