封装函数制作四位的随机且不重复的验证码

2,556 阅读1分钟

需求

我们的验证码是在a-z,A-Z,0-9这62个数字或者字母中随机选出4个且这四个字母或者数字不重复作为验证码

主要思路

1、 我们需要这62个字母或者数字中随机的四个 ,我们可以利用 Math.random() 这个是取0-1中的随机数 我们需要用随机数0-61作为这62个字符大字符串的随即索引,

2 、但是Math.random()整数小数都会取,所以我们需要用Math.round()这个函数使随机数四舍五入得Math.round(Math.random())

3、 因为我们取的是0-61之间的随机数所以我们需要将这个值*61, 所以得Math.round(Math.random()*61) 这个就是我们所需要的这个大字符串的索引

4、 其次我们需要一个容器来盛装这4个随机的字符 且里边不能有重复的字符串, 这时我们需要使用ofIndex===-1因为当ofIndex===-1时说明这个容器中不存在这个值

封装函数

function fn() {
        var str = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789"
        var s = ''  //s就是盛装这四个随机的容器
        while (s.length < 4) {     //因为我们需要四位的验证码所以使容器的长度=4
            var n = Math.round(Math.random() * 61)  //令n为随机的数 这个数将作为str的索引
            if(s.indexOf(str[n])===-1){
                s += str[n]  //使未重复的项添加到容器中
            }
            
        }
        return s
    }
    

关键点

1、如何获取n-m之间的一个随机整数: Math.round(Math.random()*(m-n)+n 利用Math中round和random获取

2、如何令这个容器中不出现重复s.indexOf(str[n])===-1 当ofIndex===-1时说明这个容器中不存在这个值