MySQL случайное значение - PullRequest
       26

MySQL случайное значение

1 голос
/ 12 февраля 2009

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

Итак, я использовал это:

выберите подстроку (md5 (concat_ws ('-', md5 (username_usr), MD5 (zip_usr), MD5 (id_usr), MD5 (create_usr))), - 12) от users_usr

Это безопасно? Я использовал concat_ws, потому что иногда zip равен нулю, а остальные - нет.

И да, я знаю, что это довольно коротко, но 1. Они должны ввести последние 4 из своих социальных сетей, 2. Это 1 раз использования, 3. В приложении нет личных данных и 4. Я могу используйте капчу, но поскольку нет личных данных, это, вероятно, излишне.

БЛАГОДАРЯ

Ответы [ 5 ]

5 голосов
/ 12 февраля 2009

Может быть, достаточно использовать универсальный уникальный идентификатор ? Просто для простоты?

4 голосов
/ 12 февраля 2009

Если вам нужно случайное буквенно-цифровое значение, почему вы используете так много переменных? Что-то вроде следующего должно быть вполне достаточно:

md5(rand())
--Flavor: MySql
1 голос
/ 12 февраля 2009

Было бы полезно узнать назначение «случайной» строки. Это не случайно - это повторяется - и довольно легко повторяется. Вы не предоставляете конфиденциальную информацию способом, который легко обратим, но я предполагаю, что вы действительно ищете способ генерировать UUID (универсальный уникальный идентификатор). Не случайно в последних версиях MySQL есть функция UUID.

http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid

Это могло бы лучше решить проблему, которую вы пытаетесь решить. Если по какой-то причине вы действительно хотите случайное число (которое, кстати, может иметь коллизии), не беспокойтесь о посеве. Если вы не укажете начальное число, оно само-начнется таким образом, что это, вероятно, лучше, чем фиксированное в любом случае. Затем вы сопоставляете это случайное число (или серию случайных чисел) с символом (возможно, приводя целое число к символу) и повторяете это, пока не получите достаточно длинную строку символов. Но стоит повторить, что случайное число не является гарантированным уникальным числом ...

0 голосов
/ 19 октября 2013
>>SELECT md5(RAND()+CURRENT_TIMESTAMP())
0 голосов
/ 12 февраля 2009

Кто-то из удаленного дубликата этого вопроса предложил использовать UUID(), что я считаю хорошей идеей. Я не думаю, что с использованием MD5(RAND()) тоже что-то не так.

Конечно, вам придется хранить те, которые вам не нужны в вашем примере.

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