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位的六位数