Будь-яка банківська карта має власний ідентифікатор - унікальний 16-значний номер. Можна подумати, що раз людей (а значить і карт) так багато, то можна обдурити систему, запровадивши придуману комбінацію цифр при, скажімо, реєстрації в якомусь сервісі, що не передбачає оплату з вказаною карти прямо зараз. Однак такий трюк не спрацює. Справа в тому, що номери банківських карт будуються виходячи з певних правил, і це дозволяє обчислити вірогідність існування введеної карти навіть без звернення безпосередньо до банку.
Наприклад, при вказівці карти Visa і введенні будь першої цифри, відмінною від четвірки, нічого не спрацює. Номери всіх карт Visa починаються з цифри «4».
Абсолютна більшість карт в Росії випускаються від платіжних систем Visa і MasterCard. Для них справедливі наступні комбінації цифр на початку номера:
Реальність така, що, незважаючи на поширення всіляких додатків, що спрощують зберігання і введення даних з карт, люди дуже неохоче зберігають інформацію в такому вигляді (і в цьому є свій сенс). У підсумку, доводиться постійно вводити номер руками, що неминуче призводить до людських помилок.
Для миттєвого виявлення помилок при введенні, були розроблені перевірочні алгоритми. Остання цифра в номері будь-якої банківської карти - це результат послідовності попередніх 15 цифр, і його завжди можна «вгадати», якщо знати перші 15 цифр і алгоритм Місяць.
У 1954 році Ганс Пітер Лун створив алгоритм, який в подальшому увійшов в міжнародний стандарт ISO / IEC 7812-1, на основі якого і будуються номера карт.
Причинами вибору такого алгоритму стали його простота і ефективність. Звичайна людина після пари-трійки пробних прорахунків зможе обчислювати контрольну цифру в умі. При цьому, метод гарантовано виявляє помилку при неправильному введенні однієї цифри номера. Крім цього, алгоритм виявляє майже всі випадкові парні заміни цифр (типова помилка людини при введенні). Однак тут є і мінуси. Контрольна сума - всього 1 цифра. Значить, існує 10% шанс, що випадково згенерований номер виявиться вірним для алгоритму.
Алгоритм Місяць працює дуже просто і має варіації тільки в залежності від кількості цифр в послідовності (парне чи непарне число елементів). Також творець пропонував нумерувати цифри справа наліво, але можна і так.
Спочатку у нас є послідовність з 16 цифр.
Нумеруємо все цифри зліва направо. Першу і наступні через одну цифри множимо на два, і, якщо твір виявляється більше дев'яти, то віднімаємо з нього 9. Як варіант - складаємо цифри отриманого двозначного числа. Буде те ж саме.
Отримана послідовність складається. Результат відтворення повинен бути кратний 10, інакше контрольна цифра невірна. Щоб зробити її вірною для вихідної послідовності, потрібно збільшити її настільки, щоб сума після перетворення була кратна 10.
Існують і більш наворочені алгоритми перевірки, але порахувати їх в розумі вже не так просто.
Інші приклади використання Контрольні суми використовуються повсюдно. Це дозволяє миттєво обчислювати помилки при введенні важливих послідовностей цифр. Штрих-коди, ідентифікаційні номери різних персональних документів в різних країнах - скрізь використовуються контрольні суми. Варто зауважити, що контрольні суми застосовуються взагалі у всій електроніці, де важлива цілісність і збереження достовірності даних.
Парність На зорі розвитку ери комп'ютерів, пам'ять в обчислювальних машинах була не настільки надійною і періодично спотворювала дані. Інженери хотіли знайти спосіб виявлення помилок в даних.
Рішення полягало в контролі за паритетом. 8 біт в байті складалися, і їх сума була або парної, або непарної. Для кожного біта створювався додатковий контрольний біт - біт парності. Якщо сума бітів в байті була парною, то в контрольний біт записувалася одиниця, інакше - нуль.
Метод дуже простий, але також і дуже неефективний. Не можна сказати, який з бітів в байті був записаний некоректно. Бути може, сам контрольний біт записався невірно? Подвійна помилка також могла просто проскочити.
Зараз пам'ять куди надійніше, і звичайні комп'ютери більш не використовують перевірку на парність. Однак до сих пір існують особливо вимогливі до надійності системи (банківська сфера, енергетика і так далі). Там застосовується особливий тип пам'яті під назвою ECC (Error Correcting Code Memory). Алгоритми, подібні до тих, що застосовуються в ECC, дозволяють з абсолютною точністю виявляти кожен некоректний біт і виправляти його значення на вірне.