iOS (swift)根据身份证获取年龄

支持18位和15位身份证

//根据身份证获取出生日期
    func birthdayStrFromIdentityCard(numberStr: String) -> (String) {
        var year:String = ""
        var month:String
        var day:String
        //截取前14位
//        let fontNumber = (numberStr as NSString).substringWithRange(NSMakeRange(0, 14))
        //判断是18位身份证还是15位身份证
        if (numberStr as NSString).length == 18 {
            year = (numberStr as NSString).substringWithRange(NSMakeRange(6, 4))
            month = (numberStr as NSString).substringWithRange(NSMakeRange(10, 2))
            day = (numberStr as NSString).substringWithRange(NSMakeRange(12, 2))
            let result = "\(year)-\(month)-\(day)"
            print(result)
            return result
        }else{
            year = (numberStr as NSString).substringWithRange(NSMakeRange(6, 2))
            month = (numberStr as NSString).substringWithRange(NSMakeRange(8, 2))
            day = (numberStr as NSString).substringWithRange(NSMakeRange(10, 2))
            let result = "19\(year)-\(month)-\(day)"
            print(result)
            return result
        }
        
    }
    //根据出生日期计算年龄的方法
    func caculateAge(birthday: String) -> (Int){
//        var resultTag = ""
        //格式化日期
        let d_formatter = NSDateFormatter()
        d_formatter.dateFormat = "yyyy-MM-dd"
        let birthDay_date = d_formatter.dateFromString(birthday)
        // 出生日期转换 年月日
        if let tempBirthDay_date = birthDay_date {
            let birthdayDate = NSCalendar.currentCalendar().components([.Year,.Month,.Day], fromDate: tempBirthDay_date)
            let brithDateYear  = birthdayDate.year
            let brithDateDay   = birthdayDate.day
            let brithDateMonth = birthdayDate.month
            // 获取系统当前 年月日
            let currentDate = NSCalendar.currentCalendar().components([.Year,.Month,.Day], fromDate: NSDate())
            let currentDateYear  = currentDate.year
            let currentDateDay   = currentDate.day
            let currentDateMonth = currentDate.month
            // 计算年龄
            var iAge = currentDateYear - brithDateYear - 1;
            if ((currentDateMonth > brithDateMonth) || (currentDateMonth == brithDateMonth && currentDateDay >= brithDateDay)) {
                iAge += 1
            }
            return iAge
        }
//计算错误
        return 9999
    }

推荐阅读更多精彩内容

  • 曾经有一份美好的爱情放在我的面前我没有珍惜。等到失去后才后悔莫及。如果可以再对小李说。毛欣想说。这辈子无缘再牵手。...
    毛欣与小李阅读 2,009评论 0 13
  • 身份证是国民的身份编号,编号是有一定规律的,这里介绍身份证验证规则比较详细。 下面我说一下15位跟18位身份证号的...
    李龙简书阅读 1,115评论 1 1
  • 原文:https://www.fanhaobai.com/2017/08/id-card.html 在我国现行的身...
    fanhaobai阅读 946评论 0 0
  • 猫爸儿子现在9岁了,有1.4米高了,乘公交车要买票、坐高铁、乘飞机都要买成人票了。用户口本去买票很麻烦,于是我就带...
    Tony说事阅读 503评论 3 5
  • A simple Id card validation rules written in pure swift, ...
    王垒iOS阅读 7,595评论 5 24
  • 今天看了《影响力》的第5章的大部分。这一章主要讲的是喜好对个人的影响。 这一章还介绍了几个让别人喜欢的因素。 第一...
    hmaccelerate阅读 91评论 0 1
  • Anthony de Mello:"我究竟为什么会爱上一个人呢?为什么我会爱上某种人而不是另外一种人呢?这是因为我...
    津城燕窝Donna阅读 131评论 0 1
  • 最近和朋友们都很少联系,除了妈妈和杨先生。 每每与他俩聊天,回复最多的问题是:吃饭了吗?!吃的什么?!睡觉了吗?!...
    MinePoppy阅读 96评论 0 1
  • 每个时间节点看都有不同收获,以前读书只求量,原来反复读,会有读懂的质变,举一反三就是这个道理吧,我爱上了好书反复读...
    索尼格格阅读 480评论 3 2