Javascript GUID(全局唯一标识符)生成器说明

Javascript GUID (Global Unique Identifier) Generator Explanation

我正在尝试为8个字符(包括小写/大写字母、数字和符号)编写一个javascript guid生成器。我找到了这些解决方案,但需要对每个解决方案中发生的事情进行解释。最初我认为我需要一个包含所有字母/数字/符号的字符串,这些字母/数字/符号是我用随机数函数编制的,以构建一个新的guid,但这些解决方案似乎是凭空创建数字/字母/符号。

在解决方案1中,"1+"和"0x1000"的用途是什么?".toString(16)"和".substring(1)"的目的是什么?它是如何用这一小段代码生成数字/符号/和字母的?

解决方案1:

1
2
3
4
5
6
7
8
9
function guid() {
  function s4() {
    return Math.floor((1 + Math.random()) * 0x10000)
      .toString(16)
      .substring(1);
  }
  return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
    s4() + '-' + s4() + s4() + s4();
}

在解决方案2中,我看到了guid的长度是32个字符,但不理解为什么要用math.random乘以具体的"16",此时附加了一个toString(16),但没有".substring(x)"。

解决方案2:

1
2
3
4
5
6
7
8
9
10
11
function generateGuid() {
  var result, i, j;
  result = '';
  for(j=0; j<32; j++) {
    if( j == 8 || j == 12|| j == 16|| j == 20)
      result = result + '-';
    i = Math.floor(Math.random()*16).toString(16).toUpperCase();
    result = result + i;
  }
  return result;
}

不需要解释guid的结构,连字符也是xd

感谢所有详细的解释!


在第二种情况下,math.random()将生成一个介于0(含)到1(不含)之间的数字。现在,如果我想要一个小于16的数字,用[0,1]中的值乘以16,我就可以完成这个任务了,toString(16)将它转换成以16为基数的数字。我们总共加了32个这样的数字

第一个示例生成一个介于(1.0,2.0)之间的数字,并用(10^4)将其乘以16。现在我们有一个范围(10000,20000)为16的数字。

取最后4个数字就足够了,所以我们从中取下相关的子串。我想是这样的

1
2
Math.floor((Math.random()) * 0x10000)
  .toString(16)

也足以解决这个问题,因为我们需要一个4位的六位数