//判断是否是中文
func isChinese() -> Bool {
let match = "(^[\u{4e00}-\u{9fa5}]+$)"
let predicate = NSPredicate(format: "SELF matches %@", match)
return predicate.evaluate(with: self)
}
//判断手机号码格式是否正确
class func valiMobile(_ mobile: String?) -> Bool {
// 130-139 150-153,155-159 180-189 145,147 170,171,173,176,177,178
let phoneRegex = "^((13[0-9])|(15[^4,\\D])|(18[0-9])|(14[57])|(17[013678]))\\d{8}$"
let phoneTest = NSPredicate(format: "SELF MATCHES %@", phoneRegex)
return phoneTest.evaluate(with: mobile)
}
// 判断是否是数字
class func validateNumber(_ number: String?) -> Bool {
var res = true
let tmpSet = CharacterSet(charactersIn: "0123456789")
let i: Int = 0
while i < (number?.count ?? 0) {
let string = (number as NSString?)?.substring(with: NSRange(location: i, length: 1))
let range: NSRange? = (string as NSString?)?.rangeOfCharacter(from: tmpSet)
if Int(range?.length ?? 0) == 0 {
res = false
break
}
i += 1
}
return res
}
// 判断是否为中文
class func isChinese(_ string: String?) -> Bool {
let c = unichar(string?[string?.index(string?.startIndex, offsetBy: 0)] ?? 0)
if c >= 0x4e00 && c <= 0x9fff {
return true
} else {
return false
}
return true
}
//格式化电话号码 136 2222 2222
class func formatPhoneNumber(_ string: String?) -> String? {
var str1 = string ?? ""
str1.insert(contentsOf: " ", at: s.index(s.startIndex, offsetBy: 3))
str1.insert(contentsOf: " ", at: s.index(s.startIndex, offsetBy: 8))
return str1
}
//是否是一个字符
class func validateCharacter(_ string: String?) -> Bool {
let cStr = Int8(string?.utf8CString ?? 0)
if strlen(cStr) == 1 {
return true
}
return false
}
// 判断身份证号是否正确
func judgeIdentityStringValid(_ identityString: String?) -> Bool {
if (identityString?.count ?? 0) != 18 {
return false
}
// 正则表达式判断基本 身份证号是否满足格式
let regex2 = "^(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)$"
let identityStringPredicate = NSPredicate(format: "SELF MATCHES %@", regex2)
//如果通过该验证,说明身份证格式正确,但准确性还需计算
if !identityStringPredicate.evaluate(with: identityString) {
return false
}
//** 开始进行校验 *//
//将前17位加权因子保存在数组里
let idCardWiArray = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"]
//这是除以11后,可能产生的11位余数、验证码,也保存成数组
let idCardYArray = ["1", "0", "10", "9", "8", "7", "6", "5", "4", "3", "2"]
//用来保存前17位各自乖以加权因子后的总和
var idCardWiSum: Int = 0
for i in 0..<17 {
let subStrIndex = Int(truncating: ((identityString as NSString?)?.substring(with: NSRange(location: i, length: 1)) ?? "")) ?? 0
let idCardWiIndex = Int(truncating: idCardWiArray[i]) ?? 0
idCardWiSum += subStrIndex * idCardWiIndex
}
//计算出校验码所在数组的位置
let idCardMod: Int = idCardWiSum % 11
//得到最后一位身份证号码
let idCardLast = (identityString as NSString?)?.substring(with: NSRange(location: 17, length: 1))
//如果等于2,则说明校验码是10,身份证号码最后一位应该是X
if idCardMod == 2 {
if !(idCardLast == "X") || (idCardLast == "x") {
return false
}
} else {
//用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码
if !(idCardLast == idCardYArray[idCardMod]) {
return false
}
}
return true
}
// 时间戳转时间
convenience init(fromDateString dateStr: String?) {
let confromTimesp = Date(timeIntervalSince1970: TimeInterval(Int(truncating: dateStr ?? "") ?? 0))
let formatter = DateFormatter()
formatter.dateFormat = "YY-MM-dd HH:mm"
let confromTimespStr = formatter.string(from: confromTimesp)
return confromTimespStr
}
class func getAgeForm(_ age: Int) -> String? {
let mouthArr = ["0个月", "1个月", "2个月", "3个月", "4个月", "5个月", "6个月", "7个月", "8个月", "9个月", "10个月", "11个月", "12个月"]
let yearArr = ["0岁", "1岁", "2岁", "3岁", "4岁", "5岁", "6岁", "7岁"]
let mouthIndex: Int = age % 12
let yearIndex: Int = age / 12
let mouth = mouthArr[mouthIndex]
let year = yearArr[yearIndex]
var ageText: String
if age < 12 {
ageText = "\(mouth)"
} else if age == 12 {
ageText = "1岁"
} else {
ageText = "\(year)\(mouth)"
}
return ageText
}
class func cachePathWithfileName(_ filename: String?) -> String? {
return URL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).last ?? "").appendingPathComponent("\(filename ?? "").plist").absoluteString
}
// 根据订单创建时间获得订单的倒计时数
class func getRemainTime(with closeTime: String?) -> Int {
var closeTime = closeTime
let date = Date()
// 当前时间
// NSDateFormatter *formate = [[NSDateFormatter alloc] init];
// formate.dateFormat = @"YYMMddHHmmss";
// NSString *formatDate = [formate stringFromDate:date];
let timeSp = String(format: "%.0f", date.timeIntervalSince1970)
// 时间差 剩余时间 关闭时间-当前时间
if (closeTime?.count ?? 0) > 10 {
closeTime = (closeTime as NSString?)?.substring(with: NSRange(location: 0, length: 10))
}
let timeLast = Int(truncating: closeTime ?? "") ?? 0 - Int(truncating: timeSp) ?? 0
return timeLast
}
// 得到当前的时间戳
class func getCurrentTime() -> String? {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .short
formatter.dateFormat = "YYYY-MM-dd HH:mm:ss SSS"
// ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制
//设置时区,这个对于时间的处理有时很重要
let timeZone = NSTimeZone(name: "Asia/Shanghai")
if let aZone = timeZone {
formatter.timeZone = aZone as TimeZone
}
let datenow = Date()
//现在时间,你可以输出来看下是什么格式
let timeSp = "\(Int(datenow.timeIntervalSince1970) * 1000)"
return timeSp
}
网友评论