首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机生成6个字符基36字符串

随机生成6个字符基36字符串
EN

Stack Overflow用户
提问于 2021-07-08 07:22:06
回答 2查看 218关注 0票数 0

我需要产生一个随机的六个字符基数36字符串。

我使用以下两个包,但它并不总是返回这六个字符。

代码语言:javascript
复制
const seed = require('random-seed').create();
const bases = require('bases')
console.log(bases.toBase36(seed(10000000, 99999999)))
EN

回答 2

Stack Overflow用户

发布于 2022-11-09 20:19:38

我试过的最简单的方法是:

代码语言:javascript
复制
randstr = _ => Math.floor(2176782335*Math.random()).toString(36);
randstr();

或者更容易记住:

代码语言:javascript
复制
randstr = _ => Math.floor(parseInt('zzzzzz',36)*Math.random()).toString(36);
randstr();

这是取Base36值zzzzzz;乘以0≤n≤1在000000zzzzzz之间得到一个值;然后转换回Base36。

更广泛地说:

代码语言:javascript
复制
randstr = len => (
  Math.floor(Math.pow(36,len)*Math.random())
      .toString(36)
);
randstr(6);

大约2%的情况下,由于前导零,这些解决方案可能会使字符串比len短。如果这有关系的话:

代码语言:javascript
复制
randstr = len => (
  Math.floor(Math.pow(36,len)*(1+Math.random()))
      .toString(36)
      .slice(-len)
);
randstr(6);

说这些话,虽然做一些奇怪的事情更有趣,比如:

代码语言:javascript
复制
randstr => len => (
  '1234567890qwertyuiopasdfghjklzxcvbnm'
    .repeat(len)
    .split('')
    .sort( _ => Math.random()-.5 )
    .join('')
    .slice(-len)
);
randstr(6);

太慢了。

令人失望的是,忽略数学方法,只使用字符串就更快、更清晰了:

代码语言:javascript
复制
randstr = len => {
  let x = '';
  while (len--)
    x += '1234567890qwertyuiopasdfghjklzxcvbnm'[Math.floor(36*Math.random())];
  return x;
};
randstr(6);
票数 0
EN

Stack Overflow用户

发布于 2021-07-08 07:29:48

您可以使用这样的方法来获取随机字符。

代码语言:javascript
复制
const crypto = require("crypto");
console.log(crypto.randomBytes(36).toString('hex'));

crypto内置于NodeJs中。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68297232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档