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

Mutt

Professional
Messages
1,057
Reputation
7
Reaction score
588
Points
113
Алгоритм Луна, также известный как алгоритм "модуль 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 - Х
  • Теперь сложите все цифры. 47 + X
  • Умножьте непроверенную часть на 9. Таким образом, это будет 47 * 9 = 423
  • Единичная цифра в результате умножения является контрольной цифрой. X = 3
  • Допустимый номер - 37562198673.

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

Скрипт Python для проверки номера кредитной карты:
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.
 

CardROOT

Carder
Messages
48
Reputation
0
Reaction score
17
Points
8
Насколько я понял, чекерами пользоваться нежелательно. Или скрипт это другое дело?
 
Top