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