📜  如何创建 GUID UUID - Javascript (1)

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

如何创建 GUID UUID - Javascript

GUID (Globally Unique Identifier) 或 UUID (Universally Unique Identifier) 是一种由数字和字母组成的32个字符长的标识符,用于识别唯一对象。在Javascript中,我们可以使用一些方法来创建GUID或UUID。

方法一:使用Math.random()函数

我们可以使用Math.random()函数生成一个伪随机数,并将其转换为16进制格式。

function generateGUID() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    var r = Math.random() * 16 | 0,
        v = c == 'x' ? r : (r & 0x3 | 0x8);
    return v.toString(16);
  });
}

console.log(generateGUID()); // 输出:'5773e89c-d4cd-4b6f-9bad-d2f667582289'

解释:

  • 我们使用字符串'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'作为模板,其中x表示随机生成的字符,y表示固定字符4,使生成的GUID遵循标准格式。
  • 我们使用replace()方法和正则表达式/[xy]/g,将x和y替换为随机数字和字母。
  • 我们使用Math.random()函数生成0到1之间的伪随机数,并将其乘以16取整,得到0到15之间的随机整数。
  • 我们使用运算符|将随机整数转换为无符号32位整数。
  • 对于x,我们直接返回随机整数的16进制表示。
  • 对于y,我们先将随机整数与0x3按位与运算,得到0到3之间的随机整数,再加上0x8,得到8到11之间的随机整数,最后返回其16进制表示。
方法二:使用crypto API

我们也可以使用Node.js中的crypto API生成GUID或UUID。

const crypto = require('crypto');

function generateUUID() {
  let buffer = crypto.randomBytes(16);
  buffer[6] = (buffer[6] & 0x0f) | 0x40; // RFC 4122 version 4
  buffer[8] = (buffer[8] & 0x3f) | 0x80; //RFC 4122 variant 1
  return buffer.toString('hex').match(/.{1,8}/g).join('-');
}

console.log(generateUUID()); // 输出:'3f5c5a03-5c3f-4b16-af7e-3083d494e924'

解释:

  • 我们使用crypto.randomBytes()方法生成16字节的伪随机数。
  • 我们将伪随机数的6字节的最高两位设置为0和1,使其成为RFC 4122版本4的标识符。
  • 我们将伪随机数的8字节的最高一位设置为1和0,使其成为RFC 4122变体1的标识符。
  • 我们使用buffer.toString('hex')方法将伪随机数转换为16进制字符串。
  • 我们使用match()方法和正则表达式/.{1,8}/g将16进制字符串分割成8个4字节(32位)的子串。
  • 我们使用join()方法和字符串'-'将子串连接为标准格式的UUID。

以上两种方法都可以生成唯一的GUID或UUID,具体使用哪种方法取决于你的需求和环境。