首頁 資訊 UID和UUID分別是什么?盤點生成UID的n種方法

UID和UUID分別是什么?盤點生成UID的n種方法

來源:泰然健康網(wǎng) 時間:2026年03月02日 03:05

作者:watermelo37 CSDN優(yōu)質(zhì)創(chuàng)作者、華為云云享專家、阿里云專家博主、騰訊云“創(chuàng)作之星”特邀作者、火山KOL、支付寶合作作者,全平臺博客昵稱watermelo37。 一個假裝是giser的coder,做不只專注于業(yè)務(wù)邏輯的前端工程師,Java、Docker、Python、LLM均有涉獵。 --------------------------------------------------------------------- 溫柔地對待溫柔的人,包容的三觀就是最大的溫柔。 ---------------------------------------------------------------------

UID和UUID分別是什么?盤點生成UID的n種方法

在實際開發(fā)中,經(jīng)常會需要生成一些唯一標識(UID)。到底有哪些快速獲取UID方法呢?不寫代碼如何獲取UID?小瓜將系統(tǒng)盤點常見 UID 生成方法,幫助你在業(yè)務(wù)中按需選擇。

一、UID與UUID

UID 和 UUID 都是用來唯一標識某個實體的標識符。UID全稱為:Unique Identifier(唯一標識符),泛指任何能唯一標識一個對象、用戶、記錄等的 ID。沒有強制格式或生成標準。UUID全稱為:Universally Unique Identifier(通用唯一標識符),是一種特定類型的 UID,遵循 RFC 4122 標準,有固定格式和生成規(guī)則。

UUID固定 128 位(16 字節(jié)),通常表示為 32 個十六進制字符 + 4 個連字符,共 36 字符,比如:

44dee8a3-be71-d41f-a488-3909a6e333d7 69ed482b-1f44-ebdd-52d4-0ea85b29ef81 7e5669e0-c383-976f-cbe8-1ed0b5fe00db 9f9456ce-d3cb-5ef4-a324-64f55da9f97d 45d0fb03-baf8-7f2a-eb48-d7204f501fba

所有 UUID 都是 UID,但并非所有 UID 都是 UUID。

二、非開發(fā)人員快速獲取批量uid

非開發(fā)人員可以通過一些在線網(wǎng)站快速獲取UUID,比如說:https://www.json.cm/uuid/

這樣的網(wǎng)站可以一鍵生成指定數(shù)量的UUID,也可以指定大小寫,還有一些其他功能可以免費使用。如果打不開了,搜索“UUID生成”一般都能找到類似的。

三、優(yōu)雅的UID/UUID獲取方式1、最常規(guī)方法:Math.random() 拼接字符串

說白了就一行代碼:

代碼語言:javascript

AI代碼解釋

復(fù)制

const uid = Math.random().toString(36).slice(2, 2+n);

簡單分析一下吧,Math.random()生成一個偽隨機數(shù),toString(n)轉(zhuǎn)換為n進制的字符串,n在2~36之間就行。36進制就是0~9+a~z,相當于每一位是36個字符中的隨機一個,最后通過slice(2, 2+n)從第 3 位開始往后取 n 位,從第三位開始取是因為第一位是整數(shù),第二位是小數(shù)點,第三位開始才是小數(shù)第一位。最終就能得到 n 位的UID了。

但是存在特殊情況,比如Math.random()生成了一個極小數(shù),轉(zhuǎn)換為36進制后會湊不出9位小數(shù),所以有一個更健壯的寫法,本質(zhì)是在末尾補0,確保一定能截取 n 位UID:

代碼語言:javascript

AI代碼解釋

復(fù)制

Math.random().toString(36).substring(2).padEnd(n, '0').slice(0, n);

上面提到這是偽隨機,種子可推測并且不能完全保證不重復(fù),所以不適用于嚴謹規(guī)范的應(yīng)用場景。

2、瀏覽器自帶、高質(zhì)量隨機數(shù):crypto.randomUUID()

這個非常好用, 并且適用性強,能一鍵生成UUID:

代碼語言:javascript

AI代碼解釋

復(fù)制

crypto.randomUUID(); // e.g. "b1c4ef3f-83aa-4c51-b40f-094d389cbf0f"

這是真正高質(zhì)量的UUID v4(隨機型),無依賴、原生支持,符合 RFC 4122 標準,沖突概率極低。在絕大多數(shù)業(yè)務(wù)都推薦使用這個方法。但是如果是做私有項目或者保密機構(gòu)的項目,可能會出現(xiàn)瀏覽器不支持的情況。

