用户名、密码非法字符检测

#region 登录信息验证
        /// <summary>
        /// 用户名长度6-20位,由数字,字母,下划线组成,且不能以数字开头,字母不区分大小写。
        /// 密码长度为8-20位,由数字,字母,下划线组成,且至少包含两种及以上字符,字母区分大小写。
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public bool LoginInfoCheck(string username, string password)
        {
            /*(0-9):(48-57)*/
            /*(a-z):(97-122)*/
            /*(A-Z):(65-90)*/
            /*(_):95*/
            bool username_result = true;
            bool password_result = true;

            /*username check*/
            var un = username.ToCharArray();
            if (un.Length >= 6 && un.Length <= 20)//1.字符数限制
            {
                if (un[0] >= 48 && un[0] <= 57)//2.用户名首位不能为数字
                {
                    LoginInfo = "用户名首位不能为数字";
                    username_result = false;
                }
                else//3.非法字符检测
                {
                    foreach (var u in un)
                    {
                        if ((u >= 48 && u <= 57) || (u >= 97 && u <= 122) || (u >= 65 && u <= 90) || u == 95)
                        {

                        }
                        else
                        {
                            //用户名包含非法字符u
                            LoginInfo = $"用户名包含非法字符'{u}'";
                            username_result = false;
                        }
                    }
                }

            }
            else
            {
                //用户名长度异常
                LoginInfo = "用户名长度要求:6~20位";
                username_result = false;
            }

            /*password check*/
            if (username_result)//用户名正确才去检测密码
            {
                var pwd = password.ToCharArray();

                if (pwd.Length >= 8 && pwd.Length <= 20)//1.字符数限制条件
                {
                    int flag = 0;
                    bool flag_num = false;
                    bool flag_a = false;
                    bool flag__ = false;
                    /*2.非法字符检测*/
                    foreach (var p in pwd)
                    {
                        if (p >= 48 && p <= 57)//数字
                        {
                            if (!flag_num) { flag += 1; }
                            flag_num = true;
                        }
                        else if (p >= 97 && p <= 122)//小写字母
                        {
                            if (!flag_a) { flag += 1; }
                            flag_a = true;
                        }
                        else if (p >= 65 && p <= 90)//大写字母
                        {
                            if (!flag_a) { flag += 1; }
                            flag_a = true;
                        }
                        else if (p == 95)//'_'
                        {
                            if (!flag__) { flag += 1; }
                            flag__ = true;
                        }
                        else
                        {
                            //密码包含非法字符u
                            LoginInfo = $"密码包含非法字符:'{p}'";
                            password_result = false;
                        }
                    }
                    /*3.至少两种不同字符组成*/
                    if (flag < 2&&password_result)
                    {
                        LoginInfo = "密码中字母、数字、下划线至少包含两种";
                        password_result = false;
                    }
                }
                else
                {
                    //密码长度超限
                    LoginInfo = "密码长度要求:8~20位";
                    password_result = false;
                }
            }

            /*result check*/
            if (!username_result || !password_result)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        #endregion

  

posted @ 2020-03-06 17:54  nick_JD  阅读(1128)  评论(0编辑  收藏  举报