由于项目中需要校验用户输入的身份证是否满18岁,且网上的方法鱼龙混杂,故自定义校验方法如下:
- 第一种方法:
//验证身份证是否成年这个方法中不做身份证校验,请确保传入的是正确身份证
+ (BOOL)verifyIDCardWithAdult:(NSString *)card{
//身份证:****年**月**日
//年
NSString *year = [card substringWithRange:NSMakeRange(6,4)];
NSInteger birthdayYear = [year integerValue];
//月
NSString *month = [card substringWithRange:NSMakeRange(10,2)];
NSInteger birthdayMonth = [month integerValue];
//日
NSString *day = [card substringWithRange:NSMakeRange(12,2)];
NSInteger birthdayDay = [day integerValue];
//获取当前时间,日期:
NSDate *currentDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY/MM/dd"];
NSString *dateString = [dateFormatter stringFromDate:currentDate];
NSRange range0 = [dateString rangeOfString:@"/"];
//年
NSString *year0 = [dateString substringToIndex:range0.location];
NSInteger nowYear = [year0 integerValue];
//月
NSString *month0 = [dateString substringWithRange:NSMakeRange(5, 2)];
NSInteger nowMonth = [month0 integerValue];
//日
NSString *day0 = [dateString substringWithRange:NSMakeRange(8, 2)];
NSInteger nowDay = [day0 integerValue];
//具体校验:
//年
if (nowYear - birthdayYear < 18){
return false;
}else if (nowYear - birthdayYear == 18){
//月
if (nowMonth < birthdayMonth){
return false;
}else if (nowMonth == birthdayMonth){
//日
if (nowDay < birthdayDay){
return false;
}
}
}
return true;
}
- 第二种方法:
+ (BOOL)verifyIDCardHadAdultII:(NSString *)card{
//身份证:****年**月**日
//年
NSString *year = [card substringWithRange:NSMakeRange(6,4)];
int birthdayYear = [year intValue];
birthdayYear+=18;
//月日
NSString *monthDay = [card substringWithRange:NSMakeRange(10,4)];
int birthdayMonth = [monthDay intValue];
NSString *birthdayDay = [NSString stringWithFormat:@"%d%d",birthdayYear,birthdayMonth];
//获取当前时间,日期:
NSDate *currentDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYYMMdd"];
NSString *dateString = [dateFormatter stringFromDate:currentDate];
//年
NSString *year0 = [dateString substringWithRange:NSMakeRange(0, 4)];
int nowYear = [year0 intValue];
//月日
NSString *month0 = [dateString substringWithRange:NSMakeRange(4, 4)];
int nowMonth = [month0 intValue];
NSString *current = [NSString stringWithFormat:@"%d%d",nowYear,nowMonth];
//比较
if([birthdayDay compare:current options:NSNumericSearch] == NSOrderedDescending){
return false;
}
return true;
}