Я могу предложить альтернативный подход? Смотрите на Идеальные Бумажные Пароли , и эти производные , это запросило.
Вы могли использовать это как есть, "" чтобы генерировать одноразовые PIN, или просто генерировать единственный PIN на пользователя.
Принимают во внимание также, что дублирующиеся PIN не имеют себя проблема: любое нападение должно было бы тогда просто попробовать несколько идентификаторов пользователей.
(Пробег, предупреждающий: Я - определенно не специалист по безопасности.)
Вот второй ответ: от перечитывания я предполагаю, что Вы не хотите идентификатор пользователя как таковой - Вы просто проверяете ряд выпущенных карт царапины. Я также предполагаю, что Вы не хотите использовать алфавитные PIN.
необходимо выбрать длину PIN, таким образом, что вероятность предположения допустимого PIN является меньше чем 1 / (Количество попыток, которые можно защитить от). Так, например, если у Вас будет 1 миллион допустимых PIN, и Вы хотите защитить от 10 000 предположений, Вам будет нужен 10-разрядный PIN.
при использовании John Graham-Cumming's версия Идеальных Бумажных Паролей система Вы можете:
, я подозреваю, что это - универсальная процедура, которая могла, например, использоваться для генерации 25-алфавитно-цифровых идентификаторов продукта, также.
Извините за выполнение его последовательным приближением; я надеюсь, что это прибывает немного ближе в то, что Вы ищете.
Я в тупике, пытаясь определить День Благодарения (четверг последней ПОЛНОЙ недели ноября).
Последняя суббота ноября - 2
WITH cal AS
(
SELECT CAST('2009-30-11' AS DATETIME) AS cdate
UNION ALL
SELECT DATEADD(day, -1, cdate)
FROM cal
WHERE cdate >= '2009-01-11'
)
SELECT TOP 1 DATEADD(day, -2, cdate)
FROM cal
WHERE DATEPART(weekday, cdate) = 6
Для сложных алгоритмов иногда лучше найти дату сопоставления из набора, чем пытаться построить огромную формулу с одним значением.
См. Эту статью в моем блоге для более подробной информации: