正则表达式验证用户名、密码、手机号码、身份证

来源:互联网 发布:超级基因优化液毛球 编辑:程序博客网 时间:2024/05/21 19:47

//用户名

+ (BOOL) validateUserName:(NSString *)name

{

    NSString *userNameRegex =@"^[A-Za-z0-9]{3,20}+$";

    NSPredicate *userNamePredicate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",userNameRegex];

    BOOL B = [userNamePredicateevaluateWithObject:name];

    return B;

}


//密码

+ (BOOL) validatePassword:(NSString *)passWord

{

    NSString *passWordRegex =@"^[a-zA-Z0-9]{6,20}+$";

    NSPredicate *passWordPredicate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",passWordRegex];

    return [passWordPredicateevaluateWithObject:passWord];

}


//判断手机号码格式是否正确

+ (BOOL)valiMobile:(NSString *)mobile

{

    mobile = [mobile stringByReplacingOccurrencesOfString:@" "withString:@""];

    if (mobile.length !=11)

    {

        returnNO;

    }else{

        /**

         * 移动号段正则表达式

         */

        NSString *CM_NUM =@"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$";

        /**

         * 联通号段正则表达式

         */

        NSString *CU_NUM =@"^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\\d{8}|(1709)\\d{7}$";

        /**

         * 电信号段正则表达式

         */

        NSString *CT_NUM =@"^((133)|(153)|(177)|(18[0,1,9]))\\d{8}$";

        NSPredicate *pred1 = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", CM_NUM];

        BOOL isMatch1 = [pred1evaluateWithObject:mobile];

        NSPredicate *pred2 = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", CU_NUM];

        BOOL isMatch2 = [pred2evaluateWithObject:mobile];

        NSPredicate *pred3 = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", CT_NUM];

        BOOL isMatch3 = [pred3evaluateWithObject:mobile];

        

        if (isMatch1 || isMatch2 || isMatch3) {

            returnYES;

        }else{

            returnNO;

        }

    }

}


/**

 *  验证身份证号码是否正确的方法

 *

 *  @param IDNumber 传进身份证号码字符串

 *

 *  @return 返回YESNO表示该身份证号码是否符合国家标准

 */

+ (BOOL)isCorrect:(NSString *)IDNumber

{

    NSMutableArray *IDArray = [NSMutableArrayarray];

    // 遍历身份证字符串,存入数组中

    if (IDNumber.length ==18) {

        for (int i =0; i < 18; i++) {

            NSRange range =NSMakeRange(i, 1);

            NSString *subString = [IDNumbersubstringWithRange:range];

            [IDArray addObject:subString];

        }

    }else{

        for (int i =0; i < 15; i++) {

            NSRange range =NSMakeRange(i, 1);

            NSString *subString = [IDNumbersubstringWithRange:range];

            [IDArray addObject:subString];

        }

    }

    

    // 系数数组

    NSArray *coefficientArray = [NSArrayarrayWithObjects:@"7",@"9", @"10",@"5", @"8",@"4", @"2",@"1", @"6",@"3", @"7",@"9", @"10",@"5", @"8",@"4", @"2",nil];

    // 余数数组

    NSArray *remainderArray = [NSArrayarrayWithObjects:@"1",@"0", @"X",@"9", @"8",@"7", @"6",@"5", @"4",@"3", @"2",nil];

    // 每一位身份证号码和对应系数相乘之后相加所得的和

    int sum =0;

    if (IDNumber.length ==18) {

        for (int i =0; i < 17; i++) {

            int coefficient = [coefficientArray[i]intValue];

            int ID = [IDArray[i]intValue];

            sum += coefficient * ID;

        }

    }else{

        for (int i =0; i < 14; i++) {

            int coefficient = [coefficientArray[i]intValue];

            int ID = [IDArray[i]intValue];

            sum += coefficient * ID;

        }

    }

    

    // 这个和除以11的余数对应的数

    NSString *str = remainderArray[(sum %11)];

    // 身份证号码最后一位

    NSString *string;

    if (IDNumber.length ==18) {

        string = [IDNumber substringFromIndex:17];

    }else{

        string = [IDNumber substringFromIndex:14];

    }

    

    // 如果这个数字和身份证最后一位相同,则符合国家标准,返回YES

    if ([strisEqualToString:string]) {

        returnYES;

    } else {

        returnNO;

    }

}

阅读全文
0 0