Javascript GUID(全球唯一标识符)生成器说明
Javascript GUID (Global Unique Identifier) Generator Explanation
我正在尝试为 8 个字符(包括小写/大写字母、数字和符号)编写一个 JavaScript GUID 生成器。我找到了这些解决方案,但需要对每个解决方案中发生的事情进行解释。最初我认为我需要一个包含所有 letters/numbers/symbols 的字符串,我将使用随机数函数对其进行索引以构建新的 GUID,但这些解决方案似乎凭空创建 numbers/letters/symbols。
方案一中,“1+”和“0x10000”的作用是什么? “.toString(16)”和“.substring(1)”的目的是什么?它是如何用那一点点代码生成 numbers/symbols/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
感谢任何和所有详细解释!
在第二种情况下,Math.random() 会生成一个介于 0(含)到 1(不含)之间的数字。
现在,如果我想要一个应该小于 16 的数字,将 16 乘以 [0, 1) 中的值应该为我完成这项工作,toString(16) 将它转换为以 16 为底的数字。我们总共添加 32 个这样的数字
第一个示例生成一个介于 (1.0, 2.0] 之间的数字,并将其与 (10^4) 相乘,以 16 为底数。现在我们有一个范围 (10000, 20000] 以 16 为底数的数字。
取最后 4 位数字对我们来说应该足够了,所以我们从中取出相关的子字符串。
既然如此我觉得
Math.floor((Math.random()) * 0x10000)
.toString(16)
也可以满足该解决方案,因为我们需要一个 4 位十六进制数
我正在尝试为 8 个字符(包括小写/大写字母、数字和符号)编写一个 JavaScript GUID 生成器。我找到了这些解决方案,但需要对每个解决方案中发生的事情进行解释。最初我认为我需要一个包含所有 letters/numbers/symbols 的字符串,我将使用随机数函数对其进行索引以构建新的 GUID,但这些解决方案似乎凭空创建 numbers/letters/symbols。
方案一中,“1+”和“0x10000”的作用是什么? “.toString(16)”和“.substring(1)”的目的是什么?它是如何用那一点点代码生成 numbers/symbols/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
感谢任何和所有详细解释!
在第二种情况下,Math.random() 会生成一个介于 0(含)到 1(不含)之间的数字。
现在,如果我想要一个应该小于 16 的数字,将 16 乘以 [0, 1) 中的值应该为我完成这项工作,toString(16) 将它转换为以 16 为底的数字。我们总共添加 32 个这样的数字
第一个示例生成一个介于 (1.0, 2.0] 之间的数字,并将其与 (10^4) 相乘,以 16 为底数。现在我们有一个范围 (10000, 20000] 以 16 为底数的数字。
取最后 4 位数字对我们来说应该足够了,所以我们从中取出相关的子字符串。
既然如此我觉得
Math.floor((Math.random()) * 0x10000)
.toString(16)
也可以满足该解决方案,因为我们需要一个 4 位十六进制数