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


在实际开发中,经常会需要生成一些唯一标识(UID)。到底有哪些快速获取UID方法呢?不写代码如何获取UID?小瓜将系统盘点常见 UID 生成方法,帮助你在业务中按需选择。
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。
非开发人员可以通过一些在线网站快速获取UUID,比如说:https://www.json.cm/uuid/
这样的网站可以一键生成指定数量的UUID,也可以指定大小写,还有一些其他功能可以免费使用。如果打不开了,搜索“UUID生成”一般都能找到类似的。

说白了就一行代码:
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:
Math.random().toString(36).substring(2).padEnd(n, '0').slice(0, n);上面提到这是伪随机,种子可推测并且不能完全保证不重复,所以不适用于严谨规范的应用场景。
这个非常好用, 并且适用性强,能一键生成UUID:
crypto.randomUUID();
// e.g. "b1c4ef3f-83aa-4c51-b40f-094d389cbf0f"这是真正高质量的UUID v4(随机型),无依赖、原生支持,符合 RFC 4122 标准,冲突概率极低。在绝大多数业务都推荐使用这个方法。但是如果是做私有项目或者保密机构的项目,可能会出现浏览器不支持的情况。
NanoID 是近几年非常流行的 UID 方案:
npm install nanoidimport { nanoid } from 'nanoid';
nanoid(); // "V1StGXR8_Z5jdHi6B-myT"nanoid() 生成的UID默认 21 字符,冲突概率仍比 UUID 低(因为每位都是URL 安全的 63 个字符:-._0-9A-Za-z),比 UUID 更短、更适合 URL使用,也可以自定义字符集、长度,适合用来作为URL 短链 ID、数据库主键、前端生成无序唯一 ID等场景。
很简单,直接手写:
function generateId() {
return (
Date.now().toString(36) +
Math.random().toString(36).slice(2, 10)
);
}就是在随机生成的基础上增加了时间戳,这样不但更可靠,还能具备一些排序的功能。但在高并发场景下仍可能出现冲突。
这个的优势是在分布式环境下,同时具备可排序、可追溯、极高性能的效果,但不适合在前端生成,以nodejs环境为例:
npm install snowflake-id// 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生成方案,能满足你在各种场景下的应用需求。
只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~