Luhn

Luhn

Середня

Вступ

У Глобальному управлінні з верифікації нам щойно доручили надзвичайно важливе завдання. У всьому місті, від онлайн-покупок до захищених входів, безліч операцій покладається на точність таких числових ідентифікаторів, як номери кредитних карток, номери банківських рахунків, коди транзакцій та ідентифікатори відстеження. В основі алгоритму Луна лежить проста формула контрольної суми, яка допомагає переконатися, що ці числа дійсні та безпомилкові.

Щойно на наш стіл надійшла партія ідентифікаторів. Усі вони повинні пройти перевірку Луна, щоб переконатися, що вони справжні. Якщо якийсь із них не пройде перевірку, його позначять як недійсний, що дасть змогу запобігти помилкам або шахрайству, як-от хибні транзакції чи несанкціонований доступ.

Чи вдасться нам зробити це правильно? Від нас залежить цілісність багатьох сервісів.

Вказівки

Визначмо, чи є номер кредитної картки коректним за формулою Луна.

Число надійде як рядок тексту (англ. string).

Перевірка числа

Рядки тексту завдовжки 1 символ або менше некоректні. Пробіли у вхідних даних допускаються, але перед перевіркою їх потрібно прибрати. Усі інші символи, які не є цифрами, заборонені.

Приклад 1: коректний номер кредитної картки

4539 3195 0343 6467

Перший крок алгоритму Луна - подвоїти кожну другу цифру, починаючи справа. Будемо подвоювати

4539 3195 0343 6467
↑ ↑  ↑ ↑  ↑ ↑  ↑ ↑  (double these)

Якщо в результаті подвоєння цифри утворюється число, більше за 9, тоді віднімаємо 9 від добутку. Ось результати нашого подвоєння:

8569 6195 0383 3437

Далі додамо всі цифри:

8+5+6+9+6+1+9+5+0+3+8+3+3+4+3+7 = 80

Якщо сума ділиться на 10 без остачі, то число коректне. Це число коректне!

Приклад 2: некоректний номер кредитної картки

8273 1232 7352 0569

Подвоїмо кожну другу цифру, починаючи справа

7253 2262 5312 0539

Знайдемо суму цифр

7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57

57 не ділиться на 10 без остачі, тому це число некоректне.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Scala Exercism

Час розпочати Luhn?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Scala, а також 95 вправ та справжнє наставництво від людей, і все це безкоштовно.

Глибоке занурення у Luhn!

Ми розглядаємо 8 різних версій Luhn: починаємо з дуже охайної реалізації на Ruby, досліджуємо імперативні та функціональні підходи, а наприкінці доходимо до версії на SQLite, над розшифруванням якої Еріку та Джеремі довелося попрацювати!