const checkPass = (text, long, level) => {
long ? long : 4;
level ? level : 1;
const _long = long - 1;
let _split = null;
let _num = 0;
const _line = "01234567890-=,qwertyuiop[]\,asdfghjkl;',zxcvbnm,./";
const _slash = ["1qaz", "2wsx", "3edc", "4rfv", "5tgb", "6yhn", "7ujm", "8ik,", "9ol.", "0p;/", "=[;.",
"-pl,", "0okm", "9ijn", "8uhb", "7ygv", "6tfc", "5rdx", "4esz"];
const _numberAndAbc = "01234567890,abcdefghijklmnopqrstuvwxyz";
const _find = (arr, text) => {
return arr.find(v => v.toLowerCase() === text.toLowerCase());
};
const _checkMiddle = (text) => {
if (text.length < long) {
return false;
}
for (let i = 0; i < text.length; i++) {
if (i > 0) {
_checkRepeat(i - 1, text[i] ,text);
}
if (text.length - i > _long && ",".indexOf(_split) === -1) {
_split = (text.substring(i, long + i)).toLowerCase();;
switch (level) {
case 1:
if (_numberAndAbc.indexOf(_split) !== -1) {
_num = 0;在这里插入代码片
return false;
} else {
break;
}
case 2: case 3:
if (_find(_slash, _split) || _line.indexOf(_split) !== -1 || _numberAndAbc.indexOf(_split) !== -1) {
_num = 0;
return false;
} else {
break;
}
default:
return false;
}
}
};
if (_num === _long) {
return false;
}
return true;
};
const _checkRepeat = (index, value, text) => {
if (text[index].toLowerCase() === value.toLowerCase()) {
_num++;
} else {
_num = 0;
}
};
const _mapper = (text) => {
let str = "";
for (let i = 0; i < text.length; i++) {
switch (text[i]) {
case "~":
str += "0";
break;
case "`":
str += "0";
break;
case "!":
str += "1";
break;
case "@":
str += "2";
break;
case "#":
str += "3";
break;
case "$":
str += "4";
break;
case "%":
str += "5";
break;
case "^":
str += "6";
break;
case "&":
str += "7";
break;
case "*":
str += "8";
break;
case "(":
str += "9";
break;
case ")":
str += "0";
break;
case "_":
str += "-";
break;
case "+":
str += "=";
break;
case "{":
str += "[";
break;
case "}":
str += "]";
break;
case ":":
str += ";";
break;
case '"':
str += "'";
break;
case "<":
str += ",";
break;
case ">":
str += ".";
break;
case "?":
str += "/";
break;
default:
str += text[i];
break;
}
}
return str;
};
if (level === 1 || level === 2) {
return _checkMiddle(text);
} else if (level === 3) {
return _checkMiddle(_mapper(text));
} else {
return false;
}
};
const text = "((_999" //设定检测字符
const long = 6; //设定连续按键不超过n位
const level = 3;// 1:只检测常规连续字符abcdef,123456 2:检测横向和斜向 3:检测连续特殊字符
const data = checkPass(text, long, level);
console.log(data);
Nodejs 高级密码校验,重复字符,防止密码连位,横向密码物理按键连位,以及特殊字符连位等
最新推荐文章于 2022-11-10 11:27:03 发布