美文网首页
OC根据身份证号计算年龄

OC根据身份证号计算年龄

作者: 倪大头 | 来源:发表于2020-04-27 16:01 被阅读0次
+ (NSString *)getIdCardAge:(NSString *)numberStr {
    NSDateFormatter *formatterTow = [[NSDateFormatter alloc]init];
    [formatterTow setDateFormat:@"yyyy-MM-dd"];
    NSDate *bsyDate = [formatterTow dateFromString:[self birthdayStrFromIdentityCard:numberStr]];
    NSTimeInterval dateDiff = [bsyDate timeIntervalSinceNow];
    int age = trunc(dateDiff/(60*60*24))/365;
    return [NSString stringWithFormat:@"%d",-age];
}

+ (NSString *)birthdayStrFromIdentityCard:(NSString *)numberStr {
    NSMutableString *result = [NSMutableString stringWithCapacity:0];
    NSString *year = nil;
    NSString *month = nil;
    BOOL isAllNumber = YES;
    NSString *day = nil;
    if ([numberStr length] < 18) return result;
    // 从第6位开始 截取8个数
    NSString *fontNumer = [numberStr substringWithRange:NSMakeRange(6, 8)];
    // 检测前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 = [numberStr substringWithRange:NSMakeRange(6, 4)];
    //    NSLog(@"year ==%@",year);
    month = [numberStr substringWithRange:NSMakeRange(10, 2)];
    //    NSLog(@"month ==%@",month);
    day = [numberStr substringWithRange:NSMakeRange(12,2)];
    //    NSLog(@"day==%@",day);
    [result appendString:year];
    [result appendString:@"-"];
    [result appendString:month];
    [result appendString:@"-"];
    [result appendString:day];
    //    NSLog(@"result===%@",result);

    return result;
}

相关文章

网友评论

      本文标题:OC根据身份证号计算年龄

      本文链接:https://www.haomeiwen.com/subject/cpxuwhtx.html