Tools.m 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. //
  2. // Tools.m
  3. // jiaPei
  4. //
  5. // Created by apple on 16/3/12.
  6. // Copyright © 2016年 JCZ. All rights reserved.
  7. //
  8. #import "Tools.h"
  9. #import "SDSoundPlayer.h"
  10. @implementation Tools
  11. + (NSString *)getPathWithFileName:(NSString *)fileName
  12. {
  13. NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
  14. NSString *filePath = [document stringByAppendingPathComponent:fileName];
  15. return filePath;
  16. }
  17. + (NSString *)isWan:(NSString *)string
  18. {
  19. NSString *newString = string;
  20. if (string.length > 4) {
  21. newString = [NSString stringWithFormat:@"%@.%@万",[string substringToIndex:string.length - 4],[string substringWithRange:NSMakeRange(string.length - 4, 1)]];
  22. }
  23. return newString;
  24. }
  25. //播报声音
  26. +(void)playAudioWithString:(NSString *)string
  27. {
  28. SDSoundPlayer *player = [SDSoundPlayer SDSoundPlayerInit];
  29. [player setDefaultWithVolume:-1.0 rate:0.4 pitchMultiplier:-1.0];
  30. [player play:string];
  31. }
  32. //验证是否是电话号码
  33. + (BOOL)isMobileNumber:(NSString *)mobileNum
  34. {
  35. // 电信号段:133/153/180/181/189/177
  36. // 联通号段:130/131/132/155/156/185/186/145/176
  37. // 移动号段:134/135/136/137/138/139/150/151/152/157/158/159/182/183/184/187/188/147/178
  38. // 虚拟运营商:170
  39. NSString *MOBILE = @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[06-8])\\d{8}$";
  40. NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
  41. return [regextestmobile evaluateWithObject:mobileNum];
  42. }
  43. //汉字转拼音
  44. + (NSString *)pinYinFromChinese:(NSString *)chinese
  45. {
  46. if (chinese.length < 1) {
  47. return @"";
  48. }
  49. return [ChineseToPinyin pinyinFromChiniseString:chinese];
  50. }
  51. //根据图片二进制流获取图片格式
  52. + (NSString *)typeForImageData:(NSData *)data {
  53. uint8_t c;
  54. [data getBytes:&c length:1];
  55. switch (c) {
  56. case 0xFF:
  57. return @"jpeg";
  58. case 0x89:
  59. return @"png";
  60. case 0x47:
  61. return @"gif";
  62. case 0x49:
  63. case 0x4D:
  64. return @"tiff";
  65. }
  66. return @"jpg";
  67. }
  68. //烦烦烦 每次返回的都不一样 这里给个方法 解决图片的问题 优先显示photo
  69. + (NSString *)imageStringWithPhotoString:(NSString *)firstString HeadImgString:(NSString *)secondString Type:(NSInteger)type
  70. {
  71. NSString *imgString = @"";
  72. if (type == 1) {
  73. imgString = firstString;
  74. if (imgString && imgString.length > 0) {
  75. NSString *photoString = @"http://fj.jppt.com.cn";
  76. if (imgString && ![imgString hasPrefix:@"http"]){
  77. imgString = [photoString stringByAppendingString:imgString];
  78. }
  79. }else{
  80. imgString = secondString;
  81. if (imgString && ![imgString hasPrefix:@"http"]){
  82. imgString = [imgPreFix stringByAppendingString:imgString];
  83. }
  84. }
  85. }else{
  86. imgString = secondString;
  87. if (imgString && imgString.length > 0) {
  88. if (imgString && ![imgString hasPrefix:@"http"]){
  89. imgString = [imgPreFix stringByAppendingString:imgString];
  90. }
  91. }else{
  92. imgString = firstString;
  93. NSString *photoString = @"http://fj.jppt.com.cn";
  94. if (imgString && ![imgString hasPrefix:@"http"]){
  95. imgString = [photoString stringByAppendingString:imgString];
  96. }
  97. }
  98. }
  99. if (!imgString) {
  100. imgString = @"";
  101. }
  102. return imgString;
  103. }
  104. //获取IDFV
  105. + (NSString *)getIDFV
  106. {
  107. NSString * const KEY_USERNAME_PASSWORD = @"com.danson.jiaPeiS.usernamepassword";
  108. NSString * const KEY_PASSWORD = @"com.danson.jiaPeiS.password";
  109. //测试用 清除keychain中的内容
  110. //[Tools delete:KEY_USERNAME_PASSWORD];
  111. NSMutableDictionary *readUserPwd = (NSMutableDictionary *)[Tools load:KEY_USERNAME_PASSWORD];
  112. //NSLog(@"keychain------><>%@",readUserPwd);
  113. if (!readUserPwd) {
  114. //如果为空 说明是第一次安装 做存储操作
  115. NSString *identifierStr = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
  116. //NSLog(@"identifierStr-----><>%@",identifierStr);
  117. NSMutableDictionary *usernamepasswordKVPairs = [NSMutableDictionary dictionaryWithObject:identifierStr forKey:KEY_PASSWORD];
  118. [Tools save:KEY_USERNAME_PASSWORD data:usernamepasswordKVPairs];
  119. return identifierStr;
  120. }else{
  121. return [readUserPwd objectForKey:KEY_PASSWORD];
  122. }
  123. }
  124. //存
  125. + (void)save:(NSString *)service data:(id)data {
  126. //Get search dictionary
  127. NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
  128. //Delete old item before add new item
  129. SecItemDelete((__bridge CFDictionaryRef)keychainQuery);
  130. //Add new object to search dictionary(Attention:the data format)
  131. [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(__bridge id)kSecValueData];
  132. //Add item to keychain with the search dictionary
  133. SecItemAdd((__bridge CFDictionaryRef)keychainQuery, NULL);
  134. }
  135. + (NSMutableDictionary *)getKeychainQuery:(NSString *)service {
  136. return [NSMutableDictionary dictionaryWithObjectsAndKeys:
  137. (__bridge id)kSecClassGenericPassword,(__bridge id)kSecClass,
  138. service, (__bridge id)kSecAttrService,
  139. service, (__bridge id)kSecAttrAccount,
  140. (__bridge id)kSecAttrAccessibleAfterFirstUnlock,(__bridge id)kSecAttrAccessible,
  141. nil];
  142. }
  143. //取
  144. + (id)load:(NSString *)service {
  145. id ret = nil;
  146. NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
  147. //Configure the search setting
  148. //Since in our simple case we are expecting only a single attribute to be returned (the password) we can set the attribute kSecReturnData to kCFBooleanTrue
  149. [keychainQuery setObject:(__bridge id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];
  150. [keychainQuery setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit];
  151. CFDataRef keyData = NULL;
  152. if (SecItemCopyMatching((__bridge CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) {
  153. @try {
  154. ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData *)keyData];
  155. } @catch (NSException *e) {
  156. NSLog(@"Unarchive of %@ failed: %@", service, e);
  157. } @finally {
  158. }
  159. }
  160. if (keyData)
  161. CFRelease(keyData);
  162. return ret;
  163. }
  164. //删除
  165. + (void)delete:(NSString *)service {
  166. NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
  167. SecItemDelete((__bridge CFDictionaryRef)keychainQuery);
  168. }
  169. @end