📜  JavaScript 创建 UUID - Javascript (1)

📅  最后修改于: 2023-12-03 15:31:41.318000             🧑  作者: Mango

JavaScript创建UUID

UUID(Universally Unique Identifier)是一种用于标识信息的16字节(128位)数字。在开发中,我们常常需要为数据生成UUID,以下是几种在JavaScript中创建UUID的方法。

方法一:使用Math.random()函数
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'的格式和上一个例子中相同。

方法三:使用crypto API
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的方法,使用方法可根据具体场景选择其中一种。