Акция 2024: Оплачиваем написание статей на кардинг тематику. Подробности
Перейти к содержанию
Искать в
  • Ещё...
Поиск результатов, которые содержат...
Поиск результатов в...

morpho

Пользователи
  • Публикаций

    2
  • Зарегистрирован

  • Посещение

    Никогда

Репутация

0 Neutral

Информация о morpho

  • Звание
    Пользователь

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Записался на обучение. Получил первый материал. Обещаю вам всё сообщить по результатам обучения!
  2. Продавцы воздуха поговаривают, что этим алгоритмом можно проверить картон. Докажу обратное: Например нам нужно сгенерировать "валидный" номер карты QIWI BANK, для этого мы берём BIN банка QIWI - 469395 В стандартной карте 16 цифр, из которых первые 6 - это BIN (Bank Identification Number), остальные 9 цифр указываю на аккаунт и/или другую информацию для банка, а последняя 10ая цифра, это и есть CHECK, который считается по специальному алгоритму Луна (Luhn) Берём 6 цифр нужного нам банка, 469395 добавляем к ним 9 цифр похожие на что-то настоящее, 713877391 и получаем код из 15 цифр - 469395 713877391 (отделил пробелом для наглядности) 4693 9571 3877 391* - вот наша карта, не хватает последней "чековой" цифры, её мы посчитаем согласно алгоритму Luhn Начнём считать нашу "звездочку" (checksum), "% 10" в примере означает деление с остатком на 10 checksum = 10 - ((luhn(num1) + num2 + luhn(num3) + num4 + luhn(num5) + num6 + luhn(num7) + num8 + luhn(num9) + num10 + luhn(num11) + num12 + luhn(num13) + num14 + luhn(num15)) % 10) Теперь поясню, что делает операция luhn(const), константа умножается на 2 и если она становится больше/равна 10ти, то отнимается 9, а иначе ничего не делаем, так и оставляем Эту операцию мы проделываем с 1, 3, 5, 7, 9, 11, 13, 15 (нечётными) цифрами в нашем сгенерированном номере checksum = 10 - ((luhn(4)+6+luhn(9)+3+luhn(9)+5+luhn(7)+1+luhn(3)+ 8+luhn(7)+7+luhn(3)+9+luhn(1)) % 10) 4*2 = 8, где 8<10, значит оставляем 8, 9*2 = 18, где 18>10, значит отнимаем 9 и получаем 9 9*2, аналогично, 9 7*2 = 14, снова больше 10, значит 14-9=5 3*2 = 6, оставляем 6 7*2, аналогично 5 3*2, аналогично, что и было ранее, это 6 1*2 = 2, так и оставляем 2 Теперь видим вот какой результат после преобразования: checksum = 10 - ((8+6+9+3+9+5+5+1+6+8+5+7+6+9+2 % 10) Получим в сумме 89, которую поделим на 10 с остатком, результат 9, а потом эту 9ку отнимем от 10ки и получим 1 Или просто наглядно посмотрим, сколько нужно добавить к 89, чтобы было кратное 10ти число? 89+1=90, всё, теперь кратное checksum = 1 4693 9571 3877 3911 - вот и стала ясна последняя цифра для того, чтобы наш сгенерированный номер был "валидным" Код программы на языке python (для проверки номера по алгоритму Luhn): #coding: utf8 cvv = raw_input(' 33[1;32mВведите номер карты (16 цифр):33[1;m ') if len(cvv) == 16 and cvv.isdigit(): def da©: c = int© c *= 2 if c >= 10: c -= 9 return c if (da(cvv[0]) + int(cvv[1]) + da(cvv[2]) + int(cvv[3]) + da(cvv[4]) + int(cvv[5]) + da(cvv[6]) + int(cvv[7]) + da(cvv[8]) + int(cvv[9]) + da(cvv[10]) + int(cvv[11]) + da(cvv[12]) + int(cvv[13]) + da(cvv[14]) + int(cvv[15])) % 10 == 0: print " 33[1;37mVALID33[1;m" bankidnum = cvv[0] + cvv[1] + cvv[2] + cvv[3] + cvv[4] + cvv[5] print " 33[1;37mbin =33[1;m",bankidnum account = cvv[6] + cvv[7] + cvv[8] + cvv[9] + cvv[10] + cvv[11] + cvv[12] + cvv[13] + cvv[14] print "33[1;37maccount =33[1;m",account checksum = 10 - ((da(cvv[0]) + int(cvv[1]) + da(cvv[2]) + int(cvv[3]) + da(cvv[4]) + int(cvv[5]) + da(cvv[6]) + int(cvv[7]) + da(cvv[8]) + int(cvv[9]) + da(cvv[10]) + int(cvv[11]) + da(cvv[12]) + int(cvv[13]) + da(cvv[14])) % 10) if checksum != 10: print "33[1;37mchecksum =33[1;m",checksum," " else: checksum = 0 print "33[1;37mchecksum =33[1;m",checksum," " else: print " 33[1;30mNOT VALID33[1;m " elif len(cvv) == 0: print " 33[1;30mВы ничего не ввели33[1;m " elif not cvv.isdigit(): print " 33[1;30mПопробуйте ввести только цифры33[1;m " elif cvv.isdigit() and len(cvv) < 16: print " 33[1;30mНедостаточно цифр33[1;m " elif cvv.isdigit() and len(cvv) > 16: print " 33[1;30mСлишком много цифр33[1;m "
×