您的位置:首页 > 其它

根据身份证号计算年龄 15位或18位身份证号的年龄计算方法

2017-03-28 19:15 453 查看
#pragma mark -
根据身份证号获取生日(15位)
-(NSString*)birthdayStrFromIdentityCardFifteen:(NSString
*)numberStr {
   
NSMutableString*result = [NSMutableStringstringWithCapacity:0];
   
NSString *year =
nil;
   
NSString *month =
nil;
   
BOOL isAllNumber =
YES;
   
NSString *day =
nil;
   
if([numberStr
length]<14)
       
return result;
   
   
//**截取前12位
   
NSString *fontNumer =[numberStr
substringWithRange:NSMakeRange(0,
11)];
   
   
//**检测前12位否全都是数字;
   
const char *str =[fontNumer
UTF8String];
   
const char *p = str;
   
while (*p!='\0') {
       
if(!(*p>='0'&&*p<='9'))
           isAllNumber =
NO;
       p++;
   }
   
if(!isAllNumber)
       
return result;
 
    year = [NSString stringWithFormat:@"19%@",[numberStrsubstringWithRange:NSMakeRange(6,
2)]];
    month = [numberStr
substringWithRange:NSMakeRange(8,
2)];
    day = [numberStr
substringWithRange:NSMakeRange(10,2)];
   
   
    [result
appendString:year];
    [result
appendString:@"-"];
    [result
appendString:month];
    [result
appendString:@"-"];
    [result
appendString:day];
   
   
return result;
}
 
#pragma mark -
根据身份证号获取生日(18位)
-(NSString*)birthdayStrFromIdentityCard:(NSString
*)numberStr {
   
NSMutableString*result = [NSMutableStringstringWithCapacity:0];
   
NSString *year =
nil;
   
NSString *month =
nil;
 
   
BOOL isAllNumber =
YES;
   
NSString *day =
nil;
   
if([numberStr
length]<14)
       
return result;
 
   
//**截取前14位
   
NSString *fontNumer =[numberStr
substringWithRange:NSMakeRange(0,
13)];
 
   
//**检测前14位否全都是数字;
   
const char *str =[fontNumer
UTF8String];
   
const char *p = str;
   
while (*p!='\0') {
       
if(!(*p>='0'&&*p<='9'))
           isAllNumber =
NO;
       p++;
   }
   
if(!isAllNumber)
       
return result;
 
    year = [numberStr
substringWithRange:NSMakeRange(6,
4)];
    month = [numberStr
substringWithRange:NSMakeRange(10,
2)];
    day = [numberStr
substringWithRange:NSMakeRange(12,2)];
 
    [result
appendString:year];
    [result
appendString:@"-"];
    [result
appendString:month];
    [result
appendString:@"-"];
    [result
appendString:day];
 
   
return result;
}
 
#pragma mark -
根据身份证号获取年龄
-(NSString*)getIdentityCardAge {
   
if (self.length
== 18) {
       
NSDateFormatter *formatterTow = [[NSDateFormatteralloc]init];
        [formatterTow
setDateFormat:@"yyyy-MM-dd"];
       
NSDate *bsyDate = [formatterTow
dateFromString:[self
birthdayStrFromIdentityCard:self]];
       
       
NSTimeInterval dateDiff = [bsyDate
timeIntervalSinceNow];
       
int age =
trunc(dateDiff/(60*60*24))/365;
       
       
return [NSStringstringWithFormat:@"%d",-age];
    }
else {
       
NSDateFormatter *formatterTow = [[NSDateFormatteralloc]init];
        [formatterTow
setDateFormat:@"yyyy-MM-dd"];
       
NSDate *bsyDate = [formatterTow
dateFromString:[self
birthdayStrFromIdentityCardFifteen:self]];
       
       
NSTimeInterval dateDiff = [bsyDate
timeIntervalSinceNow];
       
int age =
trunc(dateDiff/(60*60*24))/365;
       
       
return [NSStringstringWithFormat:@"%d",-age];
   }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: