【问题标题】:Android Password Strength checker with seekbar带有搜索栏的 Android 密码强度检查器
【发布时间】:2015-12-29 07:04:10
【问题描述】:

如何在 android 中使用 seekbar 创建密码强度检查器?

【问题讨论】:

    标签: android passwords textwatcher


    【解决方案1】:

    您可以使用https://github.com/VenomVendor/Password-Strength-Checker 来满足您的要求

    或使用TextWatcher检查EditText长度。像这样

     public void afterTextChanged(Editable s)
                        {
                                     if(s.length()==0)
                                            textViewPasswordStrengthIndiactor.setText("Not Entered");
                                     else if(s.length()<6)
                                            textViewPasswordStrengthIndiactor.setText("EASY");
                                     else if(s.length()<10) 
                                            textViewPasswordStrengthIndiactor.setText("MEDIUM"); 
                                     else if(s.length()<15) 
                                            textViewPasswordStrengthIndiactor.setText("STRONG");
                                       else 
                                            textViewPasswordStrengthIndiactor.setText("STRONGEST");
    
                                   if(s.length()==20)
                                       textViewPasswordStrengthIndiactor.setText("Password Max Length Reached");
                        }
                };
    

    Demo Help.

    afterTextChanged(Editable s) - 文本时调用此方法 已经变了。因为您所做的任何更改都会导致此方法 要再次递归调用,您必须注意 在这里执行操作,否则可能导致死循环。

    【讨论】:

      【解决方案2】:
      1. 为密码强度创建规则引擎,可能是一个简单的函数,当您将字符串传递给它时会返回强度。
      2. 在您的密码编辑文本中使用TextWatcher 并传递通过您的规则输入的任何字符串。
      3. 使用规则引擎返回的强度值来设置进度条的进度值和进度颜色。

      【讨论】:

        【解决方案3】:

        https://github.com/yesterselga/password-strength-checker-android

        是一个很好的例子。我将代码更改为不使用字符串值。而不是它,我使用的是 0-4 的值。这是代码

        public enum PasswordStrength
        {
        
            WEAK(0, Color.RED), MEDIUM(1, Color.argb(255, 220, 185, 0)), STRONG(2, Color.GREEN), VERY_STRONG(3, Color.BLUE);
        
            //--------REQUIREMENTS--------
            static int REQUIRED_LENGTH = 6;
            static int MAXIMUM_LENGTH = 6;
            static boolean REQUIRE_SPECIAL_CHARACTERS = true;
            static boolean REQUIRE_DIGITS = true;
            static boolean REQUIRE_LOWER_CASE = true;
            static boolean REQUIRE_UPPER_CASE = true;
        
            int resId;
            int color;
        
            PasswordStrength(int resId, int color)
            {
                this.resId = resId;
                this.color = color;
            }
        
            public int getValue()
            {
                return resId;
            }
        
            public int getColor()
            {
                return color;
            }
        
            public static PasswordStrength calculateStrength(String password)
            {
                int currentScore = 0;
                boolean sawUpper = false;
                boolean sawLower = false;
                boolean sawDigit = false;
                boolean sawSpecial = false;
        
                for (int i = 0; i < password.length(); i++)
                {
                    char c = password.charAt(i);
        
                    if (!sawSpecial && !Character.isLetterOrDigit(c))
                    {
                        currentScore += 1;
                        sawSpecial = true;
                    }
                    else
                    {
                        if (!sawDigit && Character.isDigit(c))
                        {
                            currentScore += 1;
                            sawDigit = true;
                        }
                        else
                        {
                            if (!sawUpper || !sawLower)
                            {
                                if (Character.isUpperCase(c))
                                    sawUpper = true;
                                else
                                    sawLower = true;
                                if (sawUpper && sawLower)
                                    currentScore += 1;
                            }
                        }
                    }
                }
        
                if (password.length() > REQUIRED_LENGTH)
                {
                    if ((REQUIRE_SPECIAL_CHARACTERS && !sawSpecial) || (REQUIRE_UPPER_CASE && !sawUpper) || (REQUIRE_LOWER_CASE && !sawLower) || (REQUIRE_DIGITS && !sawDigit))
                    {
                        currentScore = 1;
                    }
                    else
                    {
                        currentScore = 2;
                        if (password.length() > MAXIMUM_LENGTH)
                        {
                            currentScore = 3;
                        }
                    }
                }
                else
                {
                    currentScore = 0;
                }
        
                switch (currentScore)
                {
                    case 0:
                        return WEAK;
                    case 1:
                        return MEDIUM;
                    case 2:
                        return STRONG;
                    case 3:
                        return VERY_STRONG;
                    default:
                }
        
                return VERY_STRONG;
            }
        
        }
        

        以及如何使用它:

        if(PasswordStrength.calculateStrength(mViewData.mRegisterData.password). getValue() < PasswordStrength.STRONG.getValue())
        {
            message = "Password should contain min of 6 characters and at least 1 lowercase, 1 uppercase and 1 numeric value";
            return null;
        }
        

        您可以使用 PasswordStrength.VERY_STRONG.getValue() 作为替代。或中等

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-04
          • 2021-07-13
          • 1970-01-01
          相关资源
          最近更新 更多