From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001
From: 单军华
Date: Wed, 11 Jul 2018 10:47:42 +0800
Subject: [PATCH] 首次上传
---
screendisplay/screendisplay/Classes/Utility/StringUtil.m | 407 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 407 insertions(+), 0 deletions(-)
diff --git a/screendisplay/screendisplay/Classes/Utility/StringUtil.m b/screendisplay/screendisplay/Classes/Utility/StringUtil.m
new file mode 100755
index 0000000..313b906
--- /dev/null
+++ b/screendisplay/screendisplay/Classes/Utility/StringUtil.m
@@ -0,0 +1,407 @@
+//
+// StringUtil.m
+// airtree
+//
+// Created by WindShan on 2016/11/14.
+// Copyright �� 2016��� Gloria. All rights reserved.
+//
+
+#import "StringUtil.h"
+
+@implementation StringUtil
+
+static char fxTwoCharToHex(char a, char b)
+{
+ char encoder[3] = {0,0,0};
+
+ encoder[0] = a;
+ encoder[1] = b;
+
+ return (char) strtol(encoder,NULL,16);
+}
+
+
++ (void)convertString:(NSString *)source toHexBytes:(unsigned char *)hexBuffer
+{
+ const char * bytes = [source cStringUsingEncoding:NSASCIIStringEncoding];
+ unsigned char * index = hexBuffer;
+
+ while ((*bytes) && (*(bytes +1))) {
+ *index = fxTwoCharToHex(*bytes, *(bytes + 1));
+
+ ++index;
+ bytes += 2;
+ }
+
+ *index = 0;
+}
+
++ (NSString *)intervalFromNowTime
+{
+ NSTimeInterval interval = [[NSDate date] timeIntervalSince1970];
+ return [NSString stringWithFormat:@"%ld", (long)interval];
+}
+
+
++ (NSString *)deleteChinesSpace:(NSString *)sourceText
+{
+ return [sourceText stringByReplacingOccurrencesOfString:@"���" withString:@""];
+}
+
++(NSString *)stringFromObject:(id)obj
+{
+ NSString *ret = nil;
+
+ if ([obj isKindOfClass:[NSNumber class]]) {
+ ret = [NSString stringWithFormat:@"%ld", [obj longValue]];
+ }
+ else {
+ ret = obj;
+ }
+
+ return ret;
+}
+
++ (BOOL) isMobile:(NSString *)mobileNumbel
+{
+ /**
+ * ������������
+ * ���������134[0-8],135,136,137,138,139,147,150,151,157,158,159,182,187,188
+ * ���������130,131,132,152,155,156,185,186
+ * ���������133,1349,153,180,189,181(������)
+ */
+ NSString * MOBIL = @"^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$";
+ /**
+ 10 * ���������������China Mobile
+ 11 * 134[0-8],135,136,137,138,139,147,150,151,157,158,159,182,187,188
+ 12 */
+ NSString * CM = @"^1(34[0-8]|47[0-9]|(3[5-9]|5[017-9]|8[2378])\\d)\\d{7}$";
+ /**
+ 15 * ���������������China Unicom
+ 16 * 130,131,132,152,155,156,185,186
+ 17 */
+ NSString * CU = @"^1(3[0-2]|5[256]|8[56])\\d{8}$";
+ /**
+ 20 * ���������������China Telecom
+ 21 * 133,1349,153,180,189,181(������)
+ 22 */
+ NSString * CT = @"^1((33|53|77|8[019])[0-9]|349)\\d{7}$";
+
+ NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBIL];
+ NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];
+ NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];
+ NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];
+
+ if (([regextestmobile evaluateWithObject:mobileNumbel]
+ || [regextestcm evaluateWithObject:mobileNumbel]
+ || [regextestct evaluateWithObject:mobileNumbel]
+ || [regextestcu evaluateWithObject:mobileNumbel])) {
+ return YES;
+ }
+
+ return NO;
+}
+
+//������������������������������
++ (BOOL)isValidateEmail:(NSString *)email
+{
+ NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
+ NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
+ return [emailTest evaluateWithObject:email];
+}
+
+//���������������
++ (BOOL) validateCarNo:(NSString *)carNo
+{
+ NSString *carRegex = @"^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{4}[a-zA-Z_0-9_\u4e00-\u9fa5]$";
+ NSPredicate *carTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",carRegex];
+ return [carTest evaluateWithObject:carNo];
+}
+
+//������
++ (BOOL) validateCarType:(NSString *)CarType
+{
+ NSString *CarTypeRegex = @"^[\u4E00-\u9FFF]+$";
+ NSPredicate *carTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",CarTypeRegex];
+ return [carTest evaluateWithObject:CarType];
+}
+
+//���������
++ (BOOL) validateUserName:(NSString *)name
+{
+ NSString *userNameRegex = @"^[A-Za-z0-9]{6,20}+$";
+ NSPredicate *userNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",userNameRegex];
+ return [userNamePredicate evaluateWithObject:name];
+}
+
+//������������
++ (BOOL) validatePassword:(NSString *)passWord
+{
+ NSString *passWordRegex = @"^[a-zA-Z0-9]{6,20}+$";
+ NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",passWordRegex];
+ return [passWordPredicate evaluateWithObject:passWord];
+}
+
+//������������
++ (BOOL) validateNickname:(NSString *)nickname
+{
+ NSString *nicknameRegex = @"^[\u4e00-\u9fa5]{4,8}$";
+ NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nicknameRegex];
+ return [passWordPredicate evaluateWithObject:nickname];
+}
+
+//������������������ ���������������������15������18���������������������������������������������������������
++ (BOOL) validateIdentityCard: (NSString *)idCardNumberStr
+{
+ idCardNumberStr = [idCardNumberStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+ NSInteger length = 0;
+ if (!idCardNumberStr)
+ {
+ return NO;
+ }
+ else
+ {
+ length = idCardNumberStr.length;
+ if (length != 15 && length !=18)
+ {
+ return NO;
+ }
+ }
+ /*! ������������ */
+ NSArray *areasArray =@[@"11", @"12", @"13", @"14", @"15", @"21", @"22", @"23", @"31", @"32", @"33", @"34", @"35", @"36", @"37", @"41", @"42", @"43", @"44", @"45", @"46", @"50", @"51", @"52", @"53", @"54", @"61", @"62", @"63", @"64", @"65", @"71", @"81", @"82", @"91"];
+
+ NSString *valueStart2 = [idCardNumberStr substringToIndex:2];
+ BOOL areaFlag = NO;
+ for (NSString *areaCode in areasArray)
+ {
+ if ([areaCode isEqualToString:valueStart2])
+ {
+ areaFlag =YES;
+ break;
+ }
+ }
+ if (!areaFlag)
+ {
+ return NO;
+ }
+
+ NSRegularExpression *regularExpression;
+ NSUInteger numberofMatch;
+
+ NSInteger year = 0;
+ switch (length)
+ {
+ case 15:
+ year = [idCardNumberStr substringWithRange:NSMakeRange(6,2)].intValue +1900;
+
+ if (year % 4 ==0 || (year % 100 ==0 && year % 4 ==0))
+ {
+ /*! ������������������������������ */
+ regularExpression = [[NSRegularExpression alloc] initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$"
+ options:NSRegularExpressionCaseInsensitive
+ error:nil];
+ }
+ else
+ {
+ /*! ������������������������������ */
+ regularExpression = [[NSRegularExpression alloc] initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$"
+ options:NSRegularExpressionCaseInsensitive
+ error:nil];
+ }
+ numberofMatch = [regularExpression numberOfMatchesInString:idCardNumberStr
+ options:NSMatchingReportProgress
+ range:NSMakeRange(0, idCardNumberStr.length)];
+
+ if(numberofMatch > 0)
+ {
+ return YES;
+ }
+ else
+ {
+ return NO;
+ }
+ break;
+ case 18:
+
+ year = [idCardNumberStr substringWithRange:NSMakeRange(6,4)].intValue;
+ if (year % 4 ==0 || (year % 100 ==0 && year % 4 ==0))
+ {
+ /*! ������������������������������ */
+ regularExpression = [[NSRegularExpression alloc] initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$"
+ options:NSRegularExpressionCaseInsensitive
+ error:nil];
+ }
+ else
+ {
+ /*! ������������������������������ */
+ regularExpression = [[NSRegularExpression alloc] initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$"
+ options:NSRegularExpressionCaseInsensitive
+ error:nil];
+ }
+ numberofMatch = [regularExpression numberOfMatchesInString:idCardNumberStr
+ options:NSMatchingReportProgress
+ range:NSMakeRange(0, idCardNumberStr.length)];
+
+ if(numberofMatch > 0)
+ {
+ NSInteger S = ([idCardNumberStr substringWithRange:NSMakeRange(0,1)].intValue + [idCardNumberStr substringWithRange:NSMakeRange(10,1)].intValue) *7 + ([idCardNumberStr substringWithRange:NSMakeRange(1,1)].intValue + [idCardNumberStr substringWithRange:NSMakeRange(11,1)].intValue) *9 + ([idCardNumberStr substringWithRange:NSMakeRange(2,1)].intValue + [idCardNumberStr substringWithRange:NSMakeRange(12,1)].intValue) *10 + ([idCardNumberStr substringWithRange:NSMakeRange(3,1)].intValue + [idCardNumberStr substringWithRange:NSMakeRange(13,1)].intValue) *5 + ([idCardNumberStr substringWithRange:NSMakeRange(4,1)].intValue + [idCardNumberStr substringWithRange:NSMakeRange(14,1)].intValue) *8 + ([idCardNumberStr substringWithRange:NSMakeRange(5,1)].intValue + [idCardNumberStr substringWithRange:NSMakeRange(15,1)].intValue) *4 + ([idCardNumberStr substringWithRange:NSMakeRange(6,1)].intValue + [idCardNumberStr substringWithRange:NSMakeRange(16,1)].intValue) *2 + [idCardNumberStr substringWithRange:NSMakeRange(7,1)].intValue *1 + [idCardNumberStr substringWithRange:NSMakeRange(8,1)].intValue *6 + [idCardNumberStr substringWithRange:NSMakeRange(9,1)].intValue *3;
+ NSInteger Y = S % 11;
+ NSString *M = @"F";
+ NSString *JYM = @"10X98765432";
+ /*! ��������������� */
+ M = [JYM substringWithRange:NSMakeRange(Y,1)];
+ if ([M isEqualToString:[idCardNumberStr substringWithRange:NSMakeRange(17,1)]])
+ {
+ /*! ������ID������������ */
+ return YES;
+ }
+ else
+ {
+ return NO;
+ }
+
+ }
+ else
+ {
+ return NO;
+ }
+ break;
+ default:
+ return NO;
+ break;
+ }
+
+}
+
+#pragma mark - ***** ������IP���������15������18������������
++ (BOOL)ba_isIPAddress:(NSString *)iPAddressStr
+{
+ NSString *pattern = @"((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)";
+ NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
+ NSArray *results = [regex matchesInString:iPAddressStr options:0 range:NSMakeRange(0, iPAddressStr.length)];
+ return results.count > 0;
+}
+
+#pragma mark - ***** ������������������������URL������
++ (BOOL)ba_isUrl:(NSString *)urlStr
+{
+ // NSString* verifyRules=@"^http://([\\w-]+\.)+[\\w-]+(/[\\w-./?%&=]*)?$";
+ // NSPredicate *verifyRulesPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",verifyRules];
+ // return [verifyRulesPre evaluateWithObject:urlStr];
+
+ NSString *pattern = @"\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))";
+ NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
+ NSArray *results = [regex matchesInString:urlStr options:0 range:NSMakeRange(0, urlStr.length)];
+ return results.count > 0;
+}
+
+
+#pragma mark - ***** ������������������
++ (BOOL)ba_isValidTaxNo:(NSString *)taxNo
+{
+ NSString *taxNoRegex = @"[0-9]\\d{13}([0-9]|X)$";
+ NSPredicate *taxNoPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",taxNoRegex];
+
+ return [taxNoPredicate evaluateWithObject:taxNo];
+}
+
+#pragma mark - ***** Mac���������������������
++ (BOOL)ba_isMacAddress:(NSString *)macAddress
+{
+ NSString *macAddRegex = @"([A-Fa-f\\d]{2}:){5}[A-Fa-f\\d]{2}";
+ NSPredicate *macAddressPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",macAddRegex];
+
+ return [macAddressPredicate evaluateWithObject:macAddress];
+}
+
+/** ���������������������������Luhn������
+ * ������ 16 ������������������������������ 6 ������ 622126���622925 ������������7 ��� 15 ���������������������������
+ * ��������������������������������������������������������� 16 ������������������
+ * 16 ������������������������ Luhm ���������������������
+ * 1������������������������ 15 ��������������������������� 1 ��� 15��������������������������������������� 2
+ * 2���������������������������������������������������������������������������������
+ * 3������������������������������������ 10 ���������
+ */
+#pragma mark - ***** ���������������������������Luhn������
++ (BOOL)ba_isBankCardlNumCheck:(NSString *)bankCardlNum
+{
+ NSString *lastNum = [[bankCardlNum substringFromIndex:(bankCardlNum.length-1)] copy];//������������������
+ NSString *forwardNum = [[bankCardlNum substringToIndex:(bankCardlNum.length -1)] copy];//���15���18���
+
+ NSMutableArray * forwardArr = [[NSMutableArray alloc] initWithCapacity:0];
+ for (int i=0; i<forwardNum.length; i++)
+ {
+ NSString * subStr = [forwardNum substringWithRange:NSMakeRange(i, 1)];
+ [forwardArr addObject:subStr];
+ }
+
+ NSMutableArray * forwardDescArr = [[NSMutableArray alloc] initWithCapacity:0];
+ for (int i = (int)(forwardArr.count-1); i> -1; i--)
+ {//���15������������18���������������������
+ [forwardDescArr addObject:forwardArr[i]];
+ }
+
+ NSMutableArray * arrOddNum = [[NSMutableArray alloc] initWithCapacity:0];//���������*2������ < 9
+ NSMutableArray * arrOddNum2 = [[NSMutableArray alloc] initWithCapacity:0];//���������*2������ > 9
+ NSMutableArray * arrEvenNum = [[NSMutableArray alloc] initWithCapacity:0];//���������������
+
+ for (int i=0; i< forwardDescArr.count; i++)
+ {
+ NSInteger num = [forwardDescArr[i] intValue];
+ if (i%2)
+ {//���������
+ [arrEvenNum addObject:[NSNumber numberWithInteger:num]];
+ }
+ else
+ {//���������
+ if (num * 2 < 9)
+ {
+ [arrOddNum addObject:[NSNumber numberWithInteger:num * 2]];
+ }
+ else
+ {
+ NSInteger decadeNum = (num * 2) / 10;
+ NSInteger unitNum = (num * 2) % 10;
+ [arrOddNum2 addObject:[NSNumber numberWithInteger:unitNum]];
+ [arrOddNum2 addObject:[NSNumber numberWithInteger:decadeNum]];
+ }
+ }
+ }
+
+ __block NSInteger sumOddNumTotal = 0;
+ [arrOddNum enumerateObjectsUsingBlock:^(NSNumber * obj, NSUInteger idx, BOOL *stop) {
+ sumOddNumTotal += [obj integerValue];
+ }];
+
+ __block NSInteger sumOddNum2Total = 0;
+ [arrOddNum2 enumerateObjectsUsingBlock:^(NSNumber * obj, NSUInteger idx, BOOL *stop) {
+ sumOddNum2Total += [obj integerValue];
+ }];
+
+ __block NSInteger sumEvenNumTotal =0 ;
+ [arrEvenNum enumerateObjectsUsingBlock:^(NSNumber * obj, NSUInteger idx, BOOL *stop) {
+ sumEvenNumTotal += [obj integerValue];
+ }];
+
+ NSInteger lastNumber = [lastNum integerValue];
+
+ NSInteger luhmTotal = lastNumber + sumEvenNumTotal + sumOddNum2Total + sumOddNumTotal;
+
+ return (luhmTotal%10 ==0)?YES:NO;
+}
+
+//������������������������
++ (BOOL)isPureInt:(NSString*)string
+{
+ NSScanner* scan = [NSScanner scannerWithString:string];
+ int val;
+ return[scan scanInt:&val] && [scan isAtEnd];
+}
+//���������������������������
++ (BOOL)isPureFloat:(NSString*)string
+{
+ NSScanner* scan = [NSScanner scannerWithString:string];
+ float val;
+ return[scan scanFloat:&val] && [scan isAtEnd];
+}
+@end
--
Gitblit v1.8.0