Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.70 KB | None | 0 0
  1. Алгоритм Луна
  2. Алгоритм Лу́на — алгоритм вычисления контрольной цифры номера пластиковой карты. Этот алгоритм не является криптографическим средством, а предназначен в первую очередь для выявления ошибок, вызванных непреднамеренным искажением данных (НАПРИМЕР, при ручном вводе номера карты, при приёме данных о номере социального страхования по телефону). Алгоритм разработан сотрудником фирмы IBM Гансом Питером Луном в США в 1954 году. Наиболее распространённые применения для подсчёта контрольной цифры: номера всех банковских карт, также некоторых дисконтных карт, кодов социального страхования, IMEI-коды, расчет контрольного знака номера железнодорожного вагона, расчет уникальных серийных номеров для SIM-карты. Он позволяет лишь с некоторой степенью достоверности судить об отсутствии ошибок в блоке цифр, но, к сожалению, не даёт возможности нахождения и исправления обнаруженной неточности.
  3.  
  4. Поговорим о достоинствах и недостатках этого алгоритма:
  5. В силу простоты реализации алгоритм отнимает минимум вычислительных мощностей; Иногда расчёт может быть произведён в уме. В то же время алгоритм Луна позволяет только выявить ошибки в блоках данных, и то не все. Искажение одной цифры — обнаруживается. Обнаруживаются практически все парные перестановки подряд идущих цифр (за исключением 09 ↔ 90). Не могут быть обнаружены некоторые искажения двух подряд идущих цифр, а именно 22 ↔ 55, 33 ↔ 66 и 44 ↔ 77. Алгоритм не даёт информации о месте и характере возникшей ошибки.
  6. Алгоритм может применяться для последовательностей цифр любой длины, но в случае, если данные исказятся несколько раз, то алгоритм может выдать ошибочное утверждение, что контрольное число – верное.
  7.  
  8. Давайте узнаем, как работает сам алгоритм.
  9. Упрощённый алгоритм
  10. 1 шаг. Начиная с первой цифры последовательности слева и через одну цифру (то есть позиции 1, 3, 5, 7, 9, …) в случае, если количество цифр в последовательности четное (как в этом примере, где оно равно 16), если же количество цифр нечетное, тогда, начиная со второй цифры последовательности через одну цифру (то есть позиции 2, 4, 6, 8, …), делается проверка: если 2·x > 9, то из произведения вычитается 9, иначе произведение 2·x оставляем без изменения, где x - текущая цифра.
  11. 2 шаг. Затем все числа, полученные на предыдущем этапе, складываются.
  12. 3 шаг. Полученная сумма должна быть кратна 10 (то есть равна 40, 50, 60, 70, …). В примере выше исходная последовательность некорректна.
  13. В примере: последняя цифра — контрольная. Для того, чтобы номер был верен в соответствии с алгоритмом Луна, контрольная цифра должна быть равна 7.
  14. (Показывать на презентации)
  15. Оригинальный алгоритм, описанный разработчиком
  16. 1 (шаг). Цифры проверяемой последовательности нумеруются справа налево.
  17. 2. Цифры, оказавшиеся на нечётных местах, остаются без изменений.
  18. 3. Цифры, стоящие на чётных местах, умножаются на 2.
  19. 4. Если в результате такого умножения возникает число больше 9, оно заменяется суммой цифр получившегося произведения — однозначным числом, то есть цифрой.
  20. 5. Все полученные в результате преобразования цифры складываются. Если сумма кратна 10, то исходные данные верны.
  21.  
  22. Разобрав эти алгоритмы я реализовал их на таком языке программирования, как паскаль.
  23. Давайте же проверим его.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement