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になります。これが指定された文字列長分だけ繰り返されます。