Nodejs 高级密码校验,重复字符,防止密码连位,横向密码物理按键连位,以及特殊字符连位等

30 篇文章 0 订阅
2 篇文章 0 订阅
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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值