密码强度的实现
密码强度
原理
使用字符串,函数与运算符.
一般密码会有数字,字母(大小写),特殊符号四种类型.
1:密码中只包含一种类型;
2:密码中包含两种类型;
3:密码中包含三种类型;
4:密码中包含所以类型.
用以下形式表示四种字符的类型.
| 字符类型 | 二进制数字 | ASCII | 
|---|---|---|
| 数字 | 0001 | 48~57 | 
| 小写字母 | 0010 | 97~122 | 
| 大写字母 | 0100 | 65~90 | 
| 特殊字符 | 1000 | ohter | 
例子:
| 字符类型 | 二进制数字 | 十进制 | 
|---|---|---|
| 1234 | 0001/0001/0001/0001 | 0001->1 | 
| abcd | 0010/0010/0010/0010 | 0010->2 | 
| ABCD | 0100/0100/0100/0100 | 0100->4 | 
| !@#$ | 1000/1000/1000/1000 | 1000->8 | 
| Aa1! | 0100/0010/0001/1000 | 1111->15 | 
即:把密码变成4位二进制数,1的个数越多,密码强度越大.
把二进数转换为强度
每次与1做”位于”(&1)运算,假如为真,则强度+1(level++),否则不变,每循环一次,位移(>>>)操作一次.
如:Abcd1234!:1111
- 1111 & 1;level=1;右移一位,得0111;
 - 0111 & 1;level=2;右移一位,得0011;
 - 0011 & 1;level=3;右移一位,得0001;
 - 0001 & 1;level=4;
 
所以密码强度为4.
使用jQuery实现代码
<script>
    var $password = $('#password');
    var $span = $('span');
    $password.on('keyup',()=>{
        let password = $password.val();
        checkLevel(password);
    })
    function Chartype(num){//检测字符串类型
        if(num >= 48 && num <= 57){//数字
            return 1;
        }else if(num >= 97 && num <= 122){//小写字母
            return 2;
        }else if(num >= 65 && num <= 90){//大写字母
            return 4;
        }else{//符号
            return 8;
        }
    }
    function checkLevel(str){//检测密码强度
        let check = 0;
        let level = 0;
        for(let i = 0;i<str.length;i++){
            check |= Chartype(str.charCodeAt(i));
        }
        for(var i = 0;i <= 4;i++){
            if(check & 1){//每次循环位于运算
                level++;
            }
            check = check >>> 1;//运算结束后右移一位
        }
        if(str.length >= 8){//当密码大于8执行
            selectLevel(level);
        }else{//小于8清空
            level = 0;
            $span.removeClass('active');
        }
    }
    function selectLevel(level){//根据密码强度切换类
            switch(level){
                case 1:
                    $span.removeClass('active');
                    $('.first').addClass('active');
                    break;
                case 2:
                    $span.removeClass('active');
                    $('.second').addClass('active');
                    break;
                case 3:
                    $span.removeClass('active');
                    $('.thrid').addClass('active');
                    break;  
                case 4:
                    $span.removeClass('active');
                    $('.fourth').addClass('active');
                    break;  
            }
    }
</script>
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 Roxas Deng的博客!