在 JavaScript 中创建 GUID / UUID?
毕业设计
1
我正在尝试在 JavaScript 中创建全局唯一标识符。我不确定所有浏览器上都有哪些例程,内置随机数生成器的“随机性”和播种程度等。
GUID / UUID 应至少为 32 个字符,并且应保持在 ASCII 范围内,以避免在传递它们时出现问题。
-
generateGUID = (typeof(window.crypto) != 'undefined' && typeof(window.crypto.getRandomValues) != 'undefined') ? function() { // If we have a cryptographically secure PRNG, use that // https://stackoverflow.com/questions/6906916/collisions-when-generating-uuids-in-javascript var buf = new Uint16Array(8); window.crypto.getRandomValues(buf); var S4 = function(num) { var ret = num.toString(16); while(ret.length < 4){ ret = "0"+ret; } return ret; }; return (S4(buf[0])+S4(buf[1])+"-"+S4(buf[2])+"-"+S4(buf[3])+"-"+S4(buf[4])+"-"+S4(buf[5])+S4(buf[6])+S4(buf[7])); } : function() { // Otherwise, just use Math.random // https://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); return v.toString(16); }); }
-
对于那些想要一个符合 rfc4122 版本 4 并考虑速度的解决方案的人(很少调用 Math.random()):
function UUID() { var nbr, randStr = ""; do { randStr += (nbr = Math.random()).toString(16).substr(2); } while (randStr.length < 30); return [ randStr.substr(0, 8), "-", randStr.substr(8, 4), "-4", randStr.substr(12, 3), "-", ((nbr*4|0)+8).toString(16), // [89ab] randStr.substr(15, 3), "-", randStr.substr(18, 12) ].join(""); }
上述函数应该在速度和随机性之间取得不错的平衡。
发表回复