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

时间:2017-08-13 15:07:18

标签: javascript guid

我正在尝试为8个字符编写JavaScript GUID生成器,包括小写/大写字母,数字和符号。我找到了这些解决方案,但需要解释每个解决方案。最初我以为我需要一个包含所有字母/数字/符号的字符串,我会使用随机数函数来构建一个新的GUID,但这些解决方案似乎是凭空创建数字/字母/符号。

在解决方案1中,“1+”和“0x10000”的目的是什么? “.toString(16)”和“.substring(1)”的目的是什么?如何用这么少的代码生成数字/符号/ AND字母?

解决方案1:

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:

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

感谢任何和所有详细解释!

1 个答案:

答案 0 :(得分:1)

在第二种情况下,Math.random()会生成一个介于0(含)到1(不包括)之间的数字。
现在,如果我想要一个应该&lt; 16,将16与[0,1]中的值相乘应该为我做的工作,toString(16)将它转换为16的数字。我们总共添加32个这样的数字

第一个例子生成一个介于(1.0,2.0)之间的数字,并将其与(10 ^ 4)相乘到基数16.现在我们有一个数字在范围(10000,20000)基数16.
< / p>

取最后4位数就足够了,所以我们从中取出相关的子串。
我认为就是这种情况

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

也足以满足该解决方案,因为我们需要一个4位数的六进制数