// 方法一:
Math.random().toString(36).substring(2, 5)
通過Math.random()生成隨機小數(shù)[0, 1),使用toString(36)轉(zhuǎn)化為36進制的字符串,substring切割掉前面的0.。
存在問題:當為0時會返回空字符串。最多生成10位字符串,而字符串化時會刪除尾隨零,所以實際字符串長度不定
// 方法二:
// 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進制的字符串,低版本瀏覽器不支持
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));