博客
关于我
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 随机数 rand使用
查看>>
MySQL 面试题汇总
查看>>
MySQL 面试,必须掌握的 8 大核心点
查看>>
MySQL 高可用性之keepalived+mysql双主
查看>>
MySQL 高性能优化规范建议
查看>>
mysql 默认事务隔离级别下锁分析
查看>>
Mysql--逻辑架构
查看>>
MySql-2019-4-21-复习
查看>>
mysql-5.6.17-win32免安装版配置
查看>>
mysql-5.7.18安装
查看>>
MySQL-Buffer的应用
查看>>
mysql-cluster 安装篇(1)---简介
查看>>
mysql-connector-java.jar乱码,最新版mysql-connector-java-8.0.15.jar,如何愉快的进行JDBC操作...
查看>>
mysql-connector-java各种版本下载地址
查看>>
mysql-EXPLAIN
查看>>
MySQL-Explain的详解
查看>>
mysql-group_concat
查看>>
MySQL-redo日志
查看>>
MySQL-【1】配置
查看>>
MySQL-【4】基本操作
查看>>