用户名、密码非法字符检测
#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