PHP Conference Japan 2024

uniqid

(PHP 4, PHP 5, PHP 7, PHP 8)

uniqid產生基於時間的識別碼

說明

uniqid(字串 $prefix = "", 布林值 $more_entropy = false): 字串

取得基於目前時間(精確到微秒)的識別碼,並以給定的 prefix 作為前綴,還可以選擇性地附加一個隨機產生的值。

注意

此函式不會產生密碼學上安全的數值,且*不得*用於加密目的,或需要傳回值不可猜測的用途。

如果需要加密安全的隨機性,可以使用 Random\Randomizer 搭配 Random\Engine\Secure 引擎。對於簡單的應用場景,random_int()random_bytes() 函式提供了一個方便且安全的 API,其底層由作業系統的 CSPRNG 支援。

警告

此函式不保證回傳值的唯一性,因為該值基於目前的微秒時間,或者如果 more_entropytrue,則會附加少量隨機資料到目前時間。

參數

prefix

例如,如果您在多個主機上同時產生識別碼,而這些主機可能在同一微秒產生相同的識別碼,這時就很有用。(即使在單一主機上,如果系統時鐘被往回調整,例如透過 NTP 調整,也可能發生這種情況。)

如果 prefix 為空,回傳的字串長度將為 13 個字元。如果 more_entropytrue,則長度將為 23 個字元。

more_entropy

如果設為 trueuniqid() 會在回傳值的結尾添加額外的熵值(使用組合線性同餘產生器),這會增加結果唯一的可能性。

回傳值

回傳基於時間戳記的字串識別碼。

警告

此函式不保證回傳值的唯一性。

範例

範例 #1 uniqid() 範例

<?php
/* 像是這樣的 uniqid:4b3403665fea6 */
printf("uniqid(): %s\r\n", uniqid());

/* 我們也可以為 uniqid 加上前綴,這與執行以下程式碼相同:
*
* $uniqid = $prefix . uniqid();
* $uniqid = uniqid($prefix);
*/
printf("uniqid('php_'): %s\r\n", uniqid('php_'));

/* 我們也可以啟用 more_entropy 參數,這在某些系統上是必需的,例如 Cygwin。這會使 uniqid()
* 產生像這樣的值:4b340550242239.64159797
*/
printf("uniqid('', true): %s\r\n", uniqid('', true));
?>

注意事項

注意:

在 Cygwin 下,more_entropy 必須設為 true 才能使此函式正常運作。

參見

新增註釋

使用者貢獻的註釋 1 則註釋

2
ken at smallboxsoftware
17 年前
需要注意的是,這個函式執行速度相當慢,如果放在迴圈中,可能會讓你的腳本執行速度大幅降低。奇怪的是,如果以 uniqid('', true) 的方式執行,速度會快很多。
To Top