Рубрики
Без рубрики

Скрипт Python: проверка номера кредитной карты – алгоритм Луна

Эта статья была первоначально опубликована на PythonCircle.com. Алгоритм Луна, также известный как «Мо … помеченная питоном.

Эта статья была первоначально опубликована в Pythoncircle.com Анкет

Алгоритм Luhn, также известный как алгоритм «модуля 10», представляет собой формулу контрольной суммы, используемая для проверки различных идентификационных номеров, таких как номера кредитных карт, номера IMEI, номера идентификаторов национальных поставщиков в Соединенных Штатах, канадские номера социального страхования, и идентификационные номера Израиля.

Алгоритм: Формула проверяет число в отношении включенной контрольной цифры, которая обычно добавляется к частичному номеру учетной записи для генерации полного номера учетной записи.

Генерирующая контрольная цифра:

  • Предположим, у вас есть число как: 3 – 7 – 5 – 6 – 2 – 1 – 9 – 8 – 6 – 7 – x, где x – контрольная цифра.
  • Теперь начиная с самой правой цифры, т. Е. Проверьте цифру, удваивайте каждую вторую цифру. Новый номер будет: 3 – 14 – 5 – 12 – 2 – 2 – 9 – 16 – 6 – 14 – x
  • Теперь, если двойная цифра больше, чем 9, добавьте цифры. Таким образом, число станет: 3 – 5 – 5 – 3 – 2 – 2 – 9 – 7 – 6 – 5 – x
  • Теперь добавьте все цифры. 47 + x
  • Умножьте неверную часть на 9. Так что это будет 47 *
  • Единой цифрой в результате умножения является контрольная цифра.
  • Допустимое число будет 37562198673.

Проверка сгенерированного числа: Вы можете использовать инструменты, доступные в Интернете, чтобы подтвердить, что сгенерированное число действительнее в соответствии с алгоритмом Луна или нет. Вы можете проверить номер, посетив это сайт.

Скрипт Python для проверки номера кредитной карты:

"""
Python script to check the validity of credit card numbers
Author : PythonCircle.Com
Read more : https://www.pythoncircle.com/post/485/python-script-8-validating-credit-card-number-luhns-algorithm/
"""

import sys


def usage():
    msg = """

        usage:
        python3 credit_card_validator credit_card_number

        example:
        python3 credit_card_validator 34678253793

    """
    print(msg)


def get_cc_number():
    if len(sys.argv) < 2:
        usage()
        sys.exit(1)

    return sys.argv[1]


def sum_digits(digit):
    if digit < 10:
        return digit
    else:
        sum = (digit % 10) + (digit // 10)
        return sum


def validate(cc_num):
    # reverse the credit card number
    cc_num = cc_num[::-1]
    # convert to integer list
    cc_num = [int(x) for x in cc_num]
    # double every second digit
    doubled_second_digit_list = list()
    digits = list(enumerate(cc_num, start=1))
    for index, digit in digits:
        if index % 2 == 0:
            doubled_second_digit_list.append(digit * 2)
        else:
            doubled_second_digit_list.append(digit)

    # add the digits if any number is more than 9
    doubled_second_digit_list = [sum_digits(x) for x in doubled_second_digit_list]
    # sum all digits
    sum_of_digits = sum(doubled_second_digit_list)
    # return True or False
    return sum_of_digits % 10 == 0


if __name__ == "__main__":
    print(validate(get_cc_number()))

Код доступен на GitHub .

Больше от Pythoncircle.com :

Оригинал: “https://dev.to/anuragrana/python-script-validating-credit-card-number-luhn-s-algorithm-2f7c”