验证中...
片段 1 片段 2
PasswordStrength('mima802dd2A3#8@')
原始数据 复制代码
/**
* 密码强度评分
* 2018年4月9日 20:30:22 整理
* author: leo
* @param {[type]} password 密码
* @param {[type]} funCallback 回调
*/
function PasswordStrength(password, funCallback) {
var PassData = String(password || '').split('');
var Score = {
total: 50, // 评价总分数
count: 0, // 总计得分
base: 0, // 基础得分
plus: 0, // 强度加分
minus: 0, // 强度扣分
progress: 0 // 得分百分比
};
if (PassData.length) {
var Cache = []; // 缓存
var BonusPointIndex = 0;
var BonusPoint = [0, 0, 2, 3, 5]; // 加分规则
var SymbolValue = ('~!@#$%^&*(){};,.?/\'_-+="').split('');
var Counter = { // 计数器
UpperCase: 0, // 大写字符
LowerCase: 0, // 小写字符
Number: 0, // 数字
Symbol: 0 // 特殊字符
};
var index = PassData.length - 1; // 密码长度
for (; index >= 0; index -= 1) {
var character = PassData[index];
if (/[a-z]/.test(character)) {
Counter.LowerCase += 1; // 小写字符计数
} else if (/[A-Z]/.test(character)) {
Counter.UpperCase += 1; // 大写字符计数
} else if (/[0-9]/.test(character)) {
Counter.Number += 1; // 数字计数
} else if (SymbolValue.indexOf(character) >= 0) {
Counter.Symbol += 1; // 特殊字符计数
}
if (Cache.indexOf(character) >= 0) {
Score.minus += 1; // 重复字符扣分计数
}
Cache.push(character);
}
// 基础分
Score.base += PassData.length > 4 && PassData.length <= 8 ? 5 : (PassData.length > 8 ? 10 : 0); // 密码长度评分
Score.base += Counter.UpperCase + Counter.LowerCase === PassData.length ? 5 : (Counter.UpperCase && Counter.LowerCase ? 10 : 0); // 大小写字符评分
Score.base += Counter.Number === 1 ? 5 : (Counter.Number >= 3 ? 10 : 0); // 数字评分
Score.base += Counter.Symbol === 1 ? 5 : (Counter.Symbol >= 3 ? 15 : 0); // 特殊字符评分
// 加分
BonusPointIndex += Counter.LowerCase > 0 ? 1 : 0; // 小写字符加分
BonusPointIndex += Counter.UpperCase > 0 ? 1 : 0; // 大写字符加分
BonusPointIndex += Counter.Number > 0 ? 1 : 0; // 数字加分
BonusPointIndex += Counter.Symbol > 0 ? 1 : 0; // 数字加分
// 计算得分
Score.plus = BonusPoint[BonusPointIndex]; // 加分
Score.count = Score.base + Score.plus - Score.minus; // 总计得分
Score.progress = Score.count / Score.total * 100; // 百分比
}
typeof funCallback === 'function' && funCallback(Score.count, Score);
return Score;
}
// 调用
PasswordStrength('mima802dd2A3#8@')
// 结果
{
"total": 50,
"count": 31,
"base": 30,
"plus": 5,
"minus": 4,
"progress": 62
}
密码评分规则.png

评论列表( 0 )

你可以在登录后,发表评论

搜索帮助