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

#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];

   }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值