校验密码强度的参考代码

  public static void main(String[] args) throws Exception {
        String str = "WERUIuy%^*&5467";
        int i = checkStrong(str);
        if(i<=2){
            System.out.println("密码强度不够!");
        }
    }
    
    /**
     * 计算出当前密码当中一共有多少种模式
     * @param pwd
     * @return
     */
    public static int checkStrong(String pwd){
        if(pwd.length() < 4)
            return 0;
        int modes = 0;
        for(int i = 0;i<pwd.length();i++){
            modes |= getCharMode(pwd.charAt(i));  //
        }
        return bitTotal(modes);
    }
    
    /**
     * 返回当前字符的模式
     * @param i
     * @return
     */
    public static int getCharMode(int i){
        if (i >= 48 && i <= 57) //数字
            return 1;
        if (i >= 65 && i <= 90) //大写字母
            return 2;
        if (i >= 97 && i <= 122) //小写
            return 4;
        else
            return 8; //特殊字符
    }
    
    /**
     * 遍历数的二进制表示,看有多少个1
     * @param num
     * @return
     */
    public static int bitTotal(int num){
        int modes = 0;
        for (int i = 0; i < 4; i++) {
            if ((num & 1) == 1) modes++;
            num >>>= 1;
        }
        return modes;
    }

 

posted @ 2017-05-23 09:29  重拾热情的小程序员  阅读(666)  评论(0编辑  收藏  举报