// // Copyright (c) 2015年 Dahua. All rights reserved. #import "NSString+LeChange.h" #import "NSData+LeChange.h" #import "NSData+AES.h" #import "NSString+MD5.h" #import "NSData+Base64.h" @implementation NSString(LeChange) - (NSString *)lc_EncryptToServerWithPwd:(NSString *)password { NSString *realPwd = [[[password uppercaseString] stringByAppendingString:@"DAHUAKEY"] lc_MD5Digest]; NSData *srcData = [self dataUsingEncoding:NSUTF8StringEncoding]; NSData *decData = [srcData lc_AES256CBCEncryptWithKey:realPwd iv:@"0a52uuEvqlOLc5TO"]; return [decData base64String]; } - (NSString *)lc_DecryptToServerWithPwd:(NSString *)password { NSData *srcData = [[NSData alloc] initWithBase64EncodedString:self options:0]; NSString *realPwd = [[[password uppercaseString] stringByAppendingString:@"DAHUAKEY"] lc_MD5Digest]; NSData *decData = [srcData lc_AES256CBCDecryptWithKey:realPwd iv:@"0a52uuEvqlOLc5TO"]; NSString *string = [[NSString alloc] initWithData:decData encoding:NSUTF8StringEncoding]; return string ; } #pragma mark - Absent Value - (BOOL)isAbsent { if (self == nil || self.length == 0) { return YES; } return NO; } -(void)setIsAbsent:(BOOL)isAbsent { } #pragma mark - Json Value - (id)lc_jsonValue { NSError *error = nil; id jsonValue = [NSJSONSerialization JSONObjectWithData:[self dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&error]; return jsonValue; } + (NSString*)lc_dictionaryToJson:(NSDictionary *)dic { NSError *parseError = nil; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError]; return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; } #pragma mark - String Type -(BOOL)lc_isStringType:(StringType)type { if (self == nil || self.length == 0) { return NO; } NSString *regex = @"[A-Za-z0-9]"; switch (type) { case StringTypeNumber: regex = @"[0-9]"; break; case StringTypeLetter: regex = @"[A-Za-z]"; break; case StringTypeLetterAndNumber: regex = @"[A-Za-z0-9]"; break; } regex = [NSString stringWithFormat:@"^%@{%lu}$", regex, (unsigned long)self.length]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; if (![predicate evaluateWithObject:self]) { return NO; } return YES; } #pragma mark - Int To String + (NSString *)lc_stringWithInt:(NSInteger)intNum { return [NSString stringWithFormat:@"%ld", (long)intNum]; } #pragma mark - Size With Font - (CGSize)lc_sizeWithFont:(UIFont *)font size:(CGSize)size { return [self boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:font} context:nil].size; } - (CGFloat)lc_widthWithFont:(UIFont *)font { return [self boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:font} context:nil].size.width; } //获取文字所占空间的大小 - (CGRect)lc_rectWithFont:(UIFont *)font { if (self == nil || [self length] == 0) { return CGRectMake(0, 0, 0, 0); } NSString* fullDescAndTagStr =self; NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:fullDescAndTagStr]; NSRange allRange = [fullDescAndTagStr rangeOfString:fullDescAndTagStr]; [attrStr addAttribute:NSFontAttributeName value:font range:allRange]; float labelWidth = 225; NSStringDrawingOptions options = NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading; return [attrStr boundingRectWithSize:CGSizeMake(labelWidth, CGFLOAT_MAX) options:options context:nil]; } + (BOOL)lc_isEmpty:(NSString*)content { if (content == nil || content.length == 0) { return YES; } return NO; } #pragma mark - AES & Base64 - (NSString *)lc_base64String { NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding]; NSString *base64Str = [data base64EncodedStringWithOptions:0]; return base64Str; } - (NSString *)lc_decodeBase64 { NSData *dataDecoded = [[NSData alloc] initWithBase64EncodedString:self options:0]; NSString *string = [[NSString alloc] initWithData:dataDecoded encoding:NSUTF8StringEncoding]; return string; } - (NSString *)lc_AES256Encrypt:(NSString *)key { const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data = [NSData dataWithBytes:cstr length:self.length]; //对数据进行加密 NSData *result = [data lc_AES256Encrypt:key]; //转换为2进制字符串 if (result && result.length > 0) { Byte *datas = (Byte*)[result bytes]; NSMutableString *output = [NSMutableString stringWithCapacity:result.length * 2]; for(int i = 0; i < result.length; i++){ [output appendFormat:@"%02x", datas[i]]; } return output; } return nil; } - (NSString *)lc_AES256Decrypt:(NSString *)key { //转换为2进制Data NSMutableData *data = [NSMutableData dataWithCapacity:self.length / 2]; unsigned char whole_byte; char byte_chars[3] = {'\0','\0','\0'}; int i; for (i=0; i < [self length] / 2; i++) { byte_chars[0] = [self characterAtIndex:i*2]; byte_chars[1] = [self characterAtIndex:i*2+1]; whole_byte = strtol(byte_chars, NULL, 16); [data appendBytes:&whole_byte length:1]; } //对数据进行解密 NSData* result = [data lC_AES256Decrypt:key]; if (result && result.length > 0) { return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]; } return nil; } - (NSString *)lc_phoneNumberWithEncrypt { NSString *regEx = @"^\\d{11}$"; NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regEx]; if ([pred evaluateWithObject:self]) { //如果是11位数字 return [self stringByReplacingCharactersInRange:NSMakeRange(3, 4) withString:@"****"]; } return self; } - (BOOL)lc_matchTheFormat:(NSString*)format { NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", format]; return [pred evaluateWithObject:self]; } - (BOOL)lc_strictContainString:(NSString*)matchString split:(NSString*)splitString { NSArray *strings = [self componentsSeparatedByString:splitString]; for(NSString *item in strings) { if ([item isEqualToString:matchString]) { return YES; } } return NO; } - (BOOL)lc_isValidIphoneNum { NSString *regex = @"0?(13|14|15|17|18)[0-9]{9}"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; return [predicate evaluateWithObject:self]; } - (BOOL)lc_isValidEmail { ///原 \\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14} NSString *regex = @"\\w[-\\w.+]*@([-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; return [predicate evaluateWithObject:self]; } - (BOOL)lc_isAllNum { NSString *regex = @"\\d+"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; return [predicate evaluateWithObject:self]; } @end