使用textfield根据内容显示密码强度

来源:互联网 发布:手机淘宝充值怎么退款 编辑:程序博客网 时间:2024/04/30 15:21

现在APP中经常需要注册登录操作,在注册时设置密码会需要根据输入的内容来显示密码强度。最近在项目中需要处理这样一种情况。

在网上也有一些处理方法,但是看了都不是很满意,所以决定还是自己写。

首先实现主要是从两个方面开始。

1.如何将密码强度与输入内容联系在一起

这个需要结合使用textfield 的代理方法

2.如何判断密码强度

这个是逻辑问题

    // 0.先判断输入的长度是不是大于6

    // 1.如果小于6为则显示密码强度太低提示

    // 2.如果大于6再判断其组成成分

    // 3.如果组成全部是字母,数字,符号的某一种,则判断为低强度

    // 4.如果组成是上述中的两种则判断为中强度

    // 5.如果组成是上述中的三种则判断为高强度


具体代码实现:

@interface ViewController ()<UITextFieldDelegate>


{

    BOOL _isback;   // 如果还有其他的textfield,这个时候需要这个变量,保证密码强度显示正常。

    UIImageView       *_remindImage;  // 密码强度图片视图


}


@end


- (void)viewDidLoad {

 UITextField *tf = [[UITextFieldalloc]initWithFrame:CGRectMake(20,50,200,50)];

    

_remindImage       = [[UIImageViewalloc]initWithFrame:CGRectMake(10,CGRectGetMaxY(tf.frame)+30,300,10)];

    [self.viewaddSubview:_remindImage];

    tf.borderStyle =UITextBorderStyleRoundedRect;

    tf.placeholder =@"测试密码长度";

    tf.secureTextEntry =YES// 设置密码保护,这一步是必须的,这样能够保证字母一个个的输入,及时判断

    tf.delegate =self;

    [self.viewaddSubview:tf];

}

// 这里需要textfield 的两个代理方法

- (void)textFieldDidBeginEditing:(UITextField *)textField

{

        _isback =YES;     

}


- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

{

    

    if (_isback)

    {

        _remindImage.hidden =YES;

        _isback =NO;

        

    }else

    {

   

        NSString *joinpw =nil;

        NSMutableString *deleStr = [textField.textmutableCopy];

        if ([stringisEqualToString:@""])//当后退删除密码时处理

        {

            

            [deleStr deleteCharactersInRange:NSMakeRange(deleStr.length-1,1)];

            joinpw = deleStr;

            

            

        }else  // 当还在增加密码长度时处理

        {

            joinpw = [textField.textstringByAppendingString:string];

        }

        

        if (joinpw.length >5)

        {

            

            PASSWORDSTRENGTH pasw = [selfanalyzePassWorldWith:joinpw];

            switch (pasw)

            {

                caseLOWPASSWORD:

                {

                    _remindImage.hidden =NO;

                    _remindImage.image = [UIImageimageNamed:@"PsdStrength_Weak.png"];

                    

                }

                    break;

                caseMIDDLEPASSWORD:

                {

                    _remindImage.hidden =NO;

                    _remindImage.image = [UIImageimageNamed:@"PsdStrength_Fair.png"];

                    

                }

                    break;

                caseHIGHPASSWORD:

                {

                    

                    _remindImage.hidden =NO;

                    _remindImage.image = [UIImageimageNamed:@"PsdStrength_Good.png"];

                    

                }

                    break;

                    

                default:

                    break;

            }

            

        }else

        {

            

            _remindImage.hidden =YES;

            

        }

        

    }


    returnYES;

}

// 解析密码的逻辑

- (PASSWORDSTRENGTH)analyzePassWorldWith:(NSString *)password


{

    BOOL isnum =NO;

    BOOL isalph =NO;

    BOOL isSymbol =NO;

    

    constchar *pwch = [passwordcStringUsingEncoding:NSUTF8StringEncoding];

    

    for (NSInteger i=0; i<strlen(pwch); i++)

    {

        // 判断的逻辑原理是根据字符的ASCII 编码值   

        char s = pwch[i];

             

        if (s >47 && s <58)

        {

            

            isnum = YES;

            

        }

        elseif ((s >64 && s <91) ||(s  >96 && s <123)) {

            

            isalph = YES; 

        }else

        {

            

            isSymbol = YES;

        }

    }

    

    

    if ((isnum && isalph && !isSymbol) || (isnum && isSymbol && !isalph) || (isalph && isSymbol && !isnum))

    {

        

        returnMIDDLEPASSWORD;

        

    }elseif (isnum && isalph && isSymbol)

    {

        

        returnHIGHPASSWORD;

        

    }else

    {

        returnLOWPASSWORD;

        

    }

    

   

}



菜鸟原创,如有雷同,纯属巧合,如有错误,欢迎指正



0 0
原创粉丝点击