密码强度的实现
密码强度
原理
使用字符串,函数与运算符.
一般密码会有数字,字母(大小写),特殊符号四种类型.
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的博客!