/*!
验证身份证
- 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 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
}
Swift---身份证号码校验
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 标记不足18位的身份证号 = Table.AddColumn(去除空格, "标记不足18位的身份证号", each...
- 1、简介 在App开发中,涉及到用户登录时,我们经常需要检验用户输入的账户是否是我们指定的类型。例如判断用户的账号...
- 计算方法 ( 百度百科 ) 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9...