PHP: как создать уникальный # - PullRequest
1 голос
/ 11 января 2010

Я видел много примеров того, как использовать uniqid () в PHP для создания уникальной строки, но нужно создать уникальный номер заказа (только целые числа, без букв).

Мне понравилась идея uniqid (), потому что, насколько я понимаю, она использует дату / время, поэтому шансы на создание другого идентичного идентификатора равны нулю .... (если я правильно понимаю функцию)

Ответы [ 4 ]

3 голосов
/ 11 января 2010

mt_rand должны добиться цели.

Генерирует случайное число между своим первым параметром и вторым параметром. Например, чтобы сгенерировать случайное число от 500 до 1000, вам нужно сделать:

$number = mt_rand(500,1000);

Но если вы используете его в качестве номера заказа, вы должны просто использовать столбец автоинкремента. Мало того, что он там, но что бы вы сделали, если один и тот же номер был сгенерирован более одного раза? Предполагая, что вы используете MySQL, вы можете прочитать об автоинкрементных столбцах здесь .

1 голос
/ 11 января 2010

Используйте hexdec для преобразования шестнадцатеричной строки в число. http://us.php.net/manual/en/function.hexdec.php

hexdec(uniqid())
0 голосов
/ 11 января 2010

Я лично использую date('U'), чтобы сгенерировать строку, основанную на количестве секунд, прошедших с UNIX EPOCH. Если это не достаточно случайно (если вы думаете, что в одну и ту же секунду вы разместите два ордера), просто добавьте еще один слой с mt_rand(0,9):

$uniqid = date('U') . mt_rand(0,9);

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

0 голосов
/ 11 января 2010

uniqid () делает то, что вы думаете, что делает ... но если вы вставляете это значение в базу данных, вам лучше использовать поле с автоматическим увеличением для идентификаторов ... это действительно зависит от того, что вы используя идентификаторы для.

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