密碼複雜度

密碼複雜度利用Regular Expression可以簡單地完成
先用一個簡單的例子,6~12個英數字混合的規則
<div>
<asp:TextBox ID=”Tbx_Password” runat=”server” />
<asp:Button ID=”Btn_Save” Text=”Save” OnClick=”Btn_Save_Click” runat=”server” />
<asp:RequiredFieldValidator ID=”Rfv_Password” ControlToValidate=”Tbx_Password”
ErrorMessage=”密碼不可空白” SetFocusOnError=”true” Text=”密碼不可空白” ForeColor=”Red”
Display=”Dynamic” runat=”server” />
<asp:RegularExpressionValidator ID=”Reg_Password” ControlToValidate=”Tbx_Password”
ValidationExpression=”^(?!.[oO0])(?=.[a-zA-Z])(?=.[\d])(?!.[\d][\d][\d]).{6,12}$”
ErrorMessage=”密碼長度6~12英數混合” Text=”密碼長度6~12英數混合” SetFocusOnError=”true”
ForeColor=”Red” Display=”Dynamic” runat=”server” />
</div>

^開頭符號
(?=.[a-zA-Z])最少一個英文字
(?=.[\d])最少一個數字
.{6,12}6~12長度
$結尾符號

利用群組的功能還可以組合出更多的規則
(?=.[!@#$%^&])最少一個符號
(?=.[\d][\d])連續兩個數字
(?=.[a-z][a-z])連續兩個小寫英文
(?!.[\d][\d][\d])禁止連續三個數字
(?!.[oO0])禁止小寫的o和大寫的O和數字的0

如果不是WebForm專案,也可以透過System.Text.RegularExpressions空間下的Regex物件來使用

protected void Btn_Save_Click(object sender, EventArgs e)
{
Regex reg = new Regex(@”^(?!.[oO0])(?=.[a-zA-Z])(?=.[\d])(?!.[\d][\d][\d]).{6,12}$”);
if (reg.IsMatch(Tbx_Password.Text))
{
Response.Write(“Match”);
}
else
{
Response.Write(“Not Match”);
}
}