解决方案 »

  1.   

    既然懂了规则那么实现楼主应该很轻松了
    先弄出来个demo就可以了 后续有修改在修改呗
      

  2.   

    规则知道了,你可以用TextBox的OnChanged事件去处理。
      

  3.   

    密码强度验证,目前没有统一的标准。大多数的验证规则都差不多,数字,小写字母,大写字母,特殊字符。结合的越复杂,强度越高。对于验证规则算法,可以自己设计,在通用验证规则的基础上自己再添加其他的规则。你可以参考Js的密码强度验证。我以前参考JS的密码强度验证用Winform做了个简单的,我也在尝试自己写复杂点的验证算法。下图:
      

  4.   

     用户控件CheckPwdStrength添加控件: ProgressBar prgStrength 进度条 Label lblWeak 强 Label lblModerate 中 Label lblStrong 弱代码:using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms;   namespace Pwd {     public partial class CheckPwdStrength : UserControl     {         public CheckPwdStrength()         {             InitializeComponent();         }           private string _pssword = string.Empty;           /// <summary>         /// 密码         /// </summary>         [Description(" 密码" ), Category(" 密码验证设置" ), Browsable(true)]         public string Pssword         {             get { return _pssword; }             set             {                 _pssword = value;                 // 执行密码强度验证                 CheckPwd();             }         }           #region   检查密码强度           /// <summary>         /// 检查字符是属于哪一类         /// </summary>         /// <param name="_in"></param>         /// <returns></returns>         private int CharMode(int _in)         {             if (_in >= 48 && _in <= 57) // 数字                   return 1;             if (_in >= 65 && _in <= 90) // 大写字母                   return 2;             if (_in >= 97 && _in <= 122) // 小写                   return 4;             else                 return 8; // 特殊字符           }           /// <summary>         /// 计算出当前密码当中一共有多少种模式         /// </summary>         /// <param name="_num"></param>         /// <returns></returns>         private int BitTotal(int _num)         {             int modes = 0;             for (int i = 0; i < 4; i++)             {                 // 逐位运算                 if ((_num & 1) == 0)                     modes++;                 // 右移位运算                 _num >>= 1;             }             return modes;         }           /// <summary>         /// 检查强度,返回密码的强度级别         /// </summary>         /// <param name="_pwd"></param>         /// <returns></returns>         private int CheckStrong(string _pwd)         {             // 判断密码长度是否大于6位             if (_pwd.Length <= 6)             {                 return 0; // 密码太短               }             else             {                 int Modes = 0;                 for (int i = 0; i < _pwd.Length; i++)                 {                     // 获取密码字符串字节数组                     byte[] by_pwd = System.Text.Encoding.Default.GetBytes(_pwd);                     // 或赋值运算                     Modes |= CharMode(by_pwd[i]);                 }                 return BitTotal(Modes);             }         }           #endregion           #region   执行密码强度验证           /// <summary>          /// 执行密码强度验证         /// </summary>         private void CheckPwd()         {             if (Pssword.Trim().ToString().Length == 0)             {                 // 弱                 lblWeak.Visible = false;                 // 中                 lblModerate.Visible = false;                 // 强                 lblStrong.Visible = false;                 progbStrength.Value = 0;             } // 密码长度是否大于6位             else if (Pssword.Trim().ToString().Length <= 6)             {                 lblWeak.Visible = true;                 lblWeak.Text = " 密码太短" ;                 lblModerate.Visible = false;                 lblStrong.Visible = false;                 progbStrength.Value = 10;             }             else             {                 // 获取密码强度                  int _Strength = CheckStrong(Pssword.Trim().ToString());                   // 强                 if (_Strength == 1)                 {                     lblStrong.Visible = true;                     lblWeak.Visible = false;                     lblModerate.Visible = false;                     progbStrength.Value = 100;                 }                 // 中                 else if (_Strength == 2)                 {                     lblModerate.Visible = true;                     lblWeak.Visible = false;                     lblStrong.Visible = false;                     progbStrength.Value = 60;                 }                 // 弱                 else if (_Strength == 3)                 {                     lblWeak.Visible = true;                     lblWeak.Text = " 弱" ;                     lblModerate.Visible = false;                     lblStrong.Visible = false;                     progbStrength.Value = 20;                 }                 else                 {                     lblWeak.Visible = false;                     lblModerate.Visible = false;                     lblStrong.Visible = false;                     progbStrength.Value = 0;                 }             }         }           #endregion       } } 密码框 TextChanged 事件代码:   /// <summary>         /// 密码实时验证         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void txtPwd_TextChanged(object sender, EventArgs e)         {             // 密码强度验证             checkPwdStrength1.Pssword = txtPwd.Text.Trim().ToString();         } 
      

  5.   


    处理int _Strength = CheckStrong(pwd); 有一个小BUG   只分别处理了返回值为1、2、3的情况,当4类字符(数字、大小写和符号)同时输入时,返回值为0,可归类于Strong的情况,非default