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

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

在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/

你可能感兴趣的文章
Objective-C实现porta密码算法(附完整源码)
查看>>
Objective-C实现Pow Logarithmic幂函数与对数函数算法 (附完整源码)
查看>>
Objective-C实现power iteration幂迭代算法(附完整源码)
查看>>
Objective-C实现powLinear函数和powFaster函数算法 (附完整源码)
查看>>
Objective-C实现pow函数功能(附完整源码)
查看>>
Objective-C实现prefix conversions string前缀转换字符串算法(附完整源码)
查看>>
Objective-C实现prefix conversions前缀转换算法(附完整源码)
查看>>
Objective-C实现pressure conversions压力转换算法(附完整源码)
查看>>
Objective-C实现Prim 算法生成图的最小生成树MST算法(附完整源码)
查看>>
Objective-C实现prime sieve eratosthenes埃拉托斯特尼素数筛选法算法(附完整源码)
查看>>
Objective-C实现PrimeCheck函数算法 (附完整源码)
查看>>
Objective-C实现PrimeFactors质因子分解算法 (附完整源码)
查看>>
Objective-C实现prim普里姆算法(附完整源码)
查看>>
Objective-C实现PriorityQueue优先队列算法(附完整源码)
查看>>
Objective-C实现proth number普罗斯数算法(附完整源码)
查看>>
Objective-C实现pythagoras哥拉斯算法(附完整源码)
查看>>
Objective-C实现QLearning算法(附完整源码)
查看>>
Objective-C实现QR正交三角分解法算法(附完整源码)
查看>>
Objective-C实现qubit measure量子位测量算法(附完整源码)
查看>>
Objective-C实现Queue队列算法(附完整源码)
查看>>