📅  最后修改于: 2023-12-03 15:31:41.318000             🧑  作者: Mango
UUID(Universally Unique Identifier)是一种用于标识信息的16字节(128位)数字。在开发中,我们常常需要为数据生成UUID,以下是几种在JavaScript中创建UUID的方法。
function getRandomUUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0;
var v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
console.log(getRandomUUID()); // 打印随机生成的UUID
上述代码实现了一个随机生成UUID的函数,使用了正则表达式替换'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'中的字符来实现UUID的随机生成。
function getTimeUUID() {
var d = new Date().getTime();
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
return uuid;
}
console.log(getTimeUUID()); // 打印以时间戳为基础的UUID
上述代码使用了当前时间戳(即new Date().getTime())和随机数来生成UUID。其中,'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'的格式和上一个例子中相同。
function getCryptoUUID() {
var cryptoObj = window.crypto || window.msCrypto; // IE 11 兼容性
var array = new Uint8Array(16);
cryptoObj.getRandomValues(array);
var uuid = '';
for (var i = 0; i < array.length; i++) {
uuid += (array[i] < 16 ? '0' : '') + array[i].toString(16);
}
uuid = uuid.substr(0, 8) + '-' + uuid.substr(8, 4) + '-4' + uuid.substr(12, 3)
+ '-' + ((array[6] & 0x0f) | 0x40).toString(16) + uuid.substr(15, 3)
+ '-' + ((array[10] & 0x3f) | 0x80).toString(16) + uuid.substr(18, 3);
return uuid;
}
console.log(getCryptoUUID()); // 打印使用crypto API生成的UUID
上述代码使用了crypto API来生成UUID。其中,new Uint8Array(16)用于生成一个包含16个8位无符号整数的数组,使用window.crypto.getRandomValues()方法填充该数组。接着,根据RFC4122规范来格式化UUID。
以上便是JS中三种生成UUID的方法,使用方法可根据具体场景选择其中一种。