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