UBAINS

 找回密码
 立即注册
搜索
热搜: UBAINS
查看: 2164|回复: 0

[学习笔记] 生成随机字符串

[复制链接]

10

主题

11

帖子

447

积分

版主

Rank: 7Rank: 7Rank: 7

积分
447
QQ
发表于 2020-10-28 18:28:21 | 显示全部楼层 |阅读模式
本帖最后由 pidtfork 于 2020-10-28 18:29 编辑

生成随机字符串


编程中在一些协议或者生成ID时需要用到随机值和字符串,JavaScript中随机就必须用到Math.random方法,这是一个原生的方法,random() 方法可返回介于 0 ~ 1 之间的一个随机数。

当然这是一个伪随机数,它是基于时钟生成的数据,但是由于可以精确到小数点后16位,所以在非特殊情况下,这个方法完全满足我们的要求了。


简单的数字随机数

  1. function randomStr(){
  2.     varstr = ""+Math.random(); //"0.8183580687639245"
  3.     str = "1234567891234567" + str.slice(2);//"12345678912345678183580687639245"
  4.     returnstr.slice(-16);      //"8183580687639245"
  5. }
复制代码




原理就是将Math.random()生成的随机数转为字符串,然后截取最后16位数字返回;

前面要拼接字符串"1234567891234567"主要作用是,如果随机数返回 0.5、0.6,0.125这样不够小数点后16的数字时,返回的值直接是这个数值的字符串了,所以先拼接一个字符串保证长度。


简单字符随机数

  1. function randomStr(){
  2.     varstr = Math.random().toString(36); //"0.mrzm39zcq7s"
  3.     str =  "12345678" + str.slice(2); //12345678mrzm39zcq7s
  4.     returnstr.slice(-8);       //"m39zcq7s"
  5. }
  6. //对randomStr方法进行 100万次随机值重复测试
  7. varobj = {};
  8. for(vari = 0; i < 1000000;i++){
  9.     varkey = randomStr() ;
  10.     if(key in obj) {
  11.         throw "random String same!!!!"
  12.     }else{
  13.        obj[key] = i;
  14.     }
  15. }
复制代码




原理和数字随机数一样,只是将原本十进制的值转成了36进制,26个字母加0~9共36个字符,返回8位随机字符串,所以随机性和上面是一样的。

在对100万次连续产生的随机值的重复测试中,偶尔会有重复的情况,所有使用中可以通过使用两次或者多次randomStr方法来加强字符串的随机性;


指定字符集的随机字符串

  1. function randomString(len, char) {
  2.     varlength = len || 16;
  3.     varchars = char || "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  4.     varresult = '';
  5.     for(vari =length; i > 0; --i)result += chars[Math.floor(Math.random() * chars.length)];
  6.     returnresult;
  7. }
  8. randomString();     //pWYreBd6AIvBkZHm
  9. randomString(32);   //S674TMaeJlgFR2wbsjdOPcF5lwac1rbO
  10. randomString(8,"!@#$%^&*()");   //()!*%^)*
  11. randomString(8,"1234567890")   //04237935
复制代码



根据上面的方法改进一下,可以指定随机字符串的长度,还可以指定随机字符串的字符集



高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

Archiver|手机版|小黑屋|BBS.UBAINSYUN.COM

GMT+8, 2024-4-26 17:40 , Processed in 0.035191 second(s), 19 queries .

Powered by UBAINS! X3.4

© 2001-2017 UBAINS Inc.

快速回复 返回顶部 返回列表