- Generate a UUID in PHP
- How to Generate a UUID in PHP
- 1. Roll-Your-Own UUID Generation Function in PHP
- Notes
- 2. Use the ramsey/uuid PHP Library
- uniqid
- Список параметров
- Возвращаемые значения
- Примеры
- Примечания
- Генерация уникального ID на PHP
- Комментарии ( 1 ):
- PHP uniqid() Function
- Syntax
- Parameter Values
- Technical Details
- COLOR PICKER
- Report Error
- Thank You For Helping Us!
Generate a UUID in PHP
PHP is one of the more popular programming languages in the world.
First released in 1995 as a way to build dynamic web applications, PHP is a dynamically typed scripting language with similarities to Perl and C. Although considered a general purpose programming language, PHP is primarily used for building websites.
How to Generate a UUID in PHP
PHP does not have built-in support for generating RFC 4122 compliant UUIDs. The function, uniqid() , is not a sufficient replacement for generating RFC 4122 compliant UUIDs as it may not always generate a unique value (especially if your computer is fast) and it can only generate a maximum of 23 characters.
However, below you’ll find two, viable 3rd-party solutions for generating RFC 4122 compliant UUIDs in PHP.
1. Roll-Your-Own UUID Generation Function in PHP
This small helper function generates RFC 4122 compliant Version 4 UUIDs.
function guidv4($data = null)// Generate 16 bytes (128 bits) of random data or use the data passed into the function.$data = $data ?? random_bytes(16);assert(strlen($data) == 16);// Set version to 0100$data[6] = chr(ord($data[6]) & 0x0f | 0x40);// Set bits 6-7 to 10$data[8] = chr(ord($data[8]) & 0x3f | 0x80);// Output the 36 character UUID.return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));>
Notes
- This function requires PHP 7 or later because of the use of the function random_bytes on line #3.
- If you’re using PHP 5 or earlier and have the openssl extension installed, you could use openssl_random_pseudo_bytes(16) , instead of random_bytes(16) on line #3.
- Credits go to this answer on Stackoverflow for this solution.
- An example usage of this function would look like this:
$myuuid = guidv4();echo $myuuid;
2. Use the ramsey/uuid PHP Library
If you’re using Composer for managing dependencies in your PHP project, you can use the ramsey/uuid PHP library for generating UUIDs.
To get started with the library, you can install and add it to your project like this:
% composer require ramsey/uuid
Now you can use it in your PHP project. Here is a small example of generating a UUID with this library:
use Ramsey/Uuid/Uuid;$myuuid = Uuid::uuid4();printf("Your UUID is: %s", $myuuid->toString());
How can we improve this page? Let us know!
uniqid
Получает уникальный идентификатор с префиксом, основанный на текущем времени в микросекундах.
Эта функция не создает ни случайную ни трудно подбираемую строку. Нельзя использовать эту функцию в целях повышения безопасности. Используйте криптографически безопасные функции/генераторы случайных данных, и криптографически защищенные хэш-функции для создания непредсказуемых безопасных ID.
Список параметров
Может быть полезно, к примеру, если идентификаторы генерируются одновременно на нескольких хостах и генерация идентификаторы производится в одну и ту же микросекунду.
С пустым параметром prefix , возвращаемая строка будет длиной в 13 символов. Если параметр more_entropy равен TRUE , то строка буде длиной в 23 символа.
Если равен TRUE , то функция uniqid() добавит дополнительную энтропию (используя комбинированный линейный конгруэнтный генератор) в конце возвращаемого значения, что увеличивает вероятность уникальности результата.
Возвращаемые значения
Возвращает уникальный идентификатор в виде строки (string).
Примеры
Пример #1 Пример использования uniqid()
/* Уникальный id, например: 4b3403665fea6 */
printf ( «uniqid(): %s\r\n» , uniqid ());
?php
/* Префикс к уникальному id можно добавить одним
* из следующих способов:
*
* $uniqid = $prefix . uniqid();
* $uniqid = uniqid($prefix);
*/
printf ( «uniqid(‘php_’): %s\r\n» , uniqid ( ‘php_’ ));
/* Также можно активировать параметр большей энтропии, который
* требуется на некоторых системах, таких как Cygwin. Таким образом
* функция uniqid() сгенерирует значение: 4b340550242239.64159797
*/
printf ( «uniqid(», true): %s\r\n» , uniqid ( » , true ));
?>
Примечания
Эта функция не генерирует защищенные криптографически токены, по сути, не передается каких-либо дополнительных параметров и возвращаемое значение мало чем отличается от возвращаемого функцией microtime() . Если необходимо сгенерировать криптографически защищенные токены, то нужно использовать функцию openssl_random_pseudo_bytes() .
Замечание:
В Cygwin, параметр more_entropy должен быть задан как TRUE для работы этой функции.
Генерация уникального ID на PHP
Очень часто при разработке сайтов требуется генерировать уникальный ID на PHP. Приведу пример, с которым я столкнулся в своей практике. Я занимался Интернет-магазином, и там были 2 типа товаров, которые настолько разные по своей природе, что отправлять заказы в одну таблицу было крайне неразумно. Но если я размещаю заказы по 2-м таблицам, то ID каждого заказа не является уникальным. Ведь может быть 10-й заказ в первой таблице и 10-й заказ во второй таблице. И как их различать? Вот эту проблему я и решил. А как, Вы узнаете из этой статьи.
Я добавил в каждую таблицу по одному полю key, в которое поместил уникальное значение, зависящее от текущего времени, которое, как известно, не стоит на месте (если, конечно, сервер не движется со скоростью света). Вот так это выглядело:
$key = md5(microtime(true)); // MD5-хэш текущего времени с точностью до сотых секунды
?>
И затем этот key я записывал в таблицу с заказом. И затем идентифицировал заказ не по его ID, а именно по ключу, который был уникальным для каждого заказа.
Вроде всё хорошо, однако, не так давно я нашёл прекрасную функцию, которая называется uniqid(), которая позволяет ещё лучше уникализировать ID.
$id_1 = uniqid(); //508e12465f75b
$id_2 = uniqid(«pref_»); //pref_508e12465f7bb
$id_3 = uniqid(«pref_», true); //pref_508e12465f7c15.02077905
?>
Вариант без параметров аналогичен моему варианту, только он более короткий (и в плане кода, и в плане результата). А теперь описание параметров:
- prefix (по умолчанию, пустая строка) — некий набор символов, который будет соединяться с уникальным ID. Это очень полезно, если Вы хотите действительно высокую уникальность, чтобы данная функция не совпала результатом, например, с каким-нибудь другим сайтом. Главное, придумать префикс поуникальнее.
- more_entropy (по умолчанию, false) — если стоит true, то в значение ID будет добавлена дополнительная энтропия. Тем самым, результат будет ещё более уникальным.
Вот так легко генерируется уникальный ID на PHP. Вы можете использовать мой способ, а можете использовать функцию uniqid(). Если использовать просто uniqid() без параметров или только с префиксом, то скорость генерации выше в 1.5-2 раза (в абсолютном значении — это мизер, но всё-таки). А если с энтропией, то без разницы. Лично я перейду на uniqid(), всё-таки гарантировать, что не будет 2-х заказов в одну сотую секунды, не стоит. А вот скорость генерации уникального ID выше, меньше кода, да и сам ID компактнее.
Создано 29.10.2012 09:47:54
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 1 ):
Хм, не знал про данную функцию, надо будет поюзать.
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.
PHP uniqid() Function
The uniqid() function generates a unique ID based on the microtime (the current time in microseconds).
Syntax
Parameter Values
Parameter | Description |
---|---|
prefix | Optional. Specifies a prefix to the unique ID (useful if two scripts generate ids at exactly the same microsecond) |
more_entropy | Optional. Specifies more entropy at the end of the return value. This will make the result more unique. When set to TRUE, the return string will be 23 characters. Default is FALSE, and the return string will be 13 characters long |
Technical Details
Return Value: | Returns the unique identifier, as a string |
---|---|
PHP Version: | 4+ |
Changelog: | The prefix parameter became optional in PHP 5.0. The limit of 114 characters long for prefix was raised in PHP 4.3.1. |
❮ PHP Misc Reference
COLOR PICKER
Report Error
If you want to report an error, or if you want to make a suggestion, do not hesitate to send us an e-mail:
Thank You For Helping Us!
Your message has been sent to W3Schools.
Top Tutorials
Top References
Top Examples
Get Certified
W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.