Эта статья была первоначально опубликована в 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 :
- 5 лучших книг Python
- Как отправлять объемные электронные письма бесплатно, используя Mailgun и Python django
- Соскабливание данных об всеобщих выборах 2019 года с использованием запроса Python и BeautifulSoup И анализируя это
Оригинал: “https://dev.to/anuragrana/python-script-validating-credit-card-number-luhn-s-algorithm-2f7c”