Какой хороший способ генерировать случайное число для действительной кредитной карты?
Я разрабатываю набор инструментов на Java для проверки подлинности и работы с кредитными картами. Пока у меня есть поддержка для:
-
- да, - подтвердил лун.
-
Проверка даты (простой срок действия).
-
Проверка длины кода карты (CVV, CVC, CID) на основе бренда (Visa, MasterCard и т. д.).
-
Проверка длины номера кредитной карты (в зависимости от марки).
-
Проверка BIN/IIN (по базе данных valid числа).
Скрытие цифр (425010 * * * * * * 1234)
Чтобы сделать набор инструментов немного более полным, я хотел бы создать генератор случайных чисел кредитных карт, основанный на различных марках карт. Эта функциональность (надеюсь) сделает мои тестовые случаи немного более надежными.
В принципе, я хотел бы иметь возможность генерировать числа, которые являются:
-
LUHN valid
-
Действительно на основе бренда префиксы
-
Допустимо на основе префиксных чисел BIN/IIN
Для действительных номеров карт BIN/IIN я думаю найти случайный номер BIN/IIN из базы данных (на основе бренда, конечно), а затем добавить оставшиеся цифры с помощью Random
. Очевидно, что это не будет действительным большую часть времени, и мне придется увеличить одну из цифр, пока она не пройдет проверку LUN.
Я не могу показаться, чтобы иметь возможность думать о лучшем пути. Возможно, кто-то мог бы предложи что-нибудь поумнее...?
С нетерпением ждем ваших предложений! Заранее спасибо! :)
2 ответа:
Эта функциональность (надеюсь) сделает мои тестовые случаи немного более надежными.
Я не убежден. По моему опыту, не стоит использовать случайные данные в модульных тестах, потому что вы никогда не знаете, охватили ли вы все важные случаи ... и жуки.
Я бы рекомендовал создавать номера ваших тестовых кредитных карт вручную и заботиться о том, чтобы они покрывали все случаи, которые необходимо проверить.
Не так давно я стал автором библиотеки под названием Мокнит. Одна из особенностей заключается в том, чтобы позволить разработчику генерировать различные действительные номера кредитных карт.
Проверьте этот метод: creditCards().
Краткий пример записи 1000 кредитных карт AMEX и Mastercard в файл для последующего использования:
MockNeat m = MockNeat.threadLocal(); final Path path = Paths.get("cc.txt"); // Write in a file 1000 credit cards AMEX and Mastercard: m.creditCards() .types(MASTERCARD, AMERICAN_EXPRESS) .list(1000) .consume(list -> { try { Files.write(path, list, CREATE, WRITE); } catch (IOException e) { e.printStackTrace(); } });