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

浙公网安备 33010602011771号