首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >UID和UUID分别是什么?盘点生成UID的n种方法

UID和UUID分别是什么?盘点生成UID的n种方法

作者头像
watermelo37
发布2025-12-24 15:44:35
发布2025-12-24 15:44:35
3750
举报
文章被收录于专栏:前端专精前端专精

作者:watermelo37 CSDN优质创作者、华为云云享专家、阿里云专家博主、腾讯云“创作之星”特邀作者、火山KOL、支付宝合作作者,全平台博客昵称watermelo37。 一个假装是giser的coder,做不只专注于业务逻辑的前端工程师,Java、Docker、Python、LLM均有涉猎。 --------------------------------------------------------------------- 温柔地对待温柔的人,包容的三观就是最大的温柔。 ---------------------------------------------------------------------

UID和UUID分别是什么?盘点生成UID的n种方法

在实际开发中,经常会需要生成一些唯一标识(UID)。到底有哪些快速获取UID方法呢?不写代码如何获取UID?小瓜将系统盘点常见 UID 生成方法,帮助你在业务中按需选择。

一、UID与UUID

UID 和 UUID 都是用来唯一标识某个实体的标识符。UID全称为:Unique Identifier(唯一标识符),泛指任何能唯一标识一个对象、用户、记录等的 ID。没有强制格式或生成标准。UUID全称为:Universally Unique Identifier(通用唯一标识符),是一种特定类型的 UID,遵循 RFC 4122 标准,有固定格式和生成规则。

UUID固定 128 位(16 字节),通常表示为 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。

二、非开发人员快速获取批量uid

非开发人员可以通过一些在线网站快速获取UUID,比如说:https://www.json.cm/uuid/

这样的网站可以一键生成指定数量的UUID,也可以指定大小写,还有一些其他功能可以免费使用。如果打不开了,搜索“UUID生成”一般都能找到类似的。

三、优雅的UID/UUID获取方式

1、最常规方法:Math.random() 拼接字符串

说白了就一行代码:

代码语言:javascript
复制
const uid = Math.random().toString(36).slice(2, 2+n);

简单分析一下吧,Math.random()生成一个伪随机数,toString(n)转换为n进制的字符串,n在2~36之间就行。36进制就是0~9+a~z,相当于每一位是36个字符中的随机一个,最后通过slice(2, 2+n)从第 3 位开始往后取 n 位,从第三位开始取是因为第一位是整数,第二位是小数点,第三位开始才是小数第一位。最终就能得到 n 位的UID了。

但是存在特殊情况,比如Math.random()生成了一个极小数,转换为36进制后会凑不出9位小数,所以有一个更健壮的写法,本质是在末尾补0,确保一定能截取 n 位UID:

代码语言:javascript
复制
Math.random().toString(36).substring(2).padEnd(n, '0').slice(0, n);

上面提到这是伪随机,种子可推测并且不能完全保证不重复,所以不适用于严谨规范的应用场景。

2、浏览器自带、高质量随机数:crypto.randomUUID()

这个非常好用, 并且适用性强,能一键生成UUID:

代码语言:javascript
复制
crypto.randomUUID(); 
// e.g. "b1c4ef3f-83aa-4c51-b40f-094d389cbf0f"

这是真正高质量的UUID v4(随机型),无依赖、原生支持,符合 RFC 4122 标准,冲突概率极低。在绝大多数业务都推荐使用这个方法。但是如果是做私有项目或者保密机构的项目,可能会出现浏览器不支持的情况。

3、短 ID 获取库:NanoID

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

代码语言:javascript
复制
npm install nanoid
代码语言:javascript
复制
import { nanoid } from 'nanoid';

nanoid(); // "V1StGXR8_Z5jdHi6B-myT"

nanoid() 生成的UID默认 21 字符,冲突概率仍比 UUID 低(因为每位都是URL 安全的 63 个字符:-._0-9A-Za-z),比 UUID 更短、更适合 URL使用,也可以自定义字符集、长度,适合用来作为URL 短链 ID、数据库主键、前端生成无序唯一 ID等场景。

4、排序友好方案:时间戳 + 随机数混合

很简单,直接手写:

代码语言:javascript
复制
function generateId() {
  return (
    Date.now().toString(36) + 
    Math.random().toString(36).slice(2, 10)
  );
}

就是在随机生成的基础上增加了时间戳,这样不但更可靠,还能具备一些排序的功能。但在高并发场景下仍可能出现冲突。

5、Twitter Snowflake 雪花算法(分布式环境的经典方案)

这个的优势是在分布式环境下,同时具备可排序、可追溯、极高性能的效果,但不适合在前端生成,以nodejs环境为例:

代码语言:javascript
复制
npm install snowflake-id
代码语言:javascript
复制
// example.js

const Snowflake = require('snowflake-id');

// 创建 Snowflake 实例
// workerId: 机器/服务实例 ID(0 ~ 1023)
// dataCenterId: 数据中心 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);

四、结语

UID(唯一标识符)作为系统中识别实体的基础构件,其设计看似简单,实则深刻影响着系统的可扩展性、性能与安全性。UUID 作为 UID 的一种标准化实现,凭借全局唯一性和无需协调的特性,成为分布式系统的“通用语言”;希望本文提供的UID生成方案,能满足你在各种场景下的应用需求。

只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • UID和UUID分别是什么?盘点生成UID的n种方法
    • 一、UID与UUID
    • 二、非开发人员快速获取批量uid
    • 三、优雅的UID/UUID获取方式
      • 1、最常规方法:Math.random() 拼接字符串
      • 2、浏览器自带、高质量随机数:crypto.randomUUID()
      • 3、短 ID 获取库:NanoID
      • 4、排序友好方案:时间戳 + 随机数混合
      • 5、Twitter Snowflake 雪花算法(分布式环境的经典方案)
    • 四、结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档