/*没废话,直接上代码*/
//iso加权数组
static let iso7064Arr = [7,9, 10, 5, 8, 4,2, 1, 6, 3, 7,9, 10, 5 ,8, 4,2]
//iso校验数组,其中大小写x均视为10
static let iso7064ModArr = [1,0, 10, 9, 8, 7,6, 5, 4, 3, 2]
//验证身份证号
func validateChinaId() -> Bool {
let regex:NSPredicate =NSPredicate(format:"SELF MATCHES %@", "(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)")
if regex.evaluateWithObject(self) ==false {
return false;
}
ifself.unicodeScalars.count ==15 {
return true;
}
var intArr = [Int]()
for item inself.unicodeScalars {
var intItem = Int(item.value)
//大小写x均视为10,方便计算
if intItem == 88 || intItem == 120 {
intItem = 58
}
intArr.append(intItem - 48)
}
var total = 0
for i in0...16 {
total += intArr[i] * String.iso7064Arr[i]
}
let mode = total % 11;
if String.iso7064ModArr[mode] == intArr[17] {
return true
}
else {
return false
}
}