2013-02-08 3 views
3

Я хочу сгенерировать уникальные числа, чтобы я мог использовать их в качестве ссылочных номеров для обработки моих клиентских запросов.Создание случайных, но уникальных чисел для ссылки ID

Я не хочу, чтобы числа повторялись, и я не использую какую-либо базу данных для хранения чисел.

Я просто хочу использовать простой алгоритм для генерации случайных чисел.

Я использую что-то вроде

rand(10*45, 100*98)

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

+0

Я не использую какую-либо базу данных, я просто хотел, чтобы это было просто, как ссылочный номер будет отправлен клиенту и владельцу, и они смогут общаться с помощью этого ссылочного номера. Идея @njk достаточно хороша и достаточно логична – prakashchhetri

+0

Должен ли он быть десятичным (т.е. базой 10)? –

+0

нет это может быть любое число – prakashchhetri

ответ

6

Почему бы не просто предисловие вашего случайного числа с отметкой времени Unix? Это обеспечит уникальность.

$random = time() . rand(10*45, 100*98); 

В противном случае вы можете сохранить свои номера в файле. Если можно, сохраните их в базе данных.

+0

да .. хорошая идея, никогда не думал об этом. спасибо :) – prakashchhetri

+1

Пока вы не создаете 2 за одну секунду, так или иначе –

+0

@SamDufel Также можно использовать 'microtime'. – Kermit

4

Почему бы не использовать эту функцию, PHP предоставляет для этой цели:

uniqid

Пример:

uniqid(rand(10*45), true) 
+0

'uniqid (rand (10 * 45, true))' * – Kiee

2

Если вы принимаете шестнадцатеричных чисел, то:

function random_id($bytes) { 
    $rand = mcrypt_create_iv($bytes, MCRYPT_DEV_URANDOM); 
    return bin2hex($rand); 
} 
echo random_id(5); // Ex: a06e0e4e72 

5 байты (то есть 40 бит) создает около 2 40 (около триллиона) возможных uniqu е. Он должен быть более чем случайным, чтобы создать много уникальных идентификаторов.

+0

, как я уже сказал, я искал только цифры. Но все равно спасибо :) – prakashchhetri