9. Проверка номера кредитки (в коде есть строки из следующих тем: "строки").

(открыть в новой вкладке)

Условие:

Последняя цифра номера банковской карты (и некоторых других номеров карт и счетов) - это всегда контрольная сумма, которая считается по алгоритму Луна. Таким образом, если пользователь ошибётся в одной цифре или перепутает две цифры местами, то это легко вычислить на стороне терминала, не делая запрос в банк.
Пользователь вводит номер кредитной карты (16-значное целое число), а программа вычисляет и проверяет контрольную сумму, и говорит, валидный номер или нет.
Алгоритм подсчёта суммы:
- цифры проверяемой последовательности нумеруются справа налево (Последняя цифра тоже считается, её номер - единица).
- цифры, оказавшиеся на нечётных местах, остаются без изменений.
- цифры, стоящие на чётных местах, умножаются на 2.
- если в результате такого умножения возникает число больше 9, оно заменяется суммой цифр получившегося произведения — однозначным числом, то есть цифрой.
- все полученные в результате преобразования цифры складываются. Если сумма кратна 10, то исходные данные верны.
Примеры корректных номеров:
5019 5555 4444 5555
8171 9999 0000 0000 021
4917 4845 8989 7107
6011 5564 4857 8945 8
5425 2334 3010 9903

Код:

number_credit = input("Введите номер кредитной карты в формате xxxxxxxxxxxxxxxx ")

number_credit = number_credit[::-1]                         # перевернём строку
count = 0                                                   # счётчик для определения чётности
amount = 0                                                  # копим сумму
for i in number_credit:                                     # обойдём все цифры в числе в цикле
    count += 1                                              # прибавляем 1 для определения четности с след. условии
    if count % 2 == 0:                                      # условие для определения чётности
        i = int(i) * 2                                      # умножаем цифру, если она на чётном месте на 2
        if i > 9:                                           # проверка, если произведение числа на четном месте на 2 оказалось больше 9
            amount += i % 10 + i // 10                      # копим сумму модификацией числа в случае, если его произведение на 2 оказалось более 9
        else:
            amount += i                                     # копим сумму произведением числа на 2, кот. не подвергалось модификации
    else:
        amount += int(i)                                    # копим сумму
result = "Карта валидна" if amount % 10 == 0 else "Карта не валидна"
print(result)