首页 > JavaScript > 使用 JavaScript 在一个由从集合中随机挑选的字符组成的 5 个字符的字符串。[a-zA-Z0-9]

使用 JavaScript 在一个由从集合中随机挑选的字符组成的 5 个字符的字符串。[a-zA-Z0-9]

上一篇 下一篇

我想要一个由从集合中随机挑选的字符组成的 5 个字符的字符串。[a-zA-Z0-9]

使用 JavaScript 做到这一点的最佳方法是什么?

分割线

网友回答:

//Can change 7 to 2 for longer results.
let r = (Math.random() + 1).toString(36).substring(7);
console.log("random", r);

注意:上述算法具有以下弱点:

  • 它将生成 0 到 6 个字符之间的任何字符,因为在字符串化浮点时会删除尾随零。
  • 它在很大程度上依赖于用于串化浮点数的算法,这非常复杂。(请参阅论文“如何准确打印浮点数”。
  • Math.random()可能会产生可预测的(“随机外观”但不是真正的随机)输出,具体取决于实现。生成的字符串不适合在需要保证唯一性或不可预测性时。
  • 即使它生成了 6 个均匀随机、不可预测的字符,由于生日悖论,您也可以期望在仅生成大约 50,000 个字符串后看到重复。(sqrt(36^6) = 46656)

分割线

网友回答:

我认为这将对您有用:

function makeid(length) {
    let result = '';
    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    const charactersLength = characters.length;
    let counter = 0;
    while (counter < length) {
      result += characters.charAt(Math.floor(Math.random() * charactersLength));
      counter += 1;
    }
    return result;
}

console.log(makeid(5));

分割线

网友回答:

Math.random对这种事情不利

服务器端

使用节点加密模块 –

var crypto = require("crypto");
var id = crypto.randomBytes(20).toString('hex');

// "bb5dc8842ca31d4603d6aa11448d1654"

生成的字符串将是生成的随机字节的两倍;编码为十六进制的每个字节为 2 个字符。20 字节将是 40 个字符的十六进制。


客户端

使用浏览器的加密模块 crypto.getRandomValues –

该方法允许您获得加密强度高的随机值。作为参数给出的数组由随机数填充(在其加密意义上是随机的)。crypto.getRandomValues()

// dec2hex :: Integer -> String
// i.e. 0-255 -> '00'-'ff'
function dec2hex (dec) {
  return dec.toString(16).padStart(2, "0")
}

// generateId :: Integer -> String
function generateId (len) {
  var arr = new Uint8Array((len || 40) / 2)
  window.crypto.getRandomValues(arr)
  return Array.from(arr, dec2hex).join('')
}

console.log(generateId())
// "82defcf324571e70b0521d79cce2bf3fffccd69"

console.log(generateId(20))
// "c1a050a4cd1556948d41"

分步控制台示例 –

> var arr = new Uint8Array(4) # make array of 4 bytes (values 0-255)
> arr
Uint8Array(4) [ 0, 0, 0, 0 ]

> window.crypto
Crypto { subtle: SubtleCrypto }

> window.crypto.getRandomValues()
TypeError: Crypto.getRandomValues requires at least 1 argument, but only 0 were passed

> window.crypto.getRandomValues(arr)
Uint8Array(4) [ 235, 229, 94, 228 ]

对于 IE11 支持,您可以使用 –

(window.crypto || window.msCrypto).getRandomValues(arr)

有关浏览器覆盖范围,请参阅 https://caniuse.com/#feat=getrandomvalues


客户端(旧浏览器)

如果您必须支持旧浏览器,请考虑以下内容 –uuid

const uuid = require("uuid");
const id = uuid.v4();

// "110ec58a-a0f2-4ac4-8393-c866d813b8d1"

模板简介:该模板名称为【使用 JavaScript 在一个由从集合中随机挑选的字符组成的 5 个字符的字符串。[a-zA-Z0-9]】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 317次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-12
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信文章 html5 单页式简历模板 微信模板 企业网站 响应式 自适应 微信公众平台 微信素材 微信图片
您可能会喜欢的其他模板