class IDCardNoChecker {
static let share = IDCardNoChecker()
private func substring(src:String, from:Int, length:Int)->String{
let start = src.index(src.startIndex, offsetBy: from)
let end = src.index(start, offsetBy: length)
return String(src[start..<end])
}
private let iWeight:[Int] = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
private let sChecker:[Character] = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]
private func getIDCardNoCheckSum(ID:String)->Character{
var sum = 0
for i in 0...16 {
let index = ID.index(ID.startIndex, offsetBy: i)
sum += (Int(ID[index].asciiValue!) - 48)*iWeight[i]
}
return sChecker[sum%11]
}
public func checkID(IDNo:String) -> Bool {
if IDNo.isEmpty || IDNo.count != 18 {
return false
}
let ID = IDNo.uppercased()
var id = ID
if id.last == "X" {
id.removeLast()
}
let deleteDigit = id.trimmingCharacters(in: .decimalDigits)
if !deleteDigit.isEmpty {
return false
}
let y = UInt( substring(src: ID, from: 6, length: 4) )!
let m = UInt( substring(src: ID, from: 10, length: 2) )!
let d = UInt( substring(src: ID, from: 12, length: 2) )!
guard y>1000 && y<9999 && m>0 && m<=12 && d>0 && d<=31 else {
return false
}
let checkSum = getIDCardNoCheckSum(ID: ID)
if ID[ID.index(ID.startIndex, offsetBy: 17)] != checkSum {
return false
}
return true
}
}
身份证号校验 swift版
最新推荐文章于 2023-09-08 10:43:23 发布