Swift版身份证号码校验

Swift版身份证号码校验

最近写用swift开发项目,在网上找了很多关于身份证号码校验的文章都没有能达到精准校验的效果,为此,我写了一个swift版本:

 extension NSString {/*!验证手机号是否合法- returns: true/false*/func isValidateTelNumber() -> Bool {return validate("^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[06-8])\\d{8}$")}/*!验证身份证- returns: true/false*/func chk18PaperId() -> Bool {//判断位数if self.length != 15 && self.length != 18 {return false}var carid = selfvar lSumQT = 0//加权因子let R = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]//校验码let sChecker: [Int8] = [49,48,88, 57, 56, 55, 54, 53, 52, 51, 50]//将15位身份证号转换成18位let mString = NSMutableString.init(string: self)if self.length == 15 {mString.insertString("19", atIndex: 6)var p = 0let pid = mString.UTF8Stringfor i in 0...16 {p += (pid[i]-48) * R[i]}let o = p % 11let stringContent = NSString(format: "%c", sChecker[o])mString.insertString(stringContent as String, atIndex: mString.length)carid = mString}//判断地区码let sProvince = carid.substringToIndex(2)if (!areaCodeAt(sProvince)) {return false}//判断年月日是否有效//年份let strYear = Int(carid.substringWithRange(NSMakeRange(6, 4)))//月份let strMonth = Int(carid.substringWithRange(NSMakeRange(10, 2)))//日let strDay = Int(carid.substringWithRange(NSMakeRange(12, 2)))let localZone = NSTimeZone.localTimeZone()let dateFormatter = NSDateFormatter()dateFormatter.dateStyle = .MediumStyledateFormatter.timeStyle = .NoStyledateFormatter.timeZone = localZonedateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"let date = dateFormatter.dateFromString("\(String(format: "%02d",strYear!))-\(String(format: "%02d",strMonth!))-\(String(format: "%02d",strDay!)) 12:01:01")if date == nil {return false}let paperId = carid.UTF8String//检验长度if 18 != carid.length {return false}//校验数字func isDigit(c: Int8) -> Bool {return 0 <= c && c <= 9}for i in 0...18 {if isDigit(paperId[i]) && !(88 == paperId[i] || 120 == paperId[i]) && 17 == i {return false}}//验证最末的校验码for i in 0...16 {lSumQT += (paperId[i]-48) * R[i]}if sChecker[lSumQT%11] != paperId[17] {return false}return true}func areaCodeAt(code: String) -> Bool {var dic: [String: String] = [:]dic["11"] = "北京"dic["12"] = "天津"dic["13"] = "河北"dic["14"] = "山西"dic["15"] = "内蒙古"dic["21"] = "辽宁"dic["22"] = "吉林"dic["23"] = "黑龙江"dic["31"] = "上海"dic["32"] = "江苏"dic["33"] = "浙江"dic["34"] = "安徽"dic["35"] = "福建"dic["36"] = "江西"dic["37"] = "山东"dic["41"] = "河南"dic["42"] = "湖北"dic["43"] = "湖南"dic["44"] = "广东"dic["45"] = "广西"dic["46"] = "海南"dic["50"] = "重庆"dic["51"] = "四川"dic["52"] = "贵州"dic["53"] = "云南"dic["54"] = "西藏"dic["61"] = "陕西"dic["62"] = "甘肃"dic["63"] = "青海"dic["64"] = "宁夏"dic["65"] = "新疆"dic["71"] = "台湾"dic["81"] = "香港"dic["82"] = "澳门"dic["91"] = "国外"if (dic[code] == nil) {return false;}return true;}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部