1. ホーム
  2. ジャバスクリプト

[解決済み】JavaScriptで英数字のランダムな文字列?

2022-04-04 14:28:40

質問

JavaScriptでランダムな英数字(大文字、小文字、数字)の文字列を生成して、おそらくユニークな識別子として使用する最短の方法は(無理のない範囲で)何でしょうか?

どのように解決するのですか?

特定の文字だけを許可したい場合は、このようにすることもできます。

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);
}