Мне интересно, какой самый безопасный способ создания кодов подарочных карт. Длина должна составлять 16 символов (хотя это обсуждается) и может быть буквенно-цифровой (хотя числовое будет более удобным для пользователя).
Насколько я вижу, самый безопасный способ сделать это — сгенерировать код подарочной карты определенной длины с помощью следующего кода Java:
Код: Выделить всё
static final String AB = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static SecureRandom rnd = new SecureRandom();
String randomString( int len ){
StringBuilder sb = new StringBuilder( len );
for( int i = 0; i < len; i++ )
sb.append( AB.charAt( rnd.nextInt(AB.length()) ) );
return sb.toString();
}
Итак, это первый вопрос. : числовое или буквенно-цифровое?
Когда пользователи используют подарочные карты в интернет-магазине для оплаты товаров, выполняется вызов нашего API, который возвращает баланс. и валюта для этой подарочной карты. Поскольку коды подарочных карт вводятся на сторонних серверах, эти подарочные карты теперь доступны людям, имеющим доступ к этим серверам. Это, очевидно, проблема в том случае, когда баланс все еще остается после того, как пользователь частично погасил его.
Один из вариантов — при вызове нашего API (с кодом подарочной карты), чтобы получить баланс, мы возвращаем и сохраняем в их магазине случайную строку, которая может использоваться интернет-магазином только при выставлении нам счета - мы сопоставим ее с кодом подарочной карты на нашем система. Проблема, по-видимому, заключается в том, что код подарочной карты, который пользователь вводит при оформлении заказа, регистрируется где-то в его журналах и доступен любому, у кого есть доступ к этим журналам.
Другой вариант — мы обновляем код подарочной карты после его частичного погашения. Таким образом, пользователю по сути выдается новый код подарочной карты для баланса, а предыдущий аннулируется. Это, вероятно, самый безопасный, но не такой удобный для пользователя вариант.
Итак, это второй вопрос: как защитить коды подарочных карт, которые погашаются лишь частично и они еще имеют ценность?
Подробнее здесь: https://stackoverflow.com/questions/496 ... card-codes