您的位置:首页 > 其它

获取倒计时距离某一时间点的时间,判断身份证,电话号码格式是否正确的简单封装

2015-11-13 21:40 561 查看
#import "HelpToolsDataOrPhoneOrIDCard.h"

@implementation HelpToolsDataOrPhoneOrIDCard

+ (NSString *)getTimeFromThatTime:(NSDateComponents *)componets{

/*

在要获取倒计时时间的控制器中设置起始时间和时间控制器

样式:

_timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updata:) userInfo:nil repeats:YES];

然后调用时间控制器

- (void)updata:(NSTimer *)timer

{

// NSDateComponents *components = [[NSDateComponents alloc] init];

components = [[NSDateComponents alloc]init];

[components setHour:0];

[components setMinute:0];

[components setSecond:0];

[components setDay:14];

[components setMonth:11];

[components setYear:2015];

NSString *str = [HelpToolsDataOrPhone getTimeFromThatTime:components];

NSLog(@"%@",str);

_label.text = [NSString stringWithFormat:@"距离 xxxx 开始%@",str];

}

*/

// 创建一个日历对象,并用构造方法选择不同地区的时间NSCalendarIdentifierChinese

NSCalendar * calendar =[[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

// 创建一个NSDate ,把NSDateComponents转化成日期类型

NSDate *destinationDate = [calendar dateFromComponents:componets];

// 设置你要显示的时间格式,年月日时分秒

NSInteger units = NSCalendarUnitDay |NSCalendarUnitHour|NSCalendarUnitMinute | NSCalendarUnitSecond;

NSDateComponents *compoents1 = [calendar components:units fromDate:[NSDate date] toDate:destinationDate options:0];

NSLog(@"%@",[NSDate date]);

NSInteger days = [compoents1 day];

NSInteger hour = [compoents1 hour];

NSInteger min = [compoents1 minute];

NSInteger second = [compoents1 second];

NSString *strLabel = [NSString stringWithFormat:@"还有%ld天%ld小时%ld分钟%ld秒",days,hour,min,second];

return strLabel;

}

+(NSString *)getDayStringWithTime:(NSString *)time{

//将传入时间转化成需要的格式

static NSDateFormatter* formater = nil;

if (formater == nil) {

formater=[[NSDateFormatter alloc] init];

[formater setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

}

NSDate *fromdate=[formater dateFromString:time];

NSTimeZone *fromzone = [NSTimeZone systemTimeZone];

NSInteger frominterval = [fromzone secondsFromGMTForDate:fromdate];

NSDate *fromDate = [fromdate dateByAddingTimeInterval: frominterval];

//获取当前时间

NSDate *date = [NSDate date];

NSTimeZone *zone = [NSTimeZone systemTimeZone];

NSInteger interval = [zone secondsFromGMTForDate: date];

NSDate *localeDate = [date dateByAddingTimeInterval: interval];

double intervalTime = [fromDate timeIntervalSinceReferenceDate] - [localeDate timeIntervalSinceReferenceDate];

long lTime = (long)intervalTime;

NSInteger iDays = lTime/86400;

NSInteger iHours = (lTime-iDays*86400)/3600;

if (iDays == 0 ) {

NSInteger iMinute = (lTime-iHours*3600)/60;

return [NSString stringWithFormat:@"剩%ld小时%ld分",iHours,iMinute];

}else{

NSInteger iMinute = (lTime-iDays*86400-iHours*3600)/60;

return [NSString stringWithFormat:@"剩%ld天%ld小时%ld分",iDays,iHours,iMinute];

}

}

// 判断是否有效身份证号码

+ (BOOL)isIDNumberValid:(NSString*)idnumber

{

if ([idnumber length] != 15 &&

[idnumber length] != 18)

{

return NO;

}

NSLog(@"%@",idnumber);

int provCode = [[idnumber substringToIndex:2] intValue];

if ( provCode < 11 ||

(provCode > 15 && provCode < 21) ||

(provCode > 23 && provCode < 31) ||

(provCode > 37 && provCode < 41) ||

(provCode > 46 && provCode < 50) ||

(provCode > 54 && provCode < 61) ||

(provCode > 65) )

{

// 行政区码错误

NSLog(@"province code error");

return NO;

}

NSUInteger len = [idnumber length];

int year = 0;

int month = 0;

int day = 0;

if (len == 15)

{

year = [[idnumber substringWithRange:NSMakeRange(6, 2)] intValue];

if (year > 20)

{

year = 1900 + year;

}

else

{

year = 2000 + year;

}

month = [[idnumber substringWithRange:NSMakeRange(8, 2)] intValue];

day = [[idnumber substringWithRange:NSMakeRange(10, 2)] intValue];

}

else if (len == 18)

{

year = [[idnumber substringWithRange:NSMakeRange(6, 4)] intValue];

month = [[idnumber substringWithRange:NSMakeRange(10, 2)] intValue];

day = [[idnumber substringWithRange:NSMakeRange(12, 2)] intValue];

}

if (year < 1900 ||

year > 2200)

{

// 年份错误

NSLog(@"year error");

return NO;

}

if (month < 1 ||

month > 12)

{

// 月份错误

NSLog(@"month error");

return NO;

}

if (day < 1 ||

day > 31)

{

// 日期错误

NSLog(@"day error");

return NO;

}

// 检查最后一位

NSRange xrange = [idnumber rangeOfString:@"x"];

NSRange Xrange = [idnumber rangeOfString:@"X"];

if ((xrange.length == 1 && xrange.location != len - 1) ||

(Xrange.length == 1 && Xrange.location != len - 1))

{

NSLog(@"x position error");

return NO;

}

if (len == 15)

{

return YES;

}

int Wi[17] = {7, 9, 10, 5, 8 ,4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};

int lastBit[11] = {1, 0, 'x', 9, 8, 7, 6, 5, 4, 3, 2};

int sum = 0;

NSMutableString * idnum18 = [[NSMutableString alloc] initWithString:idnumber];

for (int i = 0; i < 17; i++)

{

int nVal = [[idnum18 substringWithRange:NSMakeRange(i, 1)] intValue];

sum += nVal*Wi[i];

}

int ret = sum%11;

NSLog(@"ret=%d",ret);

if ((ret == 2 && [[[idnum18 substringWithRange:NSMakeRange(17, 1)] lowercaseString] isEqualToString:@"x"]) ||

lastBit[ret] == [[idnum18 substringWithRange:NSMakeRange(17, 1)] intValue])

{

// [idnum18 release];

return YES;

}

else

{

// 校验码错误

NSLog(@"verify code error");

// [idnum18 release];

return NO;

}

// [idnum18 release];

return NO;

}

/*手机号码验证 MODIFIED BY HELENSONG*/

+ (BOOL)isMobileNumber:(NSString *)mobileNum

{

/**

* 手机号码

* 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188,1705

* 联通:130,131,132,152,155,156,185,186,1709

* 电信:133,1349,153,180,189,1700

*/

NSString * MOBILE = @"^1((3//d|5[0-35-9]|8[025-9])//d|70[059])\\d{7}$";//总况

/**

10 * 中国移动:China Mobile

11 * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188,1705 178

12 */

NSString * CM = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[23478])\\d|705|178[0-9])\\d{7}$";

/**

15 * 中国联通:China Unicom

16 * 130,131,132,152,155,156,185,186,1709

17 */

NSString * CU = @"^1((3[0-2]|5[256]|8[56])\\d|709|76[0-9])\\d{7}$";

/**

20 * 中国电信:China Telecom

21 * 133,1349,153,180,189,1700

22 */

NSString * CT = @"^1((33|53|8[019])\\d|349|700|77[0-9])\\d{7}$";

/**

25 * 大陆地区固话及小灵通

26 * 区号:010,020,021,022,023,024,025,027,028,029

27 * 号码:七位或八位

28 */

// NSString * PHS = @"^0(10|2[0-5789]|\\d{3})\\d{7,8}$";

NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];

NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];

NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];

NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];

if (([regextestmobile evaluateWithObject:mobileNum] == YES)

|| ([regextestcm evaluateWithObject:mobileNum] == YES)

|| ([regextestct evaluateWithObject:mobileNum] == YES)

|| ([regextestcu evaluateWithObject:mobileNum] == YES))

{

return YES;

}

else

{

return NO;

}

}

//以上集合一起,并兼容14开头的

//+ (BOOL)isMobileNumber:(NSString *)mobileNum

//{

// NSString * phoneRegex = @"^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$";

// BOOL isMatch = [mobileNum isMatchedByRegex:phoneRegex];

// return isMatch;

//}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: