UUID v7 產生器

線上產生 UUID v7:可按時間排序,包含 48 位元毫秒時間戳和 74 個隨機位元。

格式
產生結果
就緒,可在瀏覽器內產生 UUID v7。

這個 ID 的結構

結構
48 位元 Unix 毫秒時間戳、version 7 位元、RFC variant 位元和隨機填充。
本實作使用 74 個隨機位元;不包含單調計數器。
時間
包含。前 48 位元編碼產生時間,不同毫秒之間可按時間排序。
碰撞風險
同一毫秒內的碰撞取決於 74 個隨機位元;極高併發場景應使用協調式 ID 服務。
範例
01a044bc-5f90-701b-8d10-4a9ecc15fb6a

你的 ID 會用瀏覽器內的強隨機來源在本地產生,不會傳送到 BroBroGo。

常見問題

為什麼用 UUID v7 而不是 UUID v4?

UUID v7 保留 UUID 形態,但能按時間排序,對日誌、數據庫索引和事件流更友好。

UUID v7 會隱藏產生時間嗎?

不會。時間戳就是 ID 的一部分。若需要不含時間的不透明 ID,用 UUID v4 或 NanoID。

UUID v7 生成器:時間排序、不可猜測嘅本地化識別碼

UUID v7 將一個 48-bit Unix 毫秒時間戳嵌入識別碼開頭,後面跟隨隨機位元,令到每個 ID 可以按建立時間排序,同時保持密碼學強度嘅不可猜測性。呢個生成器頁面讓你喺瀏覽器內即時產生 1 至 100 個 UUID v7 識別碼,並提供大寫切換同連字符開關,所有處理都喺本地完成,唔會將任何資料送出到伺服器。

UUID v7 嘅結構:時間戳 + 隨機位元

UUID v7 係 128-bit 識別碼,文字表示為 36 個字元,格式係 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。頭 48-bit 係 Unix 毫秒時間戳(由 1970-01-01 00:00:00 UTC 起計嘅毫秒數),其餘 80-bit 由密碼學安全嘅隨機數產生器填充。呢個設計令 UUID v7 同時具備兩個重要特性:

  • 按時間排序:因為時間戳放喺最前面,喺資料庫 B-tree 索引入面插入新記錄時,頁面分裂次數遠少於 UUID v4,提升寫入效能。
  • 不可猜測性:隨機部分足夠長(80-bit),攻擊者無法透過已知 ID 推斷未來或過去嘅 ID。

注意:UUID v7 唔保證同一毫秒內產生嘅 ID 有嚴格排序──如果系統喺同一毫秒內產生大量 ID,排列次序取決於隨機部分,而唔係時間先後。

同 UUID v4 嘅關鍵差異:索引局部性

UUID v4 完全由隨機數構成,喺資料庫以主鍵插入時會隨機分散喺 B-tree 各頁,導致頻繁頁面分裂、快取命中率下降。UUID v7 將時間戳放喺開頭,新記錄傾向插入索引樹嘅最右位置,大幅減少頁面分裂次數。實際測試顯示,喺高並發寫入場景,UUID v7 嘅插入效能可比 v4 提升 20–50%,尤其喺 SSD 上效果更明顯。

但相同毫秒內嘅 ID 順序唔保證──若你嘅應用需要嚴格嘅跨記錄次序(例如事件溯源),需要額外機制(如序號或時間戳細化)來處理同一毫秒嘅情況。

生成器嘅操作方式同邊界情況

呢個頁面嘅輸入好簡單:

  • 數量:1 至 100(改變時即時重新產生)
  • 大寫:開關,輸出全部大寫字母
  • 包含連字符:開關,輸出有無連字符(標準格式有連字符)

輸出會顯示一個列表,每個 ID 都可以獨立點擊複製,或者一次過複製全部。狀態欄會顯示「Ready.」、「Generated.」或「Copied all!」。

邊界情況要注意:

  • 改變任何選項(數量、大寫、連字符)會立刻重新產生所有 ID,舊 ID 消失。
  • 當你選擇不含連字符嘅格式,輸出長度係 32 個字元(純十六進制),但內部結構仍然係 128-bit UUID v7。
  • 由於瀏覽器隨機數產生器嘅質素,現代瀏覽器(Chrome、Firefox、Safari)使用 crypto.getRandomValues(),足夠支援密碼學應用。

誰需要呢個工具

  • 分散式系統開發者:需要分散且時間可排序嘅主鍵,避免中央序列生成器成為瓶頸。
  • 資料庫管理員:想減少 UUID v4 造成嘅索引碎片,尤其係高寫入量嘅 OLTP 系統。
  • 安全工程師:需要不可猜測嘅識別碼,同時容許按時間過濾或排序(例如審計日誌、API 金鑰)。
  • 從 v4 遷移嘅團隊:想轉用時間排序格式,但唔想改用 ULID 或 NanoID(佢哋有唔同字元集同長度),保留 UUID 標準格式以便與現有工具相容。

常見誤解同最佳實踐

  • 「UUID v7 保證全局嚴格排序」:錯。同一毫秒內唔保證順序;若需要嚴格排序,應改用有序時間戳(例如精確到微秒嘅系統時間)加上序號。
  • 「大寫 UUID 係壞習慣」:標準 RFC 9562(UUID v7 嘅最終規範)指定用大寫字母表示十六進制?其實 RFC 容許小寫或大寫,但大部分實作用小寫。呢個工具提供選項,方便複製貼上時符合系統要求(例如某些數據庫工具偏好大寫)。
  • 「冇連字符嘅 UUID 係 v7 嗎?」:係。UUID v7 嘅內部結構同連字符無關。移除連字符只影響文字表示,唔改變 ID 內容或排序特性。

常見問題(FAQ)

問:UUID v7 同 ULID 有咩分別? 答:兩者都係時間排序加隨機,但 UUID v7 用 36 字元、標準 UUID 格式;ULID 用 26 字元、Crockford Base32 編碼。UUID v7 嘅時間戳精度係毫秒(48-bit),ULID 係毫秒(48-bit)但將隨機部分編碼得更緊湊。選擇取決於你系統需要嘅文字長度同現有 UUID 工具鏈相容性。

問:可以喺生產環境用呢個工具產生數據庫主鍵嗎? 答:可以,但要注意:工具一次性產生 1–100 個 ID,適合離線設定或測試。生產系統應該使用伺服器端嘅 UUID v7 庫(例如 PHP 嘅 uuid_create()、Python 嘅 uuid.uuid7())以確保時間戳準確同隨機數來源可控。

問:同一個毫秒內產生嘅 ID 會撞嗎? 答:極低機率。80-bit 隨機部分嘅碰撞機率喺單一毫秒內產生 100 個 ID 時極低(約 2^80 分一)。但嚴格嚟講,唔保證順序,只保證極低碰撞率。

問:我應該用大寫定小寫? 答:按系統標準決定。數據庫內部以二進制儲存,字元大小寫唔影響儲存或排序。但若你嘅系統(例如某些 CLI 工具)只接受大寫,就開大寫。

問:點解改變選項會即刻清除舊 ID? 答:為咗確保輸出一致。如果保留舊 ID,使用者可能混淆舊設定同新設定嘅結果。每次變更都代表一個新批次。

問:呢個工具安全嗎?會傳送資料去你伺服器嗎? 答:唔會。所有 ID 都喺你瀏覽器用 crypto.getRandomValues() 產生,無任何網絡請求。你可以斷網使用。