前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS 生成随机字符串

JS 生成随机字符串

作者头像
4O4
发布2022-04-25 17:00:36
6.9K0
发布2022-04-25 17:00:36
举报
文章被收录于专栏:404

JS 生成随机字符串

方法一

代码语言:javascript
复制
Math.random().toString(36).slice(-8)
代码语言:javascript
复制
Math.random()                           // 生成随机数字, eg: 0.123456
             .toString(36)              // 转化成36进制 : "0.4fzyo82mvyr"
                          .slice(-8);   // 截取最后八位 : "yo82mvyr"

36进制包含的字符为 0-9,a-z。

10进制包含的字符为为 0-9。

16进制包含的字符为 0-9,a-f。

缺点:

  • 只能生成有 0-9、a-z字符组成的字符串
  • 由于 Math.random()生成的18位小数,可能无法填充36位,最后几个字符串,只能在指定的几个字符中选择。导致随机性降低。
  • 某些情况下会返回空值。例如,当随机数为 0, 0.5, 0.25, 0.125...时,返回为空值。

方法二

可指定字符集

代码语言:javascript
复制
function randomString(length, chars) {
    var result = '';
    for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
    return result;
}
var rString = randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');

方法三

在NodeJS中,使用 crypto生成

代码语言:javascript
复制
'use strict';
const crypto = require('crypto');
module.exports = len => {
        // isFinite 判断是否为有限数值
    if (!Number.isFinite(len)) {
        throw new TypeError('Expected a finite number');
    }
    return crypto.randomBytes(Math.ceil(len / 2)).toString('hex').slice(0, len);
};

crypto.randomBytes(size[, callback])

作用:生成加密强伪随机数据. size参数是指示要生成的字节数的数值。

crypto.randomBytes生成的是字节数。

因此,若 size为1(1个字节8位),则最后转化成16进制(4位)时,为2个字符。

总结

第一种方法代码精简,可以快速获取随机字符串,但是存在较多缺点,不建议在生产中使用。对于对字符集有特定要求的场景,可以使用第二种方法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JS 生成随机字符串
    • 方法一
      • 方法二
        • 方法三
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档