3、短 ID 獲取庫:NanoID

NanoID 是近幾年非常流行的 UID 方案:

代碼語言:javascript

AI代碼解釋

復(fù)制

npm install nanoid

代碼語言:javascript

AI代碼解釋

復(fù)制

import { nanoid } from 'nanoid'; nanoid(); // "V1StGXR8_Z5jdHi6B-myT"

nanoid() 生成的UID默認 21 字符,沖突概率仍比 UUID 低(因為每位都是URL 安全的 63 個字符:-._0-9A-Za-z),比 UUID 更短、更適合 URL使用,也可以自定義字符集、長度,適合用來作為URL 短鏈 ID、數(shù)據(jù)庫主鍵、前端生成無序唯一 ID等場景。

4、排序友好方案:時間戳 + 隨機數(shù)混合

很簡單,直接手寫:

代碼語言:javascript

AI代碼解釋

復(fù)制

function generateId() { return ( Date.now().toString(36) + Math.random().toString(36).slice(2, 10) ); }

就是在隨機生成的基礎(chǔ)上增加了時間戳,這樣不但更可靠,還能具備一些排序的功能。但在高并發(fā)場景下仍可能出現(xiàn)沖突。

5、Twitter Snowflake 雪花算法(分布式環(huán)境的經(jīng)典方案)

這個的優(yōu)勢是在分布式環(huán)境下,同時具備可排序、可追溯、極高性能的效果,但不適合在前端生成,以nodejs環(huán)境為例:

代碼語言:javascript

AI代碼解釋

復(fù)制

npm install snowflake-id

代碼語言:javascript

AI代碼解釋

復(fù)制

// example.js const Snowflake = require('snowflake-id'); // 創(chuàng)建 Snowflake 實例 // workerId: 機器/服務(wù)實例 ID(0 ~ 1023) // dataCenterId: 數(shù)據(jù)中心 ID(0 ~ 31,可選,默認 0) const snowflake = new Snowflake({ workerId: 1, // 必填,必須在 0-1023 之間 dataCenterId: 0, // 可選,默認 0(實際占 5 位,最大 31) epoch: 1577836800000 // 可選,自定義起始時間(毫秒),默認是 2020-01-01 }); // 生成 ID(返回 string 類型,避免精度丟失) const id1 = snowflake.generate(); const id2 = snowflake.generate(); console.log('ID 1:', id1); console.log('ID 2:', id2); // 解析 ID(還原時間、機器信息等) const info1 = snowflake.decode(id1); console.log('n解析 ID 1:'); console.log('生成時間:', new Date(info1.timestamp).toISOString()); console.log('時間戳(毫秒):', info1.timestamp); console.log('workerId:', info1.workerId); console.log('dataCenterId:', info1.dataCenterId); console.log('序列號:', info1.sequence);四、結(jié)語

UID(唯一標識符)作為系統(tǒng)中識別實體的基礎(chǔ)構(gòu)件,其設(shè)計看似簡單,實則深刻影響著系統(tǒng)的可擴展性、性能與安全性。UUID 作為 UID 的一種標準化實現(xiàn),憑借全局唯一性和無需協(xié)調(diào)的特性,成為分布式系統(tǒng)的“通用語言”;希望本文提供的UID生成方案,能滿足你在各種場景下的應(yīng)用需求。

只有鍛煉思維才能可持續(xù)地解決問題,只有思維才是真正值得學習和分享的核心要素。如果這篇博客能給您帶來一點幫助,麻煩您點個贊支持一下,還可以收藏起來以備不時之需,有疑問和錯誤歡迎在評論區(qū)指出~

本文參與 騰訊云自媒體同步曝光計劃,分享自作者個人站點/博客。

原始發(fā)表:2025-12-07,如有侵權(quán)請聯(lián)系 cloudcommunity@tencent.com 刪除

相關(guān)知識

UID和UUID分別是什么?盤點生成UID的n種方法
隨筆:uid和uuid是什么,分別應(yīng)用在什么場景下?
衛(wèi)寧健康(SZ300253)股吧
德展健康(SZ000813)股吧
華邦健康(SZ002004)股吧
信隆健康(SZ002105)股吧
國新健康(SZ000503)股吧
健康元(SH600380)股吧
國泰集團(SH603977)股吧
全年醫(yī)療費用報銷卡是什么?有什么規(guī)定?

網(wǎng)址: UID和UUID分別是什么?盤點生成UID的n種方法 http://www.gysdgmq.cn/newsview1906978.html

推薦資訊