js-生成随机字符串

// 方法一:
Math.random().toString(36).substring(2, 5)

通过Math.random()生成随机小数[0, 1),使用toString(36)转化为36进制的字符串,substring切割掉前面的0.
存在问题:当为0时会返回空字符串。最多生成10位字符串,而字符串化时会删除尾随零,所以实际字符串长度不定

stackoverflow

// 方法二:
// 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"

只生成16进制的字符串,低版本浏览器不支持

Crypto

function makeid(length) {
   var result           = '';
   var characters       = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
   var charactersLength = characters.length;
   for ( var i = 0; i < length; i++ ) {
      result += characters.charAt(Math.floor(Math.random() * charactersLength));
   }
   return result;
}

console.log(makeid(5));

推荐阅读更多精彩内容