Javascriptで大文字、小文字、数字、記号を1つ以上含むランダム文字列を生成
指定した文字数でそれぞれを1つ以上含む、ピュアJavascriptで書かれたランダム文字生成コードはネット上にもなさそうだったので作ってみました。
Javascriptで大文字、小文字、数字、記号を1つ以上含むランダムな文字列を生成するコード例は下記です。
function getRandomStr(){
const LENGTH = 8 //生成したい文字列の長さ
const SOURCE = [
'abcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'0123456789',
'!#$%&=~/*-+',
]
let OFFSET = SOURCE.length-1
let randomConfig = [] //ランダム設定配列
let sum = 0
let result = ''
//どのSOURCEを何文字含むかをランダムで設定
for(let i=0; i<=OFFSET; i++){
let includeNum = (i === OFFSET)
? LENGTH - sum
: 1 + Math.floor(Math.random() * (LENGTH - OFFSET - sum - i + 2))
randomConfig.push({
src: SOURCE[i], //元になるSOURCE
includeNum: includeNum, //含む回数
count: 0 //含まれた回数
})
sum += includeNum
}
//指定した長さのランダムな文字列を生成
for(let i=0; i<LENGTH; i++){
let index = 1 + Math.floor(Math.random() * randomConfig.length-1)
let randomSource = randomConfig[index]
//ランダムなSOURCEから文字を選んで結合
result += randomSource.src[Math.floor(Math.random() * randomSource.src.length)]
randomSource.count++
//countとincludeNumが一致したらrandomConfig配列から削除
if(randomSource.count === randomSource.includeNum){
randomConfig.splice(index, 1)
}
}
return result //4+iW&%2I
}
かなり長いコードになってしまいましたが、コピペで呼び出してもらえれば動くかと思います。
ランダム文字列生成コードの仕様
生成された文字列には、「大文字、小文字、数字、記号」がそれぞれ1つ以上含まれることが保証されています。それぞれが何個含まれるかはランダムで決まります。
また、それぞれの文字がどの位置に出現するかもランダムですので、パスワードなどのちょっと複雑な文字列を生成したい場合に参考になるかと思います。
生成する文字数は下記部分で変更できます。
const LENGTH = 8 //生成したい文字列の長さ
「数字と記号のみ」などソース文字を変更
例えば「数字と記号のみ」の文字列を生成したい場合、コードの下記部分をコメントアウトしてください。
const SOURCE = [ // 'abcdefghijklmnopqrstuvwxyz', // 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', '0123456789', '!#$%&=~/*-+', ]
英数字のみ、英字と記号のみなどの場合も同じようにして生成可能です。
ランダム文字列生成コードの補足説明
randomConfig配列にそれぞれのソース文字を何個含むかをランダムで決定し、保存しています。
ランダム文字列生成部分では、randomConfig配列からこれまたランダムで結合するソース文字を選択し、結合していきます。randomConfig要素のincludeNumとcountが一致した時点でそのソース文字を配列から削除し、それ以降使われないようにしています。
もっと短いコードで単純な文字列でいい場合は、下記記事を参照してください。

【Javascript】ランダムな文字列を指定した長さで生成(英数字)
Javascriptでランダムな文字列を生成 javascriptでランダムな文字列を生成するコード例は下記です。 function getRandomStr(){ const LENGTH = 8 //生成したい文字列の長さ const ...
コメント