Номер кредитоной карты(PAN -Primory Account Number) может содержать от 12 до 19 цифр
Первая цифра это MII -Major Industry Identifier
Если эта цифра 9, следующие три цифры - это код страны из
Идентификационный номер эмитента, также известный как идентификационный номер банка (BIN), представляет собой первые шесть цифр номера кредитной карты. Они идентифицируют учреждение, которое выпустило кредитную карту держателю карты, например для MASTERCARD это 511111- 551111, с 2017 добавлен диапазон 222100–272099.
С 7-ой до n-1 это индивидуальный идентификатор аккаунта, максимальная длинна ограничена 12 цифрами.
Последняя цифра - контрольная сумма, используется для проверки основного номера счета для защиты от случайных ошибок.
Алгоритм Луна(англ.
Для примера используем 5501-5746-0551-8031
Последняя цифра (1) - наша контрольная цифра( далее в расчетах она не учитывается т.е list[:-1])
Теперь список принял вид 5501-5746-0551-803
Удваиваем каждую вторую цифру, начиная с первой
5501 - 5746 - 0551 - 803
(10)5(0)1 - (10)7(8)6 - (0)5(10)1-(16)0(6)
Суммируем произведение
(1)5(0)1 - (1)7(8)6 - (0)5(1)1 - (7)0(6)
Получаем сумму элементов(49) и умножаем полученный результат на 9. Произведение равно 441, а последняя цифра равна нашей контрольной (1), следовательно номер валидный.
Чекнуть номер можно на
Первая цифра это MII -Major Industry Identifier
Python:
MMI = {
'ISO_TC68': 0,
'AIRLINES': 1,
'AIRLINES_AND_OTHER_INDUSTRY_ASSIGNMENT': 2,
'TRAVEL_AND_ENTERTAINMENT': 3,
'BANKING_AND_FINANCIAL': 4,
'BANKING_AND_FINANCIAL': 5,
'MERCHANDISING_AND_BANKING': 6,
'PETROLEUM': 7,
'TELECOMMUNICATIONS_AND_OTHER_INDUSTRY_ASSIGNMENT': 8,
'NATIONAL_ASSIGNMENT': 9,
}
Если эта цифра 9, следующие три цифры - это код страны из
Ссылка скрыта от гостей
.Например для Австралии это 036.Идентификационный номер эмитента, также известный как идентификационный номер банка (BIN), представляет собой первые шесть цифр номера кредитной карты. Они идентифицируют учреждение, которое выпустило кредитную карту держателю карты, например для MASTERCARD это 511111- 551111, с 2017 добавлен диапазон 222100–272099.
С 7-ой до n-1 это индивидуальный идентификатор аккаунта, максимальная длинна ограничена 12 цифрами.
Последняя цифра - контрольная сумма, используется для проверки основного номера счета для защиты от случайных ошибок.
Алгоритм Луна(англ.
Ссылка скрыта от гостей
) представляет собой следующую последовательность действий:Для примера используем 5501-5746-0551-8031
Последняя цифра (1) - наша контрольная цифра( далее в расчетах она не учитывается т.е list[:-1])
Теперь список принял вид 5501-5746-0551-803
Удваиваем каждую вторую цифру, начиная с первой
Python:
{i: v * 2 for i, v in enumerate(list_int[:-1]) if i == 0 or i % 2 == 0}
5501 - 5746 - 0551 - 803
(10)5(0)1 - (10)7(8)6 - (0)5(10)1-(16)0(6)
Суммируем произведение
(1)5(0)1 - (1)7(8)6 - (0)5(1)1 - (7)0(6)
Получаем сумму элементов(49) и умножаем полученный результат на 9. Произведение равно 441, а последняя цифра равна нашей контрольной (1), следовательно номер валидный.
Python:
from random import randint
ISSUER_ID = {
'MASTERCARD': randint(511111, 551111),
'VISA': randint(411111, 499999)
}
def userId() -> int:
return randint(1111111111, 9999999999)
def issuerId(key: str = 'MASTERCARD') -> int:
return ISSUER_ID.get(key)
def checkLuhn(list_int: list) -> bool:
c_sum = list_int[-1]
tmp_v = {i: v * 2 for i, v in enumerate(list_int[:-1]) if i == 0 or i % 2 == 0}
for k, v in tmp_v.items():
if v >= 10:
y = str(v)[0]
z = str(v)[1]
w = int(y) + int(z)
tmp_v.update({k: w})
for k_, v_ in tmp_v.items():
list_int[k_] = v_
res = sum(list_int[:-1]) * 9
if str(res)[-1] == str(c_sum):
return True
def gen() -> None:
while 1:
iid = str(issuerId())
uid = str(userId())
num = iid + uid
l_tmp = [int(i) for i in num]
if checkLuhn(l_tmp):
print(num)
if __name__ == '__main__':
gen()
Чекнуть номер можно на
Ссылка скрыта от гостей
там же можно и сгенерировать=)