// // Copyright © 2020 dahua. All rights reserved. // #import "NSString+ScanResultAnalysis.h" #import "LCQRCode.h" #import static const void *KEY_CODE_ANALYSIS = @"KEY_CODE_ANALYSIS"; @interface NSString () /// @property (strong, nonatomic) LCQRCode *codeAnalysis; @end @implementation NSString (ScanResultAnalysis) - (NSString *)SNCode { // NSString *regex = @"(SN:[A-Za-z0-9]{10,32})"; // NSRegularExpression *regular = [[NSRegularExpression alloc]initWithPattern:regex options:NSRegularExpressionDotMatchesLineSeparators error:nil]; // NSArray *resultArray = [regular matchesInString:self options:0 range:NSMakeRange(0, self.length)]; // if (resultArray.count == 0) { // return nil; // } // NSTextCheckingResult *result = resultArray[0]; // NSString *textStr = [[self substringWithRange:result.range] substringFromIndex:3]; // return textStr; return self.codeAnalysis.deviceSN; } - (NSString *)SCCode { // NSString *regex = @"(SC:[A-Za-z0-9]{8})"; // NSRegularExpression *regular = [[NSRegularExpression alloc]initWithPattern:regex options:NSRegularExpressionDotMatchesLineSeparators error:nil]; // NSArray *resultArray = [regular matchesInString:self options:0 range:NSMakeRange(0, self.length)]; // if (resultArray.count == 0) { // return [self RC8Code]; // } // NSTextCheckingResult *result = resultArray[0]; // NSString *textStr = [[self substringWithRange:result.range] substringFromIndex:3]; // return textStr; return self.codeAnalysis.scCode; } - (NSString *)RC8Code { // NSString *regex = @"(RC:[A-Za-z0-9]{8})"; // NSRegularExpression *regular = [[NSRegularExpression alloc]initWithPattern:regex options:NSRegularExpressionDotMatchesLineSeparators error:nil]; // NSArray *resultArray = [regular matchesInString:self options:0 range:NSMakeRange(0, self.length)]; // if (resultArray.count == 0) { // return nil; // } // NSTextCheckingResult *result = resultArray[0]; // NSString *textStr = [[self substringWithRange:result.range] substringFromIndex:3]; // return textStr; return self.codeAnalysis.identifyingCode; } - (NSString *)DTCode { // NSString *regex = @"(DT:[A-Za-z0-9]+)"; // NSRegularExpression *regular = [[NSRegularExpression alloc]initWithPattern:regex options:NSRegularExpressionDotMatchesLineSeparators error:nil]; // NSArray *resultArray = [regular matchesInString:self options:0 range:NSMakeRange(0, self.length)]; // if (resultArray.count == 0) { // return nil; // } // NSTextCheckingResult *result = resultArray[0]; // NSString *textStr = [[self substringWithRange:result.range] substringFromIndex:3]; // return textStr; return self.codeAnalysis.deviceType; } - (NSString *)RCCode { // NSString *regex = @"(RC:[A-Za-z0-9]{6})"; // NSRegularExpression *regular = [[NSRegularExpression alloc]initWithPattern:regex options:NSRegularExpressionDotMatchesLineSeparators error:nil]; // NSArray *resultArray = [regular matchesInString:self options:0 range:NSMakeRange(0, self.length)]; // if (resultArray.count == 0) { // return nil; // } // NSTextCheckingResult *result = resultArray[0]; // NSString *textStr = [[self substringWithRange:result.range] substringFromIndex:3]; // return textStr; return self.codeAnalysis.identifyingCode; } /** 获取NC码 */ - (NSString *)NCCode { // NSString *regex = @"(NC:[0-9]{3})"; // NSRegularExpression *regular = [[NSRegularExpression alloc]initWithPattern:regex options:NSRegularExpressionDotMatchesLineSeparators error:nil]; // NSArray *resultArray = [regular matchesInString:self options:0 range:NSMakeRange(0, self.length)]; // if (resultArray.count == 0) { // return nil; // } // NSTextCheckingResult *result = resultArray[0]; // NSString *textStr = [[self substringWithRange:result.range] substringFromIndex:3]; // return textStr; return self.codeAnalysis.ncCode; } - (NSInteger)numberWithHexString:(NSString *)hexString { const char *hexChar = [hexString cStringUsingEncoding:NSUTF8StringEncoding]; int hexNumber; sscanf(hexChar, "%x", &hexNumber); return (NSInteger)hexNumber; } /** 是否支持新声波配网 */ - (BOOL)isNetConfigSupportNewSound { NSString *ncCode = [self NCCode]; if (!ncCode) { return NO; } NSInteger ncInt = [self numberWithHexString:ncCode]; if ((ncInt & LC_NC_CODE_TYPE_NEW_SOUND) != 0) { return YES; } return NO; } /** 是否支持老声波配网 */ - (BOOL)isNetConfigSupportOldSound { NSString *ncCode = [self NCCode]; if (!ncCode) { return NO; } NSInteger ncInt = [self numberWithHexString:ncCode]; if ((ncInt & LC_NC_CODE_TYPE_OLD_SOUND) != 0) { return YES; } return NO; } /** 是否支持SmartConfig配网 */ - (BOOL)isNetConfigSupportSmartConfig { NSString *ncCode = [self NCCode]; if (!ncCode) { return NO; } NSInteger ncInt = [self numberWithHexString:ncCode]; if ((ncInt & LC_NC_CODE_TYPE_SMARTCONFIG) != 0) { return YES; } return NO; } /** 是否支持软AP配网 */ - (BOOL)isNetConfigSupportSoftAP { NSString *ncCode = [self NCCode]; if (!ncCode) { return NO; } NSInteger ncInt = [self numberWithHexString:ncCode]; if ((ncInt & LC_NC_CODE_TYPE_SOFTAP) != 0) { return YES; } return NO; } /** 是否支持有线配网 */ - (BOOL)isNetConfigSupportLAN { NSString *ncCode = [self NCCode]; if (!ncCode) { return NO; } NSInteger ncInt = [self numberWithHexString:ncCode]; if ((ncInt & LC_NC_CODE_TYPE_LAN) != 0) { return YES; } return NO; } /** 是否支持蓝牙配网 */ - (BOOL)isNetConfigSupportBLE { NSString *ncCode = [self NCCode]; if (!ncCode) { return NO; } NSInteger ncInt = [self numberWithHexString:ncCode]; if ((ncInt & LC_NC_CODE_TYPE_BLE) != 0) { return YES; } return NO; } /** 是否支持二维码配网 */ - (BOOL)isNetConfigSupportQRCode { NSString *ncCode = [self NCCode]; if (!ncCode) { return NO; } NSInteger ncInt = [self numberWithHexString:ncCode]; if ((ncInt & LC_NC_CODE_TYPE_QRCODE) != 0) { return YES; } return NO; } //MARK: - Private Methods - (LCQRCode *)codeAnalysis { id obj = objc_getAssociatedObject(self, KEY_CODE_ANALYSIS); if (!obj) { LCQRCode * code = [LCQRCode new]; [code pharseQRCode:self]; [self setCodeAnalysis:code]; obj = code; } return obj; } - (void)setCodeAnalysis:(LCQRCode *)codeAnalysis { objc_setAssociatedObject(self, KEY_CODE_ANALYSIS, codeAnalysis, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } @end