From 3e8437ae559487362fae3525beb79c534c213a51 Mon Sep 17 00:00:00 2001
From: 单军华
Date: Thu, 12 Jul 2018 13:44:34 +0800
Subject: [PATCH] bug修复和功能优化

---
 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