javascript - 在Javascript中,如何生成 32位随机令牌?

  显示原文与译文双语对照的内容

我需要在JavaScript中生成一个精确的32位随机字母数字字符串。
有什么直接功能可以做?

时间: 原作者:

使用 crypto类型的array


function random32bit() {


 let u = new Uint32Array(1);


 window.crypto.getRandomValues(u);


 let str = u[0].toString(16).toUpperCase();


 return '00000000'.slice(str.length) + str;


}



这给我们一个 32位 加密随机数,表示为 8个字符的零填充字符串( 基本 16 )

如果你想把它扩展到任意数量的字符,


function randomHash(nChar) {


 let nBytes = Math.ceil(nChar = (+nChar || 8)/2);


 let u = new Uint8Array(nBytes);


 window.crypto.getRandomValues(u);


 let zpad = str => '00'.slice(str.length) + str;


 let a = Array.prototype.map.call(u, x => zpad(x.toString(16)));


 let str = a.join('').toUpperCase();


 if (nChar % 2) str = str.slice(1);


 return str;


}



在ES5中,带有注释


function randomHash(nChar) {


//convert number of characters to number of bytes


 var nBytes = Math.ceil(nChar = (+nChar || 8)/2);



//create a typed array of that many bytes


 var u = new Uint8Array(nBytes);



//populate it wit crypto-random values


 window.crypto.getRandomValues(u);



//convert it to an Array of Strings (e.g."01","AF",.. )


 var zpad = function (str) {


 return '00'.slice(str.length) + str


 };


 var a = Array.prototype.map.call(u, function (x) {


 return zpad(x.toString(16))


 });



//Array of String to String


 var str = a.join('').toUpperCase();


//and snip off the excess digit if we want an odd number


 if (nChar % 2) str = str.slice(1);



//return what we made


 return str;


}



原作者:

你可以使用这里函数:


function returnHash(){


 abc ="abcdefghijklmnopqrstuvwxyz1234567890".split("");


 var token=""; 


 for(i=0;i<32;i++){


 token += abc[Math.floor(Math.random()*abc.length)];


 }


 return token;//Will return a 32 bit"hash"


}



通过调用 returnHash() 来使用

我需要在JavaScript中生成一个精确的32位随机字母数字字符串。

如果你是 32个字符,你可以使用 URL.createObjectURLString.prototype.slice()String.prototype.replace()


var rand = URL.createObjectURL(new Blob([])).slice(-36).replace(/-/g,"")



原作者:
...