如何在JavaScript中產生隨機的字母數字字串?
P粉775788723
P粉775788723 2023-10-12 23:03:12
0
2
702

在 JavaScript 中產生隨機字母數字(大寫、小寫和數字)字串以用作可能唯一識別碼的最短方法(在合理範圍內)是什麼?

P粉775788723
P粉775788723

全部回覆(2)
P粉312195700

我剛剛發現這是一個非常好的和優雅的解決方案:

Math.random().toString(36).slice(2)

此實作的註解:

  • 這將產生長度介於 0 到 12 個字符之間的字串,通常為 11 個字符,因為浮點字串化會刪除尾隨零。
  • 它不會產生大寫字母,只會產生小寫字母和數字。
  • 由於隨機性來自 Math.random(),因此輸出可能是可預測的,因此不一定是唯一的。
  • 即使假設實現理想,輸出也最多具有 52 位元熵,這表示在產生大約 70M 字串後,您可能會出現重複項。
P粉985686557

如果您只想允許特定字符,您也可以這樣做:

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);
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!