在JavaScript中生成随机字符串/字符

我想要一个由字符串[a-zA-Z0-9]随机选取的5个字符的字符串。

用JavaScript做这件事的最好方法是什么?


我认为这会对你有用:

function makeid() {
  var text = "";
  var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

  for (var i = 0; i < 5; i++)
    text += possible.charAt(Math.floor(Math.random() * possible.length));

  return text;
}

console.log(makeid());

Math.random().toString(36).substring(7);

Math.random对这种事情不好

选项1

如果你能够做到这一点的服务器端,只需使用加密模块

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

// "bb5dc8842ca31d4603d6aa11448d1654"

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


选项2

如果你必须做这个客户端,也许试试uuid模块

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

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

选项3

如果你必须做这个客户端,你不必支持旧的浏览器,你可以不依赖于它

// dec2hex :: Integer -> String
function dec2hex (dec) {
  return ('0' + dec.toString(16)).substr(-2)
}

// 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"
链接地址: http://www.djcxy.com/p/2917.html

上一篇: Generate random string/characters in JavaScript

下一篇: How do I convert a string into an integer in JavaScript?