博客
关于我
Objective-C学习之判断字符串是qq,银行卡,手机号等等公用的方法
阅读量:739 次
发布时间:2019-03-22

本文共 5083 字,大约阅读时间需要 16 分钟。

在iOS应用开发中,身份验证是非常关键的一环,尤其是涉及用户输入的验证。开发者需要根据不同的需求进行验证,例如ZIP代码、电子邮件、手机号码、QQ、数字、字符串、身份证、护照、信用卡号以及生日。这一系列的验证可以帮助开发者确保用户输入的数据合法有效。

ZIP代码验证

+ (BOOL)isValidZipcode:(NSString *)value {    const char *cvalue = [value UTF8String];    int len = strlen(cvalue);    if (len != 6) {        return FALSE;    }    for (int i = 0; i < len; i++) {        if (!(cvalue[i] >= '0' && cvalue[i] <= '9')) {            return FALSE;        }    }    return TRUE;}

该方法用于验证是否为有效的ZIP代码。首先检查长度是否为6位数,然后逐一检查每一位是否为数字。如果都通过了验证,ZIP代码即为有效。

电子邮件验证

+ (BOOL)validateEmail:(NSString *)candidate {    NSArray *array = [candidate componentsSeparatedByString:@"."];    if ([array count] >= 4) {        return FALSE;    }    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];    return [emailTest evaluateWithObject:candidate];}

该方法用于电子邮件的格式验证。首先检查电子邮件是否包含足够的部分(一般为4部分),然后使用预定义的正则表达式对邮件地址进行格式检查。如果邮件地址符合格式,验证结果即为成功。

手机号验证

+ (BOOL)isValidPhone:(NSString *)value {    const char *cvalue = [value UTF8String];    int len = strlen(cvalue);    if (len != 11) {        return FALSE;    }    if (![IdentifierValidator isValidNumber:value]) {        return FALSE;    }    NSString *preString = [[NSString stringWithFormat:@"%@", value] substringToIndex:2];    if ([preString isEqualToString:@"13"] || [preString isEqualToString:@"15"] || [preString isEqualToString:@"18"]) {        return TRUE;    } else {        return FALSE;    }}

该方法用于验证手机号码是否为中国移动电话号码。首先检查电话号码的长度是否为11位,然后检查首两位是否为13、15或18,符合条件即为有效号码。

信用卡号验证

+ (BOOL)isValidCreditNumber:(NSString *)value {    BOOL result = TRUE;    NSInteger length = [value length];    if (length >= 13) {        result = [IdentifierValidator isValidNumber:value];        if (result) {            NSInteger twoDigitBeginValue = [[value substringWithRange:NSMakeRange(0, 2)] integerValue];            NSInteger threeDigitBeginValue = [[value substringWithRange:NSMakeRange(0, 3)] integerValue];            NSInteger fourDigitBeginValue = [[value substringWithRange:NSMakeRange(0, 4)] integerValue];            if (((threeDigitBeginValue >= 300 && threeDigitBeginValue <= 305) || fourDigitBeginValue == 3095 || twoDigitBeginValue == 36 || twoDigitBeginValue == 38) && (length != 14)) {                result = FALSE;            } else if ([value isStartWithString:@"4"] && !(length == 13 || length == 16)) {                result = FALSE;            } else if ((twoDigitBeginValue >= 51 || twoDigitBeginValue <= 55) && (length != 16)) {                result = FALSE;            } else if ([value isStartWithString:@"34"] || [value isStartWithString:@"37"] && (length != 15)) {                result = FALSE;            } else if ([value isStartWithString:@"6011"] && (length != 16)) {                result = FALSE;            } else {                NSInteger begin = [[value substringWithRange:NSMakeRange(0, 6)] integerValue];                if ((begin >= 622126 && begin <= 622925) && (length != 16)) {                    result = FALSE;                } else {                    result = TRUE;                }            }        }        if (result) {            NSInteger digitValue;            NSInteger checkSum = 0;            NSInteger index = 0;            NSInteger leftIndex;            if (0 == length % 2) {                index = 0;                leftIndex = 1;            } else {                index = 1;                leftIndex = 0;            }            while (index < length) {                digitValue = [[value substringWithRange:NSMakeRange(index, 1)] integerValue];                digitValue = digitValue * 2;                if (digitValue >= 10) {                    checkSum += digitValue / 10 + digitValue % 10;                } else {                    checkSum += digitValue;                }                digitValue = [[value substringWithRange:NSMakeRange(leftIndex, 1)] integerValue];                checkSum += digitValue;                index += 2;                leftIndex += 2;            }            result = (0 == checkSum % 10) ? TRUE : FALSE;        } else {            result = FALSE;        }    } else {        result = FALSE;    }    return result;}

该方法用于信用卡号的验证。首先检查长度是否为13位及以上,然后根据不同信用卡公司的规则验证开头数字和总和模10的结果。如果所有条件均满足,信用卡号即为有效。

other methods

对于其他方法(如身份证、护照、生日等),可以按照类似的逻辑进行实现,如下所示:

+ (BOOL)isValidIdentifier:(NSString *)value {    const int LENGTH = 18;    const char *str = [[value lowercaseString] UTF8String];    NSInteger length = strlen(str);    if (15 != length && LENGTH != length) {        return FALSE;    }    if (result) {        for (i = 1; i < length -1; i++) {            if (!(str[i] >= '0' && str[i] <= '9')) {                result = FALSE;                break;            }        }        if (result) {            if (LENGTH == length) {                if ((str[i] >= '0' && str[i] <= '9') || str[i] == 'X' || str[i] == 'x') {                    result = FALSE;                }            }            // 其他校验逻辑        }    }    return result;}

通过上述方法,可以实现多种身份验证场景。如果需要进一步了解或使用这些验证功能,可以在开发中将其集成。

转载地址:http://zqggz.baihongyu.com/

你可能感兴趣的文章
mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
查看>>
mysqldump 参数--lock-tables浅析
查看>>
mysqldump 导出中文乱码
查看>>
mysqldump 导出数据库中每张表的前n条
查看>>
mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
查看>>
Mysqldump参数大全(参数来源于mysql5.5.19源码)
查看>>
mysqldump备份时忽略某些表
查看>>
mysqldump实现数据备份及灾难恢复
查看>>
mysqldump数据库备份无法进行操作只能查询 --single-transaction
查看>>
mysqldump的一些用法
查看>>
mysqli
查看>>
MySQLIntegrityConstraintViolationException异常处理
查看>>
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>
mysql_real_connect 参数注意
查看>>
mysql_secure_installation初始化数据库报Access denied
查看>>
MySQL_西安11月销售昨日未上架的产品_20161212
查看>>
Mysql——深入浅出InnoDB底层原理
查看>>
MySQL“被动”性能优化汇总
查看>>