Swift版身份证号码校验
来源:互联网 发布:李荣浩祝你幸福知乎 编辑:程序博客网 时间:2024/05/18 17:01
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 = self var 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 = 0 let pid = mString.UTF8String for i in 0...16 { p += (pid[i]-48) * R[i] } let o = p % 11 let 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 = .MediumStyle dateFormatter.timeStyle = .NoStyle dateFormatter.timeZone = localZone dateFormatter.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; }}
0 0
- Swift版身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 校验身份证号码
- 身份证号码校验 java校验
- php身份证号码校验算法
- js 身份证号码校验实现
- PB身份证号码正确性校验
- JS校验身份证号码
- 身份证号码校验规则
- Oracle 身份证号码校验
- js校验身份证号码合法性
- JS校验身份证号码
- java校验身份证号码
- android性能1-内存、CPU获取
- 修复Odoo 8日期和时间的乱码
- ASTM协议中文传输的解决
- RMI
- Markdown工具
- Swift版身份证号码校验
- 理解依赖注入(IOC)和学习Unity
- 伪分布式安装hadoop
- 第一个 Python 程序
- 进程线程调度
- 浅谈SQL语句优化经验
- HIVE身份验证
- mysql 查询表注释/字段注释
- HTML中src和href的区别