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

Javascript GUID(全局唯一标识符)生成器说明,javascript,guid,Javascript,Guid,我正在尝试为8个字符编写一个JavaScript GUID生成器,包括小写/大写字母、数字和符号。我找到了这些解决方案,但需要对每种解决方案中发生的情况进行解释。最初我认为我需要一个字符串来保存所有字母/数字/符号,我将使用随机数函数索引这些字母/数字/符号以构建新的GUID,但这些解决方案似乎是凭空创建数字/字母/符号 在解决方案1中,“1+”和“0x10000”的用途是什么?“.toString(16)”和“.substring(1)”的用途是什么?它是如何用一点点代码生成数字/符号/和字母

我正在尝试为8个字符编写一个JavaScript GUID生成器,包括小写/大写字母、数字和符号。我找到了这些解决方案,但需要对每种解决方案中发生的情况进行解释。最初我认为我需要一个字符串来保存所有字母/数字/符号,我将使用随机数函数索引这些字母/数字/符号以构建新的GUID,但这些解决方案似乎是凭空创建数字/字母/符号

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

解决方案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;
}
函数generateGuid(){
var结果i,j;
结果='';

for(j=0;j在第二种情况下,Math.random()将生成一个介于0(包括)到1(排除)之间的数字。
现在,如果我想要一个小于16的数字,用[0,1]中的值乘以16应该可以完成这项工作,toString(16)将其转换为基数为16的数字。我们总共添加32个这样的数字

第一个示例生成一个介于(1.0,2.0)之间的数字,并将其与(10^4)相乘至基数16。现在我们有一个介于(10000,20000)基数16之间的数字。

取最后4位数字就足够了,因此我们从中取下相关的子字符串。
我想是这样的

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

也可以满足该解决方案,因为在第二种情况下,我们需要一个4位数的十六进制数。Math.random()将生成一个介于0(包括)到1(排除)之间的数。
现在,如果我想要一个小于16的数字,用[0,1]中的值乘以16应该可以完成这项工作,toString(16)将其转换为基数为16的数字。我们总共添加32个这样的数字

第一个示例生成一个介于(1.0,2.0)之间的数字,并将其与(10^4)相乘至基数16。现在我们有一个介于(10000,20000)基数16之间的数字。

取最后4位数字就足够了,因此我们从中取下相关的子字符串。
我想是这样的

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

也可以满足这个解决方案,因为我们需要一个4位数的十六进制数,不确定它是否重要,但这不是GUID。这只是伪随机字符序列不确定它是否重要,但这不是GUID。这只是伪随机字符序列