Я считаю, что проблема всех существующих идей заключается в том, что они , вероятно, уникальны, но не определенно уникальны (как указано в ответе Дариуша Вальчака на loletech). У меня есть решение, которое на самом деле является уникальным. Это требует, чтобы у вашего скрипта была какая-то память. Для меня это база данных SQL. Вы также можете просто написать куда-нибудь файл. Есть две реализации:
Первый метод: имейте ДВА поля, а не 1, которые обеспечивают уникальность. Первое поле - это идентификационный номер, который не является случайным, но является уникальным (первый идентификатор - 1, второй - 2 ...). Если вы используете SQL, просто определите поле ID с помощью свойства AUTO_INCREMENT. Второе поле не уникально, а случайно. Это может быть сгенерировано с помощью любой другой техники, о которой люди уже упоминали. Идея Скотта была хорошей, но md5 удобен и, вероятно, достаточно хорош для большинства целей:
$random_token = md5($_SERVER['HTTP_USER_AGENT'] . time());
Второй метод: в основном та же идея, но изначально выбирают максимальное количество строк, которые когда-либо будут сгенерированы. Это может быть очень большое число, например, триллион. Затем сделайте то же самое, сгенерируйте идентификатор, но добавьте ноль, чтобы все идентификаторы имели одинаковое количество цифр. Затем просто объедините идентификатор со случайной строкой. Это будет достаточно случайным для большинства целей, но раздел идентификатора будет гарантировать, что он также уникален.