| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317 |
- //
- // NewUtils.m
- // MingMen
- //
- // Created by 罗云飞 on 2017/3/9.
- // Copyright © 2017年 罗云飞. All rights reserved.
- //
- #import "NewUtils.h"
- #import <CommonCrypto/CommonDigest.h>
- #import <UIKit/UIKit.h>
- #import <math.h>
- #import <net/if.h>
- #import <net/if_dl.h>
- #import <mach/mach.h>
- #import <mach/mach_host.h>
- #import <sys/socket.h>
- #import <sys/sysctl.h>
- #import <sys/types.h>
- #import <ifaddrs.h>
- #include <arpa/inet.h>
- #include <netdb.h>
- #include <net/if.h>
- #include <ifaddrs.h>
- #import <dlfcn.h>
- #import <SystemConfiguration/SystemConfiguration.h>
- @implementation NewUtils
- /*
- static NSString* gAccount = @"";//账号
- static NSString* gPassword = @"";//密码
- static NSString* gAuthorid = @"";//账号ID
- static NSString* gUserName = @"";//用户名称
- static NSString* gUserHeadImage = @"";//用户头像
- static NSString* gUdid = @"";//UDID
- static NSString* gAppkey = @"";//appkey
- static NSString* gReg_time = @"";//注册时间
- static NSString* gMobile_phone = @"";//手机号
- static NSString* gShoppingCartNumber = @"0";//购物车数量
- static BOOL gShoppingCartFlag = NO;
- */
- static NSString* gPGCCert = @"";//PGC认证才可以选择专辑 0、未认证 1、已认证
- //是否PGC认证
- +(void)setPGCCert:(NSString*)pgcCert
- {
- gPGCCert = pgcCert;
- }
- +(NSString*)getPGCCert
- {
- return gPGCCert;
- }
- /*
- //用户名称
- +(void)setUserName:(NSString*)userName
- {
- gUserName = userName;
- }
- +(NSString*)getUserName
- {
- return gUserName;
- }
- //用户头像
- +(void)setUserHeadImage:(NSString*)userHeadImage
- {
- gUserHeadImage = userHeadImage;
- }
- +(NSString*)getUserHeadImage
- {
- return gUserHeadImage;
- }
- //账号
- +(void)setAccount:(NSString*)account
- {
- gAccount = account;
- }
- +(NSString*)getAccount
- {
- return gAccount;
- }
- //密码
- +(void)setPassword:(NSString*)password
- {
- gPassword = password;
- }
- +(NSString*)getPassword
- {
- return gPassword;
- }
- //账号ID
- +(void)setAuthorid:(NSString*)authorid
- {
- gAuthorid = authorid;
- }
- +(NSString*)getAuthorid
- {
- return gAuthorid;
- }
- //UDID
- +(void)set_UDID:(NSString*)udid
- {
- gUdid = udid;
- }
- + (NSString*)get_UDID
- {
- return gUdid;//
- }
- //验证码
- +(void)set_Appkey:(NSString *)appkey
- {
- gAppkey = appkey;
- }
- +(NSString*)get_Appkey
- {
- return gAppkey;
- }
- //注册时间
- +(void)set_reg_time:(NSString *)time
- {
- gReg_time = time;
- }
- +(NSString*)get_reg_time
- {
- return gReg_time;
- }
- //手机号
- +(void)set_mobile_phone:(NSString *)phone
- {
- gMobile_phone = phone;
- }
- +(NSString*)get_mobile_phone
- {
- return gMobile_phone;
- }
- //购物车数量
- +(void)setShoppingCartNumber:(NSString *)number
- {
- gShoppingCartNumber = number;
- }
- +(NSString *)getShoppingCartNumber
- {
- return gShoppingCartNumber;
- }
- //购物车跳转登录
- +(void)setShoppingCartLogin:(BOOL)flag
- {
- gShoppingCartFlag = flag;
- }
- +(BOOL)getShoppingCartLogin
- {
- return gShoppingCartFlag;
- }
- //农博汇项目请求接口的实时时间
- + (NSString *)get_req_time
- {
- //年月日时分秒毫秒
- NSTimeInterval curTime = [[NSDate date] timeIntervalSince1970];
- double dtime = (double)curTime;
- NSDateFormatter* format = [[NSDateFormatter alloc] init];
- [format setDateFormat:@"yyyyMMddHHmmss"];
- NSString* timeString = [format stringFromDate:[NSDate dateWithTimeIntervalSince1970:dtime]];
-
-
- // NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
- // NSTimeInterval a=[dat timeIntervalSince1970]*1000;
- // NSString *timeString = [NSString stringWithFormat:@"%f", a];////转为字符型
-
-
- // NSDate *date = [NSDate date];
- // NSString *timeString = [NSString stringWithFormat:@"%ld", (long)[date timeIntervalSince1970]];
-
- return timeString;
- }
- //公用接口的请求时间
- +(NSString*)get_publicInterface_time
- {
- NSDate *date = [NSDate date];
- return [NSString stringWithFormat:@"%ld", (long)[date timeIntervalSince1970]];
- }
- */
- /*验证正则表达式*/
- + (BOOL)matchRegularExpression:(NSString*)text match:(NSString*)match
- {
- NSError *error;
-
- NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:match options:0 error:&error];
-
- if (regex != nil)
- {
- NSTextCheckingResult *firstMatch = [regex firstMatchInString:text options:0 range:NSMakeRange(0, [text length])];
-
- if (firstMatch)
- {
- return YES;
- }
- }
-
- return NO;
-
- }
- /**
- @method 获取指定宽度width,字体大小fontSize,字符串value的高度
- @param value 待计算的字符串
- @param fontSize 字体的大小
- @param width 限制字符串显示区域的宽度
- @result float 返回的高度
- */
- + (CGFloat) heightforString:(NSString *)value andWidth:(CGFloat)width fontSize:(CGFloat)fontSize{
- return [value boundingRectWithSize:CGSizeMake(width, 1000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:fontSize] forKey:NSFontAttributeName] context:nil].size.height;
-
- }
- + (CGFloat) heightforString:(NSString *)value andHeight:(CGFloat)height fontSize:(CGFloat)fontSize{
- return [value boundingRectWithSize:CGSizeMake(100000, height) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:fontSize] forKey:NSFontAttributeName] context:nil].size.width;
- }
- + (CGFloat) heightforString:(NSString *)value andHeight:(CGFloat)height XfontSize:(CGFloat)XfontSize{
- return [value boundingRectWithSize:CGSizeMake(100000, height) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:[UIFont boldSystemFontOfSize:XfontSize] forKey:NSFontAttributeName] context:nil].size.width;
- }
- + (CGFloat) heightforString:(NSString *)value andWidth:(CGFloat)width AutofontSize:(CGFloat)AutofontSize{
- return [value boundingRectWithSize:CGSizeMake(width, 1000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:NewAutoFont(AutofontSize) forKey:NSFontAttributeName] context:nil].size.height;
- }
- + (CGFloat) heightforString:(NSString *)value andHeight:(CGFloat)height AutofontSize:(CGFloat)AutofontSize{
- return [value boundingRectWithSize:CGSizeMake(100000, height) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:NewAutoFont(AutofontSize) forKey:NSFontAttributeName] context:nil].size.width;
- }
- +(BOOL)luhn:(NSString*)bank//for checkBankCard
- {
- int s1 = 0;
- int s2 = 0;
-
- NSString* reverse = [NewUtils reverseString:bank];
- NSInteger length = reverse.length;
- NSRange range;
-
- for (int i=0; i<length; i++)
- {
- range = NSMakeRange (i, 1);
- int digit = [[reverse substringWithRange:range] intValue];
- if(i % 2 == 0)//this is for odd digits, they are 1-indexed in the algorithm
- {
- s1 += digit;
- }
- else//add 2 * digit for 0-4, add 2 * digit - 9 for 5-9
- {
- s2 += 2 * digit;
- if(digit >= 5)
- {
- s2 -= 9;
- }
- }
- }
-
- return (s1 + s2) % 10 == 0;
- }
- +(NSString*)reverseString:(NSString*)str
- {
- NSUInteger len = [str length];
- NSMutableString *reverse = [NSMutableString stringWithCapacity:len];
- while(len>0)
- {
- //从后取一个字符
- unichar c = [str characterAtIndex:--len];
- NSString *s = [NSString stringWithFormat:@"%C",c];
- [reverse appendString:s];
- }
- return reverse;
- }
- /*银行卡号码验证*/
- +(BOOL)checkBankCard:(NSString*)bank
- {
- NSString* mach = @"^(^\\d{16}$|^\\d{19}$)$";
-
- if (bank.length <= 0 || ![NewUtils matchRegularExpression:bank match:mach])
- {
- return NO;
- }
-
- return [NewUtils luhn:bank];
- }
- /*身份证的判断*/
- +(BOOL)checkIdentity:(NSString*)identity
- {
- if (identity.length <= 0)
- {
- return false;
- }
-
- if([NewUtils checkCid:identity] == 0)
- {
- return true;
- }
-
- return false;
- }
- +(int) checkCid:(NSString*)identity
- {
- /**
- * 0:合法 1:非法格式 2:非法地区 3:非法生日 4:非法校验
- * */
- NSString* match = @"^(^\\d{15}$|^\\d{18}$|^\\d{17}(\\d|X|x))$";
- if (![NewUtils matchRegularExpression:identity match:match])
- {
- return 1;
- }
-
- //NSArray* areas = [NSArray arrayWithObjects:@"", @"安微",@"",nil];
-
- NSArray* areas = [NSArray arrayWithObjects:@"", @"", @"", @"", @"", @"", @"", @"", @"", @"", @"", @"北京", @"天津", @"河北", @"山西", @"内蒙古", @"", @"",@"", @"", @"", @"辽宁", @"吉林", @"黑龙江", @"", @"", @"", @"", @"", @"", @"", @"上海", @"江苏", @"浙江", @"安微", @"福建", @"江西", @"山东", @"", @"",@"", @"河南", @"湖北", @"湖南", @"广东", @"广西", @"海南", @"", @"", @"", @"重庆", @"四川", @"贵州", @"云南", @"西藏", @"", @"", @"", @"", @"", @"", @"陕西",@"甘肃", @"青海", @"宁夏", @"新疆", @"", @"", @"", @"", @"", @"台湾", @"", @"", @"", @"", @"", @"", @"", @"", @"", @"香港", @"澳门", @"",@"", @"", @"", @"", @"", @"", @"", @"国外", @"", @"", @"", @"", @"", @"", @"", @"", nil];
-
- // 地区
- NSRange range = NSMakeRange (0, 2);
- int areacode = [[identity substringWithRange:range] intValue];
- NSString* string = [areas objectAtIndex:areacode];
-
- if (string.length == 0)
- {
- return 2;
- }
-
- // 生日
- NSString* dateStrSrc = nil;
-
- if (identity.length == 18)
- {
- range = NSMakeRange (6, 8);
- dateStrSrc = [identity substringWithRange:range];
- }
- else
- {
- range = NSMakeRange (6, 6);
- dateStrSrc = [NSString stringWithFormat:@"%d%@",19,[identity substringWithRange:range]];
- }
-
- //range = NSMakeRange (0, 4);
- // NSString* str = [dateStrSrc substringWithRange:range];
- //range = NSMakeRange (4, 2);
- NSString* str1 = nil;//[dateStrSrc substringWithRange:range];
- //range = NSMakeRange (6, 2);
- NSString* str2 = nil;//[dateStrSrc substringWithRange:range];
- //NSString* dateStr = [NSString stringWithFormat:@"%@-%@-%@",str,str1,str2];
- // 校验位比对
- if (identity.length == 18)
- {
- NSMutableArray* wi = [NSMutableArray arrayWithCapacity:17];
-
- for (int i=0; i<17; i++)
- {
- int k = pow(2,(17-i));
- int v = k % 11;
- str2 = [NSString stringWithFormat:@"%d",v];
- [wi addObject:str2];
- }
-
- int sum = 0;
- int t = 0;
- int t2 = 0;
-
- // 进行加权求和
- for (int i = 0; i < 17; i++)
- {
- range = NSMakeRange (i, 1);
- t = [[identity substringWithRange:range] intValue];
- t2 = [[wi objectAtIndex:i] intValue];
- sum += t * t2;
- }
-
- // 取模运算,得到模值
- int code = sum % 11;
- NSString* checkCode = @"10X98765432";
- range = NSMakeRange (code, 1);
- NSString* check = [checkCode substringWithRange:range];
- range = NSMakeRange (17, 1);
- str1 = [identity substringWithRange:range];
- if (NSOrderedSame != [str1 compare:check options:NSCaseInsensitiveSearch])
- {
- return 4;
- }
- }
- // 男女
- if (identity.length == 18)
- {
- range = NSMakeRange (16, 1);
- str1 = [identity substringWithRange:range];
-
- if ([str1 intValue]%2 == 1)
- {
- //NSLog(@"sex = 男");
- }
- else
- {
- //NSLog(@"sex = 女");
- }
- }
- else
- {
- range = NSMakeRange (13, 1);
- str1 = [identity substringWithRange:range];
-
- if ([str1 intValue]%2 == 1)
- {
- //NSLog(@"sex = 男");
- }
- else
- {
- //NSLog(@"sex = 女");
- }
- }
-
- return 0;
- }
- +(BOOL)checkMobilePhone:(NSString*) mobilePhone
- {
- if (mobilePhone.length <= 0)
- {
- return NO;
- }else if (mobilePhone.length == 11)
- {
- return YES;
- }
-
-
-
- if (mobilePhone.length <= 0)
- {
- return NO;
- }
-
- NSArray * mobilePhoneStarts = [NSArray arrayWithObjects:@"106|移动", @"130|联通", @"131|联通", @"132|联通", @"133|电信", @"134|移动", @"135|移动", @"136|移动", @"137|移动", @"138|移动", @"139|移动",@"145|联通", @"147|移动", @"150|移动", @"152|移动", @"153|电信", @"155|联通", @"156|联通", @"157|移动", @"158|移动", @"159|移动",@"180|电信", @"181|电信", @"182|移动", @"183|移动",@"184|移动", @"185|联通", @"186|联通", @"187|移动", @"188|移动", @"189|电信",@"151|移动",@"177|电信",nil];
-
- NSString* regex1MobilePhone = @"^\\d{11}$";
- NSString* regex2MobilePhone = @"^(86)\\d{11}$";
- NSString* regex3MobilePhone = @"^(\\+86)\\d{11}$";
-
- NSRange range = NSMakeRange (0, 3);
- if ([NewUtils matchRegularExpression:mobilePhone match:regex1MobilePhone])
- {
- NSString* temp1 = nil;
- NSString* temp2 = nil;
-
- for (NSString* mobilePhoneStart in mobilePhoneStarts)
- {
- temp1 = [mobilePhoneStart substringWithRange:range];
- temp2 = [mobilePhone substringWithRange:range];
- if (NSOrderedSame == [temp1 compare:temp2 options:NSCaseInsensitiveSearch])
- {
- return YES;
- }
- }
-
-
- }
-
- if ([NewUtils matchRegularExpression:mobilePhone match:regex2MobilePhone])
- {
- NSString* temp1 = nil;
- NSString* temp2 = nil;
- for (NSString* mobilePhoneStart in mobilePhoneStarts)
- {
- temp1 = [mobilePhoneStart substringWithRange:range];
- range = NSMakeRange (2, 3);
- temp2 = [mobilePhone substringWithRange:range];
-
- if (NSOrderedSame == [temp1 compare:temp2 options:NSCaseInsensitiveSearch])
- {
- return YES;
- }
- }
- }
-
- if ([NewUtils matchRegularExpression:mobilePhone match:regex3MobilePhone])
- {
- NSString* temp1 = nil;
- NSString* temp2 = nil;
-
- for (NSString* mobilePhoneStart in mobilePhoneStarts)
- {
- temp1 = [mobilePhoneStart substringWithRange:range];
- range = NSMakeRange (3, 3);
- temp2 = [mobilePhone substringWithRange:range];
-
- if (NSOrderedSame == [temp1 compare:temp2 options:NSCaseInsensitiveSearch])
- {
- return YES;
- }
- }
- }
-
- return NO;
- }
- /*数字检测*/
- + (BOOL)checkInterNum:(NSString *)num
- {
- NSScanner* scan = [NSScanner scannerWithString:num];
-
- int val;
-
- return [scan scanInt:&val] && [scan isAtEnd];
- }
- /*检测中文*/
- + (BOOL)checkName:(NSString *)name
- {
- if (name.length <= 0)
- {
- return NO;
- }
-
- NSString* mach = @"^[\u4e00-\u9fa5]([\u4e00-\u9fa5]){1,6}$";
-
- return [NewUtils matchRegularExpression:name match:mach];
- }
- /*判断密码 特殊符号跟中文不通过*/
- + (BOOL)checkPassword:(NSString *)password
- {
- if (password.length <= 0)
- {
- return NO;
- }
-
- NSString* mach = @"^[a-zA-Z0-9]{6,20}$";
-
- return [NewUtils matchRegularExpression:password match:mach];
- }
- /*特殊符号*/
- +(BOOL)cheeckNotChina:(NSString*)number
- {
-
- if (number.length <= 0)
- {
- return NO;
- }
-
- NSString* mach = @"/^([\u4E00-\u9FA5]|\\w)*$/";
-
- return [NewUtils matchRegularExpression:number match:mach];
-
- }
- + (BOOL)checkEmail:(NSString *)email
- {
- if (email.length <= 0)
- {
- return NO;
- }
-
- NSString* mach = @"^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$";
-
- return [NewUtils matchRegularExpression:email match:mach];
- }
- /**
- 压图片质量
- 压图片质量和缩小图片大小相结合
- @param image image
- @return Data
- */
- + (NSData *)zipImageWithImage:(UIImage *)image
- {
- if (!image) {
- return nil;
- }
- CGFloat maxFileSize = 32*1024;
- CGFloat compression = 0.9f;
- NSData *compressedData = UIImageJPEGRepresentation(image, compression);
- while ([compressedData length] > maxFileSize) {
- compression *= 0.9;
- compressedData = UIImageJPEGRepresentation([NewUtils compressImage:image newWidth:image.size.width*compression], compression);
- }
- return compressedData;
- }
- /**
- * 等比缩放本图片大小
- *
- * @param newImageWidth 缩放后图片宽度,像素为单位
- *
- * @return self-->(image)
- */
- + (UIImage *)compressImage:(UIImage *)image newWidth:(CGFloat)newImageWidth
- {
- if (!image) return nil;
- float imageWidth = image.size.width;
- float imageHeight = image.size.height;
- float width = newImageWidth;
- float height = image.size.height/(image.size.width/width);
-
- float widthScale = imageWidth /width;
- float heightScale = imageHeight /height;
-
- // 创建一个bitmap的context
- // 并把它设置成为当前正在使用的context
- UIGraphicsBeginImageContext(CGSizeMake(width, height));
-
- if (widthScale > heightScale) {
- [image drawInRect:CGRectMake(0, 0, imageWidth /heightScale , height)];
- }
- else {
- [image drawInRect:CGRectMake(0, 0, width , imageHeight /widthScale)];
- }
-
- // 从当前context中创建一个改变大小后的图片
- UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
- // 使当前的context出堆栈
- UIGraphicsEndImageContext();
-
- return newImage;
- }
- /*图片质量进行压缩*/
- - (NSData *)returnsTheSizeAccordingToThePicture:(UIImage *)image
- {
- NSData *imageData1=UIImagePNGRepresentation(image);
- NSData *imageData;
-
- NSInteger sum=[self setCalculatingPictureSize:imageData1];
- switch (sum) {
- case 0:{//少于300KB
- imageData=UIImageJPEGRepresentation(image, 1.0f);
- }
- break;
- case 1:{//超过300kb少于1000kb
- imageData=UIImageJPEGRepresentation(image, 0.8f);
- }
- break;
- case 2:{//超过1000KB少于2000kb
- imageData=UIImageJPEGRepresentation(image, 0.65f);
- }
- break;
- case 3:{//超过20000KB
- imageData=UIImageJPEGRepresentation(image, 0.5f);
- }
- break;
- default:
- break;
- }
-
- return imageData;
- }
- //用于计算图片大小
- - (NSInteger)setCalculatingPictureSize:(NSData *)image
- {
- NSInteger sum=0;
- CGFloat scale=(image.length/1024);
- if (scale>300&&scale<=1000) {
- sum=1;
- }else if(scale>1000&&scale<=2000){
- sum=2;
- }else if (scale>2000){
- sum=3;
- }
-
- return sum;
- }
- /**
- * 图片压缩到指定大小
- * @param targetSize 目标图片的大小
- * @param sourceImage 源图片
- * @return 目标图片
- */
- + (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize withSourceImage:(UIImage *)sourceImage
- {
- UIImage *newImage = nil;
- CGSize imageSize = sourceImage.size;
- CGFloat width = imageSize.width;
- CGFloat height = imageSize.height;
- CGFloat targetWidth = targetSize.width;
- CGFloat targetHeight = targetSize.height;
- CGFloat scaleFactor = 0.0;
- CGFloat scaledWidth = targetWidth;
- CGFloat scaledHeight = targetHeight;
- CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
- if (CGSizeEqualToSize(imageSize, targetSize) == NO)
- {
- CGFloat widthFactor = targetWidth / width;
- CGFloat heightFactor = targetHeight / height;
- if (widthFactor > heightFactor)
- scaleFactor = widthFactor; // scale to fit height
- else
- scaleFactor = heightFactor; // scale to fit width
- scaledWidth= width * scaleFactor;
- scaledHeight = height * scaleFactor;
- // center the image
- if (widthFactor > heightFactor)
- {
- thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
- }
- else if (widthFactor < heightFactor)
- {
- thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
- }
- }
- UIGraphicsBeginImageContext(targetSize); // this will crop
- CGRect thumbnailRect = CGRectZero;
- thumbnailRect.origin = thumbnailPoint;
- thumbnailRect.size.width= scaledWidth;
- thumbnailRect.size.height = scaledHeight;
-
- [sourceImage drawInRect:thumbnailRect];
- newImage = UIGraphicsGetImageFromCurrentImageContext();
- if(newImage == nil)
- NSLog(@"could not scale image");
-
- //pop the context to get back to the default
- UIGraphicsEndImageContext();
-
- return newImage;
- }
- /*图片拉伸*/
- + (UIImage *)stretchImage:(UIImage *)img edgeInsets:(UIEdgeInsets)inset
- {
- if ([img respondsToSelector:@selector(resizableImageWithCapInsets:resizingMode:)])
- {
- img = [img resizableImageWithCapInsets:inset resizingMode:UIImageResizingModeStretch];
- }
- else if ([img respondsToSelector:@selector(resizableImageWithCapInsets:)])
- {
- img = [img resizableImageWithCapInsets:inset];
- }
-
- return img;
- }
- /*字符串转DATE*/
- +(NSString*)dataToString:(NSData*)data
- {
- return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
- }
- /*DATA转字符串*/
- +(NSData*)stringToData:(NSString*)string
- {
- return [string dataUsingEncoding: NSASCIIStringEncoding];
- }
- /*转化日期*/
- + (NSDateComponents *)componentsOfDate:(NSDate *)date
- {
- NSDate *aDate = date ? date : [NSDate date];
- NSCalendar *calendar = [NSCalendar currentCalendar];
- unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit;
-
- return [calendar components:unitFlags fromDate:aDate];
- }
- + (NSString *)stringToFromDate:(NSDate *)date
- {
- NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
- [formatter setDateFormat:@"yyyyMMddHHmmssSSS"];//@"yyyy-MM-dd HH:mm:ss:SSS"
- return [formatter stringFromDate:date];
- }
- /*返回1970年距离至今的时间差*/
- + (NSString *)returnTime
- {
- NSDate *date = [NSDate date];
- return [NSString stringWithFormat:@"%ld", (long)[date timeIntervalSince1970]];
- }
- /*判断数字输入错误的集合*/
- + (NSInteger)doTextFieldDelegate:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
- {
- NSInteger result = 0;
- NSInteger length = [textField.text length] + [string length];
-
- if (range.length > 0)
- {
- length--;
- }
-
- if (length > 0)
- {
- if (textField.text.length <=0)
- {
- if (string.length >=2)
- {
- if ([[string substringToIndex:1] isEqualToString:@"0"])
- {
- result = 6;
- }
- }
- }
-
- if ([textField.text isEqualToString:@"0"])
- {
- if (![string isEqualToString:@"."])
- {
- result = 5;
- }
- }
-
- if(length > 8)//大于八位数
- {
- result = 3;
- }
- else
- {
- NSRange textRange = [textField.text rangeOfString:@"."];
- NSArray* textArr = [textField.text componentsSeparatedByString:@"."];
-
- if (textRange.length > 0)//如果已经有小数点时
- {
- if ([[textArr objectAtIndex:1] length]>=2 && string.length>0)//只能保留二位小数
- {
- result = 1;
- }
- }
- else //如果还没有小数点时
- {
- if ([string isEqualToString:@"."])//输入小数点时
- {
- if ([textField.text length] <= 0)//第一位不能输入小数点
- {
- result = 2;
- }
- }
- }
- }
- }
-
- return result;
- }
- /*拨打电话*/
- +(void)callTel:(NSString*)tel
- {
- NSMutableString * str=[[NSMutableString alloc] initWithCapacity:50];
- [str appendString:@"tel://"];
- [str appendString:tel];
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
- }
- /*弹框*/
- + (void)alertWithMsg:(NSString*)msg delegate:(id<UIAlertViewDelegate>)sender andTag:(NSInteger)tag title:(NSString *)title cancelButtonTitle:(NSString*)cancelButtonTitle otherButtonTitles1:(NSString *)otherButtonTitles1 otherButtonTitles2:(NSString *)otherButtonTitles2 otherButtonTitles3:(NSString *)otherButtonTitles3 otherButtonTitles4:(NSString *)otherButtonTitles4 otherButtonTitles5:(NSString *)otherButtonTitles5 otherButtonTitles6:(NSString *)otherButtonTitles6
- {
- UIAlertView *view = [[UIAlertView alloc] initWithTitle:title message:msg delegate:sender cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles1,otherButtonTitles2,otherButtonTitles3,otherButtonTitles4,otherButtonTitles5,otherButtonTitles6, nil];
- view.tag = tag;
- [view show];
- }
- + (NSString *) getSysInfoByName:(char *)typeSpecifier
- {
- size_t size;
- sysctlbyname(typeSpecifier, NULL, &size, NULL, 0);
- char *answer = malloc(size);
- sysctlbyname(typeSpecifier, answer, &size, NULL, 0);
- NSString *results = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding];
- free(answer);
- return results;
- }
- //
- + (NSString *) platform
- {
- return [NewUtils getSysInfoByName:"hw.machine"];
- }
- /*iphone/iPad类型及适配*/
- + (NSString *) simplePlatformString
- {
- NSString *platform = [NewUtils platform];
- // NSLog(@"手机型号 == %@",platform);
-
- if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G (A1203)";
- if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G (A1241/A1324)";
- if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS (A1303/A1325)";
- if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (A1332)";
- if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (A1332)";
- if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (A1349)";
- if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S (A1387/A1431)";
- if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (A1428)";
- if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (A1429/A1442)";
- if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (A1456/A1532)";
- if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (A1507/A1516/A1526/A1529)";
- if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (A1453/A1533)";
- if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (A1457/A1518/A1528/A1530)";
- if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus (A1522/A1524)";
- if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6 (A1549/A1586)";
- if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
- if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6 Plus s";
-
- if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G (A1213)";
- if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G (A1288)";
- if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G (A1318)";
- if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G (A1367)";
- if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G (A1421/A1509)";
-
- if ([platform isEqualToString:@"iPad1,1"]) return @"iPad 1G (A1219/A1337)";
-
- if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (A1395)";
- if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2 (A1396)";
- if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2 (A1397)";
- if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2 (A1395+New Chip)";
- if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini 1G (A1432)";
- if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini 1G (A1454)";
- if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini 1G (A1455)";
-
- if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3 (A1416)";
- if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (A1403)";
- if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3 (A1430)";
- if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4 (A1458)";
- if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4 (A1459)";
- if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4 (A1460)";
-
- if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air (A1474)";
- if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air (A1475)";
- if ([platform isEqualToString:@"iPad4,3"]) return @"iPad Air (A1476)";
- if ([platform isEqualToString:@"iPad4,4"]) return @"iPad Mini 2G (A1489)";
- if ([platform isEqualToString:@"iPad4,5"]) return @"iPad Mini 2G (A1490)";
- if ([platform isEqualToString:@"iPad4,6"]) return @"iPad Mini 2G (A1491)";
-
- if ([platform isEqualToString:@"i386"]) return @"iPhone Simulator";
- if ([platform isEqualToString:@"x86_64"]) return @"iPhone Simulator";
- return platform;
- }
- /*对一段字符串的中间部分进行隐藏 以***代替*/
- + (NSString *)formatCardNumber:(NSString *)cardNumber
- {
- if (cardNumber.length > 9)
- {
- NSString *strLeft = [cardNumber substringToIndex:6];
- NSString *strRight = [cardNumber substringFromIndex:(cardNumber.length - 4)];
- return [NSString stringWithFormat:@"%@***%@",strLeft,strRight];
- }
- else
- {
- return cardNumber;
- }
- }
- /*存储BOOL判断的条件*/
- +(void)userDefaultsKey:(NSString *)key Value:(BOOL)value
- {
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- [defaults setBool:value forKey:key];
- [defaults synchronize];
- }
- /*根据Key值来判断逻辑*/
- +(BOOL)userDefaultsKey:(NSString *)key
- {
- BOOL defaults = [[NSUserDefaults standardUserDefaults] boolForKey:key];
- return defaults;
- }
- /*存储判断NSString的条件*/
- +(void)userDefaultsStringKey:(NSString *)key Value:(NSString *)value
- {
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- [defaults setValue:value forKey:key];
- [defaults synchronize];
- }
- /*根据Key值来判断逻辑*/
- +(NSString *)userDefaultsStringKey:(NSString *)key
- {
- NSString *defaults = [[NSUserDefaults standardUserDefaults] valueForKey:key];
- return defaults;
- }
- //创建package签名
- +(NSString*) createMd5Sign:(NSMutableDictionary*)dict
- {
- NSMutableString *contentString =[NSMutableString string];
- NSArray *keys = [dict allKeys];
- //按字母顺序排序
- NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
- return [obj1 compare:obj2 options:NSNumericSearch];
- }];
-
- //拼接字符串
- for (NSString *categoryId in sortedArray) {
- if ( ![[dict objectForKey:categoryId] isEqualToString:@""]
- && ![categoryId isEqualToString:@"sign"]
- && ![categoryId isEqualToString:@"key"]
- )
- {
- [contentString appendFormat:@"%@=%@&", categoryId, [dict objectForKey:categoryId]];
- }
-
- }
-
- //添加key字段 商户API密钥
- [contentString appendFormat:@"key=%@", @"8ae1da0fe37c98412768453f82490da2"];
- //得到MD5 sign签名
- NSString *md5Sign =[NewUtils md5:contentString];
-
-
- return md5Sign;
- }
- //md5 encode
- +(NSString *) md5:(NSString *)str
- {
- const char *cStr = [str UTF8String];
- unsigned char digest[CC_MD5_DIGEST_LENGTH];
- CC_MD5( cStr, (unsigned int)strlen(cStr), digest );
-
- NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
-
- for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
- [output appendFormat:@"%02X", digest[i]];
-
- return output;
- }
- +(NSString *)stringTransformation:(NSString *)string changeType:(NSString *)type
- {
- //全部大写
- if ([type isEqualToString:@"A"]) {
- return [string uppercaseString];
- }
- //全部小写
- else if ([type isEqualToString:@"a"]) {
- return [string lowercaseString];
- }
- //开头大写,其余小写
- else if ([type isEqualToString:@"Ab"]) {
- return [string capitalizedString];
- }
- else {
- return string;
- }
- }
- + (NSString*)randomCount:(NSInteger)randomCount{
-
- NSInteger count = randomCount;
- char chars[] = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ";
- char codes[count];
-
- for(int i=0;i<count; i++){
- codes[i]= chars[arc4random()%62];
- }
-
- NSString *text = [[NSString alloc] initWithBytes:codes
- length:count encoding:NSUTF8StringEncoding];
- return text;
- }
- + (NSString *)typeForImageData:(NSData *)data {
-
-
- if (data.length > 4) {
- const unsigned char * bytes = [data bytes];
-
- if (bytes[0] == 0xff &&
- bytes[1] == 0xd8 &&
- bytes[2] == 0xff)
- {
- return @"jpeg";
- }
-
- if (bytes[0] == 0x89 &&
- bytes[1] == 0x50 &&
- bytes[2] == 0x4e &&
- bytes[3] == 0x47)
- {
- return @"png";;
- }
- }
-
- return nil;
-
- /*
- uint8_t c;
-
- [data getBytes:&c length:1];
-
- switch (c) {
-
- case 0xFF:
-
- return @"jpeg";
-
- case 0x89:
-
- return @"png";
-
- case 0x47:
-
- return @"gif";
-
- case 0x49:
- return nil;
-
- case 0x4D:
-
- return @"tiff";
-
- }
-
- return nil;
- */
- }
- +(NSString *)resourcesFileName:(NSString *)fileName ofType:(NSString *)type
- {
-
- if ([fileName isEqualToString:@""] || fileName == nil) {
-
- return nil;
-
- }
-
- return [[NSBundle mainBundle] pathForResource:fileName ofType:type];
-
- /*
- 提取路径中的文件名
-
- 方法一:通过函数
- - (NSString *)displayNameAtPath:(NSString *)path
- 需要主意这个函数返回的是文件名称的显示字符串,适当的进行本地化。如果手机中选择的是英语则显示英文名,中文则显示中文名
-
- 方法二:lastPathComponent
- - (NSString *)lastPathComponent
- */
-
- }
- //根据文件名来获取文件路径 取所有母缓存文件路径
- + (NSString *)resourcesFileName:(NSString *)fileName
- {
- NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
- NSUserDomainMask,
- YES);
- NSString *documentDirectory = [path objectAtIndex:0];
- return [documentDirectory stringByAppendingPathComponent:fileName];
- }
- /*
-
- //根据文件路径获取文件名称
- [[NewUtils resourcesFileName:@"支付宝实名认证"] lastPathComponent]
-
-
- //resource目录下 取你自己APP下的缓存路径
- + (NSString *)resourcesFileName3:(NSString *)fileName
- {
- return [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName];
- }
- //Cache目录下
- + (NSString *)resourcesFileName4:(NSString *)fileName
- {
- NSArray *cache = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
- return [cache objectAtIndex:0];
- //NSString *voiceName = [cachePath stringByAppendingPathComponent:[sender stringByAppendingString:@".wav"]];
- }
- _array_FileName=[NSMutableArray array];
- _array_FilePath=[NSMutableArray array];
- [self getFile];
- -(void)getFile{
- NSString *DocPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
- NSFileManager *file_manager=[[NSFileManager alloc]init];
- NSArray *subPaths=[file_manager subpathsAtPath:DocPath];
- for (NSString *path in subPaths) {
- NSArray *arry=[path componentsSeparatedByString:@"."];
- NSString *last=[arry lastObject];
- //NSLog(@"filepath:%@ ----- fileName:%@",path,[path lastPathComponent]);
- if ([last isEqualToString:@"pdf"]) {
- [_array_FilePath addObject:[DocPath stringByAppendingPathComponent:path]];
- [_array_FileName addObject:[path lastPathComponent]];
- NSLog(@"filepath:%@ ----- fileName:%@",path,[path lastPathComponent]);
- }
- }
- }
- */
- //获取当前屏幕显示的viewcontroller
- - (UIViewController *)getCurrentVC
- {
- UIViewController *result = nil;
-
- UIWindow * window = [[UIApplication sharedApplication] keyWindow];
- if (window.windowLevel != UIWindowLevelNormal)
- {
- NSArray *windows = [[UIApplication sharedApplication] windows];
- for(UIWindow * tmpWin in windows)
- {
- if (tmpWin.windowLevel == UIWindowLevelNormal)
- {
- window = tmpWin;
- break;
- }
- }
- }
-
- UIView *frontView = [[window subviews] objectAtIndex:0];
- id nextResponder = [frontView nextResponder];
-
- if ([nextResponder isKindOfClass:[UIViewController class]])
- result = nextResponder;
- else
- result = window.rootViewController;
-
- return result;
- }
- //获取当前屏幕中present出来的viewcontroller
- - (UIViewController *)getPresentedViewController
- {
- UIViewController *appRootVC = [[UIApplication sharedApplication] keyWindow].rootViewController;
- UIViewController *topVC = appRootVC;
- if (topVC.presentedViewController) {
- topVC = topVC.presentedViewController;
- }
-
- return topVC;
- }
- //删除整个共享文件夹Document
- + (void)deleteDocumentFolder
- {
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *path = [paths objectAtIndex:0];
- [[NSFileManager defaultManager] removeItemAtPath:path error:nil];
- }
- @end
|