<script>
// 封裝一個隨機生成數字的函數
function random(a, b) {
var n = Math.round(Math.random() * (a - b) + b);
return n;
}
//=====================================有漏洞版=============================================
function getCode(){
//定義一個字符串把所有可能都裝進去,全部字母以及數字
var codeStr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
//聲明一個空的字符串,用作裝隨機生成的四個數。
var str = "";
//寫一個循環用來重復隨機生成幾個數,以及將東西一個一個放進上面聲明的空字符串內
for (var i = 0; i < 4; i++) {
var m = random(0,61);
str += codeStr.charAt(m);
}
// 在外面調用函數時,一定要在函數內寫返回值
return str;
}
//調用函數
console.log(getCode());
//====================================更為嚴謹版==============================================
//運行一下上面的代碼我們會發現,字母出現的幾率遠遠大過數字出現的幾率。這是因為codeStr里面的字母有52個,
// 數字卻只有10個,而這樣並不能算是真正的隨機。故我補充了下面的代碼。
//思路:做一個隨機生成數的庫strData,循環四次,每次都會產生大寫字母、小寫字母、數字 各三個,也就是說strData // 里面放了12個數。再在strData庫中隨機(這樣的隨機才是真正的隨機,每種可能的幾率都是相同的)抽取四個數, // 放在新聲明的str里,並且輸出
//封裝一個隨機生成數的庫
function randomStr(){
var strData = "";
//如果覺得12個數太少也可以多放點,將i<4修改即可
for(var i=0;i<4;i++){
var num = random(0,9); //數字
var upper = String.fromCharCode(random(65,90)); //大寫字母
var lower = String.fromCharCode(random(97,122)); //小寫字母
strData = strData+num+upper+lower; //將所有結果放進strData中
}
var str = "";
for (var i = 0; i < 4; i++) {
str += strData[random(0,strData.length-1)]; //在strData里面隨機抽取四個數
}
return str;
}
console.log(randomStr())
</script>