在 JavaScript 中產生隨機字母數字(大寫、小寫和數字)字串以用作可能唯一識別碼的最短方法(在合理範圍內)是什麼?
P粉3121957002023-10-13 12:38:49
我剛剛發現這是一個非常好的和優雅的解決方案:
Math.random().toString(36).slice(2)
此實作的註解:
Math.random()
,因此輸出可能是可預測的,因此不一定是唯一的。 P粉9856865572023-10-13 09:56:40
如果您只想允許特定字符,您也可以這樣做:
function randomString(length, chars) { var result = ''; for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)]; return result; } var rString = randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
這裡有一個 jsfiddle 來示範:http://jsfiddle.net/wSQBx/
另一種方法是使用一個特殊的字串來告訴函數要使用什麼類型的字元。你可以這樣做:
function randomString(length, chars) { var mask = ''; if (chars.indexOf('a') > -1) mask += 'abcdefghijklmnopqrstuvwxyz'; if (chars.indexOf('A') > -1) mask += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; if (chars.indexOf('#') > -1) mask += '0123456789'; if (chars.indexOf('!') > -1) mask += '~`!@#$%^&*()_+-={}[]:";\'<>?,./|\'; var result = ''; for (var i = length; i > 0; --i) result += mask[Math.floor(Math.random() * mask.length)]; return result; } console.log(randomString(16, 'aA')); console.log(randomString(32, '#aA')); console.log(randomString(64, '#A!'));
小提琴:http://jsfiddle.net/wSQBx/2/
#或者,若要使用如下所述的 base36 方法,您可以執行下列操作:
function randomString(length) { return Math.round((Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))).toString(36).slice(1); }