在前后端开发中,经常需要生成全局唯一的标识符。UUID v4依靠随机数保证唯一性,如果我们还想在生成的ID前面加上业务前缀,用原生JavaScript就能轻松实现。

为什么使用UUID v4
UUID v4由128位组成,其中约122位来自随机数。根据数学估算,日常系统中碰撞的可能性极小。相比自增ID,它不暴露数据量,也适合分布式环境。
标准UUID v4格式
标准写法为8-4-4-4-12的十六进制分段,例如:
550e8400-e29b-41d4-a716-446655440000第13位固定为4表示版本,第17位为8、9、a或b表示变体。
生成带前缀的实现代码
下面函数在随机UUID前拼接用户指定的前缀,使用crypto.getRandomValues保证随机性:
// 生成带指定前缀的UUID v4
function prefixedUUID(prefix) {
// 获取16字节随机值
var bytes = new Uint8Array(16);
crypto.getRandomValues(bytes);
// 设置版本和变体
bytes[6] = (bytes[6] & 0x0f) | 0x40;
bytes[8] = (bytes[8] & 0x3f) | 0x80;
var hex = [];
for (var i = 0; i < bytes.length; i++) {
hex.push((bytes[i] & 0xff).toString(16).padStart(2, '0'));
}
var uuid = hex.slice(0, 4).join('') + '-' +
hex.slice(4, 6).join('') + '-' +
hex.slice(6, 8).join('') + '-' +
hex.slice(8, 10).join('') + '-' +
hex.slice(10, 16).join('');
// 前缀非空时添加连字符
return (prefix ? prefix + '_' : '') + uuid;
}
// 使用示例
console.log(prefixedUUID('order'));
console.log(prefixedUUID('user_123'));
在Node.js中的注意点
Node环境没有全局crypto,需要先从crypto模块引入:
const { randomFillSync } = require('crypto');
function nodePrefixedUUID(prefix) {
const bytes = new Uint8Array(16);
randomFillSync(bytes);
bytes[6] = (bytes[6] & 0x0f) | 0x40;
bytes[8] = (bytes[8] & 0x3f) | 0x80;
const hex = Array.from(bytes).map(b => b.toString(16).padStart(2, '0'));
const uuid = hex.slice(0, 4).join('') + '-' +
hex.slice(4, 6).join('') + '-' +
hex.slice(6, 8).join('') + '-' +
hex.slice(8, 10).join('') + '-' +
hex.slice(10, 16).join('');
return (prefix ? prefix + '_' : '') + uuid;
}
小结
通过上述方式,我们无需任何第三方包即可生成带前缀的UUID v4。如果你希望前缀和UUID之间用别的符号分隔,修改拼接逻辑即可。在安全性要求高的场景,务必使用crypto而非Math.random。
JavaScriptUUID_v4指定前缀随机字符串crypto修改时间:2026-07-25 04:09:19