什麼是 UUID?
UUID(通用唯一識別碼,微軟的工具稱為 GUID)是一個 128 位元的 ID,寫成 32 個十六進位數字、分成五段,例如 919108f7-52d1-4320-9bac-f847db4148a8。任何程式都能自己產生,不需要向中央伺服器申請,隨機產生的兩個 UUID 實際上不會重複。
v4 還是 v7?
- v4 有 122 位元是隨機的。適合不想透露任何資訊的 ID,例如公開的 ID、檔名、邀請碼。
- v7 開頭是毫秒時間戳記,越新產生的排得越後面。拿來當資料庫主鍵時,新資料都加在索引的最後面,比隨機的 v4 快。
使用方式
- 選擇版本與數量(最多 1,000 個)。
- 如果系統需要特定格式,可以改成大寫、去掉連字號或加上大括號,清單會立即更新。
- 複製清單,或下載成文字檔(一行一個)。
- 要檢查現有的 UUID,貼到「驗證 UUID」,就會顯示版本、變體;v1、v6、v7 還會顯示裡面記錄的時間。
範例
這個 v7 UUID 出自 UUID 的標準文件 RFC 9562:
017f22e2-79b0-7cc3-98c4-dc0c0c07398f
前 12 個數字 017f22e279b0 是以毫秒為單位的 Unix 時間戳記,驗證結果顯示為:
2022-02-22T19:22:22.000Z
常見問題
這裡產生的 UUID 夠隨機,可以用在正式環境嗎?
可以。隨機的部分來自瀏覽器的 crypto.getRandomValues,是密碼學等級的亂數,和伺服器端的函式庫品質相同。UUID 在你的瀏覽器產生,不會傳送到任何地方。
兩個 UUID 會不會重複?
理論上會,實際上不會。v4 有 2122 種可能:每秒產生 10 億個、連續 85 年,重複一次的機率才到 50%。v7 還包含時間,不同毫秒產生的 ID 絕不會重複。
v7 會透露產生的時間嗎?
會。任何人都能從 v7 UUID 讀出產生時間,就像上面的範例。如果產生時間不能公開,請用 v4。
要用大寫還是小寫?
標準建議輸出小寫、比對時不分大小寫,所以小寫最保險。只有系統要求時才用大寫或大括號,例如部分微軟工具會把 GUID 顯示成 {...}。