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畫各種著名數學圖案 | 附圖+代碼