424
技术社区[云栖]
NSString扩展
// // NSString+Common.h // CloudShopping // // Created by sixiaobo on 14-7-9. // Copyright (c) 2014年 com.Uni2uni. All rights reserved. // #import <Foundation/Foundation.h> /*! * @brief NSString 的能用扩展 */ @interface NSString (Common) // 获取Documents路径 + (NSString *)documentPath; // 获取缓存路径 + (NSString *)cachePath; + (NSString *)imageCachePath; // 本地购物车路径 + (NSString *)localShoppingCartPath; //! 是否是合法邮箱 - (BOOL)isValidEmail; //! 是否是合法号码 - (BOOL)isValidPhoneNumber; //! 是否是合法的18位身份证号码 - (BOOL)isValidPersonID; /** * 功能:判断是否在地区码内 * 参数:地区码 */ - (BOOL)areaCode:(NSString *)code; //! 根据文件名返回路径 + (NSString *)pathWithFileName:(NSString *)fileName; + (NSString *)pathWithFileName:(NSString *)fileName ofType:(NSString *)type; // 根据秒数返回日期 + (NSString *)dateWithSeconds:(NSUInteger)seconds; @end
// // NSString+Common.m // CloudShopping // // Created by sixiaobo on 14-7-9. // Copyright (c) 2014年 com.Uni2uni. All rights reserved. // #import "NSString+Common.h" @implementation NSString (Common) + (NSString *)documentPath { return [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; } #pragma mark - 获取缓存路径 + (NSString *)cachePath { return [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"]; } + (NSString *)imageCachePath { NSString *path = [[self cachePath] stringByAppendingPathComponent:@"Images"]; BOOL isDir = NO; BOOL isDirExist = [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir]; if (!isDir && !isDirExist) { BOOL isSuccess = [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil]; if (isSuccess) { NSLog(@"success"); } } return path; } + (NSString *)localShoppingCartPath { return [[self cachePath] stringByAppendingPathComponent:@"/cart.plist"]; } #pragma mark - 验证邮箱格式 - (BOOL)isValidEmail { 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:self]; } #pragma mark - 验证手机号码格式 - (BOOL)isValidPhoneNumber { /** * 手机号码 * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 * 联通:130,131,132,152,155,156,185,186 * 电信:133,1349,153,180,189 */ NSString *mobile = @"^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$"; /** 10 * 中国移动:China Mobile 11 * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 12 */ NSString *chinaMobile = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$"; /** 15 * 中国联通:China Unicom 16 * 130,131,132,152,155,156,185,186 17 */ NSString * chinaUnicom = @"^1(3[0-2]|5[256]|8[56])\\d{8}$"; /** 20 * 中国电信:China Telecom 21 * 133,1349,153,180,189 22 */ NSString * chinaTelecom = @"^1((33|53|8[09])[0-9]|349)\\d{7}$"; NSPredicate *mobilePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", mobile]; NSPredicate *cmPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", chinaMobile]; NSPredicate *cuPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", chinaUnicom]; NSPredicate *ctPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", chinaTelecom]; if ([mobilePredicate evaluateWithObject:self] || [cmPredicate evaluateWithObject:self] || [cuPredicate evaluateWithObject:self] || [ctPredicate evaluateWithObject:self]) { return YES; } return NO; } /** * 功能:验证身份证是否合法 * 参数:输入的身份证号 */ - (BOOL)isValidPersonID { // 判断位数 if (self.length != 15 && self.length != 18) { return NO; } NSString *carid = self; long lSumQT = 0; // 加权因子 int R[] ={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; // 校验码 unsigned char sChecker[11]={'1','0','X', '9', '8', '7', '6', '5', '4', '3', '2'}; // 将15位身份证号转换成18位 NSMutableString *mString = [NSMutableString stringWithString:self]; if (self.length == 15) { [mString insertString:@"19" atIndex:6]; long p = 0; const char *pid = [mString UTF8String]; for (int i = 0; i<= 16; i++) { p += (pid[i] - 48) * R[i]; } int o = p % 11; NSString *string_content = [NSString stringWithFormat:@"%c", sChecker[o]]; [mString insertString:string_content atIndex:[mString length]]; carid = mString; } // 判断地区码 NSString * sProvince = [carid substringToIndex:2]; if (![self areaCode:sProvince]) { return NO; } // 判断年月日是否有效 // 年份 int strYear = [[self substringWithString:carid begin:6 end:4] intValue]; // 月份 int strMonth = [[self substringWithString:carid begin:10 end:2] intValue]; // 日 int strDay = [[self substringWithString:carid begin:12 end:2] intValue]; NSTimeZone *localZone = [NSTimeZone localTimeZone]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; [dateFormatter setTimeZone:localZone]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *date=[dateFormatter dateFromString:[NSString stringWithFormat:@"%d-%d-%d 12:01:01", strYear, strMonth, strDay]]; if (date == nil) { return NO; } const char *PaperId = [carid UTF8String]; // 检验长度 if(18 != strlen(PaperId)) return NO; // 校验数字 for (int i = 0; i < 18; i++) { if ( !isdigit(PaperId[i]) && !(('X' == PaperId[i] || 'x' == PaperId[i]) && 17 == i) ) { return NO; } } // 验证最末的校验码 for (int i=0; i<=16; i++) { lSumQT += (PaperId[i]-48) * R[i]; } if (sChecker[lSumQT%11] != PaperId[17] ) { return NO; } return YES; } /** * 功能:判断是否在地区码内 * 参数:地区码 */ - (BOOL)areaCode:(NSString *)code { NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; [dic setObject:@"北京" forKey:@"11"]; [dic setObject:@"天津" forKey:@"12"]; [dic setObject:@"河北" forKey:@"13"]; [dic setObject:@"山西" forKey:@"14"]; [dic setObject:@"内蒙古" forKey:@"15"]; [dic setObject:@"辽宁" forKey:@"21"]; [dic setObject:@"吉林" forKey:@"22"]; [dic setObject:@"黑龙江" forKey:@"23"]; [dic setObject:@"上海" forKey:@"31"]; [dic setObject:@"江苏" forKey:@"32"]; [dic setObject:@"浙江" forKey:@"33"]; [dic setObject:@"安徽" forKey:@"34"]; [dic setObject:@"福建" forKey:@"35"]; [dic setObject:@"江西" forKey:@"36"]; [dic setObject:@"山东" forKey:@"37"]; [dic setObject:@"河南" forKey:@"41"]; [dic setObject:@"湖北" forKey:@"42"]; [dic setObject:@"湖南" forKey:@"43"]; [dic setObject:@"广东" forKey:@"44"]; [dic setObject:@"广西" forKey:@"45"]; [dic setObject:@"海南" forKey:@"46"]; [dic setObject:@"重庆" forKey:@"50"]; [dic setObject:@"四川" forKey:@"51"]; [dic setObject:@"贵州" forKey:@"52"]; [dic setObject:@"云南" forKey:@"53"]; [dic setObject:@"西藏" forKey:@"54"]; [dic setObject:@"陕西" forKey:@"61"]; [dic setObject:@"甘肃" forKey:@"62"]; [dic setObject:@"青海" forKey:@"63"]; [dic setObject:@"宁夏" forKey:@"64"]; [dic setObject:@"新疆" forKey:@"65"]; [dic setObject:@"台湾" forKey:@"71"]; [dic setObject:@"香港" forKey:@"81"]; [dic setObject:@"澳门" forKey:@"82"]; [dic setObject:@"国外" forKey:@"91"]; if ([dic objectForKey:code] == nil) { return NO; } return YES; } #pragma mark - 根据文件名返回路径 + (NSString *)pathWithFileName:(NSString *)fileName { return [self pathWithFileName:fileName ofType:nil]; } + (NSString *)pathWithFileName:(NSString *)fileName ofType:(NSString *)type { return [[NSBundle mainBundle] pathForResource:fileName ofType:type]; } /** * 功能:获取指定范围的字符串 * 参数:字符串的开始小标 * 参数:字符串的结束下标 */ - (NSString *)substringWithString:(NSString *)str begin:(NSInteger)begin end:(NSInteger )end { return [str substringWithRange:NSMakeRange(begin, end)]; } + (NSString *)dateWithSeconds:(NSUInteger)seconds { NSDate *date = [NSDate dateWithTimeIntervalSince1970:seconds]; NSString *str = [NSString stringWithFormat:@"%@", date]; NSArray *array = [str componentsSeparatedByString:@" "]; NSString *result = [array objectAtIndex:0]; if (array.count == 3) { result = [NSString stringWithFormat:@"%@ %@", result, [array objectAtIndex:1]]; } return result; } @end
最后更新:2017-04-03 05:39:42
上一篇:
HDU1548-A strange lift【广搜做法】
下一篇:
Spring10种常见异常解决方法
佛说,是我们自己苦了自己
windows中修改catalina.sh上传到linux执行报错This file is needed to run this program
Android listview异步图片加载之优化篇——ImageLoader
大数据全真案例带你来解密如何挑选“风水宝地”
Android——在源代码的基础上开发应用程序
深入理解并行编程-分割和同步设计(一)
HTAP数据库 PostgreSQL 场景与性能测试之 23 - (OLAP) 并行计算
mongodb删除库
《Servlet、JSP和Spring MVC初学指南》——第1章 Servlets 1.1Servlet API概览
如何用Python画各种着名数学图案 | 附图+代码