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