今日は朝から蒸し暑さを感じます。あの一週間も続いた雨はどこに行ってしまったのでしょうか?東京では立て続けに悲惨な事件が起きています、報道することにより模倣犯を増やしているような気がします。
さて、今日はパスコード(パスワード)をランダムで生成するコードをJavaScriptで書いてみました。パスコードの強度はそれ程、高くないかもしれませんが一応、パスコードを生成する事が出来ます。ソースコードを書いていてうっかりミスをしてしまいまして、無限ループを発生させてバグ取りに5分ぐらい費やしました。ループした原因は違う変数を判断文で使っていたという初歩的なミスです。この頃はそういうミスは稀ですが・・・その結果、無限ループに陥っていました。
パスコードというものを作ってみて案外簡単に作れるものだと実感。これを作る前にパスコードメーカーを作成するという動画を見ました。githubにソースコードも記載していましたので考え方は参考にしましたがコードは違うと思います。たにぐちさんの動画はvue.jsを使用してパスコードを作っているのに対して、自分はネイティブjsでパスコードを生成しているという違いがあります。
https://zip358.com/tool/PassCode/
document.getElementById("btn1").addEventListener("click", () => {
const mode = {
mode0: !document.getElementById("mode0").value ? 8 : document.getElementById("mode0").value,
mode1: document.getElementById("mode1").checked ? true : false,
mode2: document.getElementById("mode2").checked ? true : false,
mode3: document.getElementById("mode3").checked ? true : false,
mode4: document.getElementById("mode4").checked ? true : false
};
const data = {
txt_cnt: mode.mode0,
txt1: mode.mode1 ? "0123456789" : "",
txt2: mode.mode2 ? "ABCDEFGHIJKLMNOPQRSTUVWXYZ" : "",
txt3: mode.mode3 ? "abcdefghijklmnopqrstuvwxyz" : "",
txt4: mode.mode4 ? "#$&*@+-" : "",
};
// console.log(mode,data);
let str = "";
if (mode.mode1 || mode.mode2 || mode.mode3 || mode.mode4) {
let txt_str = data.txt1 + data.txt2 + data.txt3 + data.txt4;
do {
str = "";
for (let i = 1; i <= data.txt_cnt; i++) {
str = str + txt_str.substr((getRandomInt(txt_str.length) - 1), 1);
}
} while ((() => {
let flg = [];
flg[0] = mode.mode1 ? /[0-9]/.test(str) : true;
flg[1] = mode.mode2 ? /[A-Z]/.test(str) : true;
flg[2] = mode.mode3 ? /[a-z]/.test(str) : true;
flg[3] = mode.mode4 ? /[#|$|&|*|@|+|\-]/.test(str) : true;
return (() => {
let f = true;
for (const key in flg) {
if (!flg[key]) {
f = false;
}
}
return f;
})();
return false;
})() === false);
document.getElementById("view").value = str;
} else {
alert("どれかを選択してください");
}
});
function getRandomInt(max) {
return Math.floor(Math.random() * max);
}