Генерирование уникальных 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 more 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(), что позволит сэкономить место.