<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>