0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

JavaScriptで任意の長さのランダム文字列を生成する方法

Posted at

0-9,a-z,A-Zを用いて任意の長さのランダム文字列を生成したい。
JavaScriptはイケてる書き方ができますが、ここではだれでもわかるソースコードを提示します。
#ソースコード

準備用コード
function getRandomInt(max) {
  return Math.floor(Math.random() * max);
}

let candidateCharactor=new Array();//利用文字の一覧となる変数
  
for(let i=48;i<=57;i++){
  candidateCharactor.push(i);//0-9を配列に追加
}
for(let i=65;i<=90;i++){
  candidateCharactor.push(i);//A-Zを配列に追加
}
for(let i=97;i<=122;i++){
  candidateCharactor.push(i);//a-zを配列に追加
}
文字列生成関数
function randomStringGenerator(length){
  let randomString="";
  for(i=1;i<=length;i++){
    randomString+=String.fromCharCode(candidateCharactor[getRandomInt(candidateCharactor.length)]);
    //getRandomIntにより、0-61の中からランダムな数字になります。
  }
  return randomString;
}

#解説
今回の肝は「fromCharCode関数」です。

実引数(数値)から、UTF-16文字を返します。
このプログラムでは、0-9,a-z,A-Zを表すコードを配列にまとめます。
それから添え字をランダムに生成し、その要素を取得するプログラムです。

##利用文字一覧の生成

let candidateCharactor=new Array();
for(let i=48;i<=57;i++){
  candidateCharactor.push(i);
}
for(let i=65;i<=90;i++){
  candidateCharactor.push(i);
}
for(let i=97;i<=122;i++){
  candidateCharactor.push(i);
}

cadidateCharactorは利用文字の一覧になる配列(Array)です。
それに対して、Arrayクラスのpushメソッドを使って、次々と末尾に要素を追加していきます。

candidateCharactor=["0","1" ... "9" ... "A" ... "Z" ... "a" ... "z"]

上記のような書き方でも結果は変わりません。
ただ、ほかの文字をランダム生成文字列に使いたい場合、A-Zは生成文字列に使わなくなった場合などのことを考慮したため、プログラム実行時に毎回一覧を生成するようにしました。

##文字列生成

文字列生成関数
function randomStringGenerator(length){
  let randomString="";
  for(i=1;i<=length;i++){
    randomString+=String.fromCharCode(candidateCharactor[getRandomInt(candidateCharactor.length)]);
    //getRandomIntにより、0-61の中からランダムな数字になります。
  }
  return randomString;
}

引数に生成する文字列長を指定すると、その長さのランダム文字列が生成される関数です。
以下の部分が少しわかりづらいかもしれませんので、少しかみ砕きます。

randomString+=String.fromCharCode(candidateCharactor[getRandomInt(candidateCharactor.length)]);

getRandomInt関数は、以下のページに記載の関数です。

簡単に言えば、0~[実引数-1]までの値を生成します。ここでは、3が生成されたとしましょう。

randomString+=String.fromCharCode(candidateCharactor[3]);

candidateCharactor[3]は51です。

randomString+=String.fromCharCode(51);

この場合右式は、3になります。
randomStringの一文字目は3になります。これが指定された文字列長分だけ繰り返されます。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?