博客
关于我
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/

你可能感兴趣的文章
mysql 自增id和UUID做主键性能分析,及最优方案
查看>>
Mysql 自定义函数
查看>>
mysql 行转列 列转行
查看>>
Mysql 表分区
查看>>
mysql 表的操作
查看>>
mysql 视图,视图更新删除
查看>>
MySQL 触发器
查看>>
mysql 让所有IP访问数据库
查看>>
mysql 记录的增删改查
查看>>
MySQL 设置数据库的隔离级别
查看>>
MySQL 证明为什么用limit时,offset很大会影响性能
查看>>
Mysql 语句操作索引SQL语句
查看>>
MySQL 误操作后数据恢复(update,delete忘加where条件)
查看>>
MySQL 调优/优化的 101 个建议!
查看>>
mysql 转义字符用法_MySql 转义字符的使用说明
查看>>
mysql 输入密码秒退
查看>>
mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
查看>>
mysql 里对root及普通用户赋权及更改密码的一些命令
查看>>
Mysql 重置自增列的开始序号
查看>>
MySQL 高可用性之keepalived+mysql双主
查看>>