Дек 252011
 

Генерирование уникальных ID

Могут возникать ситуации, когда вам нужно сгенерировать уникальную у. Я видел множество людей, использовавших для этого функцию md5(), хотя она предназначена не совсем для этой цели:

1.// generate unique string
2.echo md5(time() . mt_rand(1,1000000));

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

01.// generate unique string
02.echo uniqid();
03./* prints
04.4bd67c947233e
05.*/
06.
07.// generate another unique string
08.echo uniqid();
09./* prints
10.4bd67c9472340
11.*/

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

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

01.// with prefix
02.echo uniqid('foo_');
03./* prints
04.foo_4bd67d6cd8b8f
05.*/
06.
07.// with entropy
08.echo uniqid('',true);
09./* prints
10.4bd67d6cd8b926.12135106
11.*/
12.
13.// both
14.echo uniqid('bar_',true);
15./* prints
16.bar_4bd67da367b650.43684647
17.*/

Эта функция будет генерировать более короткие строки, чем md5(), что позволит сэкономить место.

 Posted by at 07:24  Tagged with:

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)