|
本帖最后由 pidtfork 于 2020-10-28 18:29 编辑
生成随机字符串
编程中在一些协议或者生成ID时需要用到随机值和字符串,JavaScript中随机就必须用到Math.random方法,这是一个原生的方法,random() 方法可返回介于 0 ~ 1 之间的一个随机数。
当然这是一个伪随机数,它是基于时钟生成的数据,但是由于可以精确到小数点后16位,所以在非特殊情况下,这个方法完全满足我们的要求了。
简单的数字随机数
- function randomStr(){
- varstr = ""+Math.random(); //"0.8183580687639245"
- str = "1234567891234567" + str.slice(2);//"12345678912345678183580687639245"
- returnstr.slice(-16); //"8183580687639245"
- }
复制代码
原理就是将Math.random()生成的随机数转为字符串,然后截取最后16位数字返回;
前面要拼接字符串"1234567891234567"主要作用是,如果随机数返回 0.5、0.6,0.125这样不够小数点后16的数字时,返回的值直接是这个数值的字符串了,所以先拼接一个字符串保证长度。
简单字符随机数
- function randomStr(){
- varstr = Math.random().toString(36); //"0.mrzm39zcq7s"
- str = "12345678" + str.slice(2); //12345678mrzm39zcq7s
- returnstr.slice(-8); //"m39zcq7s"
- }
- //对randomStr方法进行 100万次随机值重复测试
- varobj = {};
- for(vari = 0; i < 1000000;i++){
- varkey = randomStr() ;
- if(key in obj) {
- throw "random String same!!!!"
- }else{
- obj[key] = i;
- }
- }
复制代码
原理和数字随机数一样,只是将原本十进制的值转成了36进制,26个字母加0~9共36个字符,返回8位随机字符串,所以随机性和上面是一样的。
在对100万次连续产生的随机值的重复测试中,偶尔会有重复的情况,所有使用中可以通过使用两次或者多次randomStr方法来加强字符串的随机性;
指定字符集的随机字符串
- function randomString(len, char) {
- varlength = len || 16;
- varchars = char || "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
- varresult = '';
- for(vari =length; i > 0; --i)result += chars[Math.floor(Math.random() * chars.length)];
- returnresult;
- }
- randomString(); //pWYreBd6AIvBkZHm
- randomString(32); //S674TMaeJlgFR2wbsjdOPcF5lwac1rbO
- randomString(8,"!@#$%^&*()"); //()!*%^)*
- randomString(8,"1234567890") //04237935
复制代码
根据上面的方法改进一下,可以指定随机字符串的长度,还可以指定随机字符串的字符集
|
|