Как сгенерировать буквенно-цифровые токены в SQL Server? - PullRequest
2 голосов
/ 16 апреля 2010

Я хочу сгенерировать буквенно-цифровые токены.Существует ли функция, которая может генерировать токены заданной длины?

Ответы [ 3 ]

6 голосов
/ 16 апреля 2010

Вы можете сделать это, а затем взять подстроку любой длины, которая вам нужна:

select replace(newid(), '-', '')

Например, для восьми символов:

select substring(replace(newid(), '-', ''), 1, 8)
1 голос
/ 16 апреля 2010

Я сделал это, объединив уникальный идентификатор из таблицы со случайным числом:

update [table]
  set token = cast([id] as varchar(10)) + cast(cast(round((rand() * 500000000.0), 0) as int) as varchar(10))

Отрегулируйте размеры varchar и коэффициент умножения, чтобы получить нужный вам размер токена. Если вам нужен точный размер, сделайте полученную строку слишком длинной и используйте подстроку для установки длины.

Это не является криптографически сильным, но в большинстве случаев работает для меня. Использование поля id из таблицы гарантирует, что токен является уникальным, а случайное число затрудняет его угадывание.

0 голосов
/ 08 апреля 2013

Другое возможное решение (для SQL Server, я думаю, NEWID () недоступен в других СУБД, но использует другую аналогичную функцию):

SELECT CONVERT(VARCHAR(10), RIGHT(NEWID(), 5))

Функция NEWID () возвращает альфа-цифровой идентификатор, сгенерированныйSQL Server, который вы можете использовать по своему усмотрению.

Хорошо работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...