美文网首页
iOS oc-工具类

iOS oc-工具类

作者: 青菜白玉堂 | 来源:发表于2017-04-27 20:25 被阅读60次

/**

*  0.040000===0.04

* 去掉浮点数后面多余的0

*/

+(NSString*)YhyremoveFloatAllZero:(NSString*)string

{

NSString * testNumber = string;

NSString * outNumber = [NSString stringWithFormat:@"%@",@(testNumber.floatValue)];

return outNumber;

}

/**

*  删除字符串内含有的特定字符(由if条件控制)

*

*/

+(NSString *) YhyDeleteStringCharacter:(NSString *)str

{

NSMutableString *str1 = [NSMutableString stringWithString:str];

for (int i = 0; i < str1.length; i++) {

unichar c = [str1 characterAtIndex:i];

NSRange range = NSMakeRange(i, 1);

if (c == '"' || c == '.' || c == ',' || c == '(' || c == ')'|| c == '-'|| c == ' ') { //此处可以是任何字符

[str1 deleteCharactersInRange:range];

--i;

}

}

NSString *newstr = [NSString stringWithString:str1];

return newstr;

}

/**

*  MD5对密码加密

*

*/

+(NSString *)YhyMD5WithString:(NSString *)string

{

//首先把OC字符串转成C语言形式的字符串

const char *cStr = [string UTF8String];

//调用函数,进行加密

//参数1:要加密的C语言形式的字符串

//参数2:要加密的字符串长度

//参数3:用来接收加密后的数据指针

unsigned long length = strlen(cStr);

unsigned char result[16];

CC_MD5(cStr, (CC_LONG)length, result);

NSMutableString *secuteString = [NSMutableString string];

for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {

[secuteString appendFormat:@"%02X",result[i]];

}

return secuteString;

}

#define CC_MD5_DIGEST_LENGTH 16

+(NSString *)YhyMD5WithStringXiaoxie:(NSString *)string

{

const char *cStr = [string UTF8String];

unsigned char digest[CC_MD5_DIGEST_LENGTH];

CC_MD5( cStr, strlen(cStr), digest);

NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];

for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)

{

[result appendFormat:@"%02x", digest[i]];

}

return [result lowercaseString];

}

/**

*  为Lable,Button,TextFile加边框线

*

*/

+(void)YhySetBordeLab:(UILabel *)labelname

{

labelname.layer.borderColor = [UIColor lightGrayColor].CGColor;

labelname.layer.borderWidth = 1.0;

/**

*  设置四周圆角

*/

labelname.layer.cornerRadius = 5;//圆角半径

labelname.layer.masksToBounds = YES;

}

+(void)YhySetBoadeBtn:(UIButton *)BtnName

{

[BtnName.layer setBorderColor:[UIColor lightGrayColor].CGColor];

[BtnName.layer setBorderWidth:1];

BtnName.layer.cornerRadius = 5;

BtnName.layer.masksToBounds = YES;

}

+(void)YhySetBoadeFile:(UITextField *)file

{

[file.layer setBorderColor:[UIColor lightGrayColor].CGColor];

[file.layer setBorderWidth:1];

file.layer.cornerRadius = 5;

file.layer.masksToBounds = YES;

}

/******label随字体改变宽度******/

+ (CGSize)YhyLabBtnsizeWithString:(NSString *)string font:(UIFont *)font

{

CGRect rect = [string boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)//限制最大高度

options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesFontLeading |NSStringDrawingUsesLineFragmentOrigin//采用换行模式

attributes:@{NSFontAttributeName: font}//传人的字体字典

context:nil];

return rect.size;

}

/**

*  设置圆形按钮,或四角圆弧按钮

*

*  @param Btn    按钮本身

*  @param radius 按钮本身宽度*0.5

*/

+(void)YhySetCircularBtn:(UIButton *)Btn And:(CGFloat ) radius

{

//30这个数值是圆的半径,只要达到,按钮宽,高的一半,就会产生圆形,利用这个属性,也可设置四角为圆角的按钮

Btn.layer.cornerRadius = radius;

//这个不设置,效果就不会出来

Btn.layer.masksToBounds = YES;

}

/**

*  时间字符串转date

*

*  @param timeString 时间字符串

*

*  @return 时间date

*/

+(NSDate *)YhytimeStringTransformNsdate:(NSString *) timeString

{

//    NSString * javatimeString = [NSString stringWithFormat:@"%@000",timeString];

//字符串转date

NSDateFormatter* formater = [[NSDateFormatter alloc] init];

[formater setDateStyle:NSDateFormatterMediumStyle];

[formater setTimeStyle:NSDateFormatterShortStyle];

//字符串转date总是少8个小时,解决办法

[formater setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

[formater setDateFormat:@"yyyyMMdd"];

NSDate* timeStringdate = [formater dateFromString:timeString];

YhyLog(@"%@",timeStringdate);

return timeStringdate;

}

/**

* date转时间戳

*

*  @param timestringDate 时间date

*

*  @return 时间戳

*/

+(NSString *)YhyDateTransformSHIjianCHUO:(NSDate *)timestringDate

{

//date转时间戳

NSString *timeCHUO = [NSString stringWithFormat:@"%ld", (long)[timestringDate timeIntervalSince1970]*1000];

return timeCHUO;

}

/**

*  时间字符串直接转时间戳

*

*  @param timeString 时间字符串

*

*  @return 时间戳

*/

+(NSString *)YhytimeStringTransformSHIjianCHUO:(NSString *)timeString

{

return [YhyToolViewController YhyDateTransformSHIjianCHUO:[YhyToolViewController YhytimeStringTransformNsdate:timeString]];

}

/**

*  时间戳转字符串

*

*  @param CHUOstring 时间戳

*  @param isjava    是java后台(1,0)

*

*  @return 时间字符串

*/

+(NSString *)YhySHIjianCHUOTransformString:(NSString *)CHUOstring andISjava :(BOOL )isjava

{

//    时间戳转时间字符串(更准一点),如果字符串是java(后台)返回的话,需要除1000,ios自己的就不需要了

NSDateFormatter* formatter = [[NSDateFormatter alloc] init];

[formatter setDateStyle:NSDateFormatterMediumStyle];

[formatter setTimeStyle:NSDateFormatterShortStyle];

[formatter setDateFormat:@"yyyy-MM-dd"];

NSDate *qdatea;

if (isjava) {

qdatea = [NSDate dateWithTimeIntervalSince1970:[CHUOstring doubleValue]/1000];

}else

{

qdatea = [NSDate dateWithTimeIntervalSince1970:[CHUOstring doubleValue]];

}

NSString *timeString = [formatter stringFromDate:qdatea];

return timeString;

}

/**

*  偏好存储,存

*

*  @param upString 要存的字符串

*  @param Key      钥匙

*/

+(void)YhyNSuserDfalutesUP:(nullable id)upString Forkey :(NSString *)Key

{

NSUserDefaults * YhyDefaluts = [NSUserDefaults standardUserDefaults];

[YhyDefaluts setObject:upString forKey:Key];

/**

*  数据即时写入。

*/

[YhyDefaluts synchronize];

}

/**

*偏好存储,取

*

*  @param Key 钥匙

*

*  @return 返回之前通过该钥匙存入的字符串

*/

+(nullable id)YhyNSuserDfalutesDownForkey :(NSString *)Key

{

NSUserDefaults * YhyDefaluts = [NSUserDefaults standardUserDefaults];

//    NSString *downstring = [YhyDefaluts objectForKey:Key];

return [YhyDefaluts objectForKey:Key];

}

/**

*  弹出键盘,移动视图

*

*  @param yhyself 控制器self

*/

+(void)YhyKyeBoardUPMoveView: (UIViewController * )yhyController

{

//键盘高度216

//滑动效果(动画)

NSTimeInterval animationDuration = 0.30f;

[UIView beginAnimations:@"ResizeForKeyboard" context:nil];

[UIView setAnimationDuration:animationDuration];

//将视图的Y坐标向上移动,以使下面腾出地方用于软键盘的显示

yhyController.view.frame = CGRectMake(0.0f, -216.0f, YhymainscreenSize.width, YhymainscreenSize.height);//64-216

[UIView commitAnimations];

}

/**

*  退出键盘,移动视图

*

*  @param yhyself 控制器self

*/

+(void)YhyKyeBoardDownMoveView: (UIViewController * )yhyController

{

//滑动效果

NSTimeInterval animationDuration = 0.30f;

[UIView beginAnimations:@"ResizeForKeyboard" context:nil];

[UIView setAnimationDuration:animationDuration];

//恢复屏幕

yhyController.view.frame = CGRectMake(0.0f, 0.0f, YhymainscreenSize.width, YhymainscreenSize.height);//64-216

[UIView commitAnimations];

}

///**

// *  证书加载,https,AFN

// *

// */

//+(AFSecurityPolicy*)YhyAFNcustomSecurityPolicy

//{    // /先导入证书

//    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"doctor" ofType:@"cer"];//证书的路径,证书一定要加入工程

////    YhyLog(@"证书路径%@",cerPath);

//    NSData *certData = [NSData dataWithContentsOfFile:cerPath];

////    YhyLog(@"证书%@",certData);

//    // AFSSLPinningModeCertificate 使用证书验证模式

//    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

//

//    // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO

//    // 如果是需要验证自建证书,需要设置为YES

//    securityPolicy.allowInvalidCertificates = YES;

//

//    //validatesDomainName 是否需要验证域名,默认为YES;

//    //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。

//    //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。

//    //如置为NO,建议自己添加对应域名的校验逻辑。

//    securityPolicy.validatesDomainName = NO;

//

//    securityPolicy.pinnedCertificates = @[certData];

//    return securityPolicy;

//}

/**

*  正则身份证格式判断

*

*/

+ (BOOL)YhyIDCardNumber:(NSString *)identityCard

{

BOOL flag;

if (identityCard.length <= 0)

{

flag = NO;

return flag;

}

NSString *regex2 = @"^(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)$";

NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];

flag = [identityCardPredicate evaluateWithObject:identityCard];

//如果通过该验证,说明身份证格式正确,但准确性还需计算

if(flag)

{

if(identityCard.length==18)

{

//将前17位加权因子保存在数组里

NSArray * idCardWiArray = @[@"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2"];

//这是除以11后,可能产生的11位余数、验证码,也保存成数组

NSArray * idCardYArray = @[@"1", @"0", @"10", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2"];

//用来保存前17位各自乖以加权因子后的总和

NSInteger idCardWiSum = 0;

for(int i = 0;i < 17;i++)

{

NSInteger subStrIndex = [[identityCard substringWithRange:NSMakeRange(i, 1)] integerValue];

NSInteger idCardWiIndex = [[idCardWiArray objectAtIndex:i] integerValue];

idCardWiSum+= subStrIndex * idCardWiIndex;

}

//计算出校验码所在数组的位置

NSInteger idCardMod=idCardWiSum%11;

//得到最后一位身份证号码

NSString * idCardLast= [identityCard substringWithRange:NSMakeRange(17, 1)];

//如果等于2,则说明校验码是10,身份证号码最后一位应该是X

if(idCardMod==2)

{

if([idCardLast isEqualToString:@"X"]||[idCardLast isEqualToString:@"x"])

{

return flag;

}else

{

flag =  NO;

return flag;

}

}else

{

//用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码

if([idCardLast isEqualToString: [idCardYArray objectAtIndex:idCardMod]])

{

return flag;

}

else

{

flag =  NO;

return flag;

}

}

}

else

{

flag =  NO;

return flag;

}

}

else

{

return flag;

}

}

// 正则判断手机号码地址格式

+ (BOOL)YhyPhoneNumber:(NSString *)mobileNum {

//    电信号段:133/153/180/181/189/177

//    联通号段:130/131/132/155/156/185/186/145/176

//    移动号段:134/135/136/137/138/139/150/151/152/157/158/159/182/183/184/187/188/147/178

//    虚拟运营商:170

NSString *MOBILE = @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[06-8])\\d{8}$";

NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];

return [regextestmobile evaluateWithObject:mobileNum];

}

/**

*

*  计算年龄

*/

+ (int)YhyAge:(NSString *)ageString

{

//计算年龄

NSString *birth = ageString;

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];

[dateFormatter setDateFormat:@"yyyy-MM-dd"];

//生日

NSDate *birthDay = [dateFormatter dateFromString:birth];

//当前时间

NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];

NSDate *currentDate = [dateFormatter dateFromString:currentDateStr];

//    NSLog(@"currentDate %@ birthDay %@",currentDateStr,birth);

NSTimeInterval time=[currentDate timeIntervalSinceDate:birthDay];

int age = ((int)time)/(3600*24*365);

NSLog(@" %d 岁",age);

return age;

}

/**

*  压缩图片

*

*  @param image  需要压缩的图片

*  @param newSize 图片想要设置的宽高

*  @param biLi    压缩力度(0~1,一般使用3~8)

*

*  @return 直接返回data数据(这里是用上传图片时做的处理)

*/

+ (NSData *)YhyImageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize yaSuoBiLiFloat:(float)biLi

{

UIGraphicsBeginImageContext(newSize);

[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return UIImageJPEGRepresentation(newImage, biLi);

}

//计算出大小

+(NSString *)YhyJiSuanFileSizeWithInterge:(NSInteger)size

{

// 1k = 1024, 1m = 1024k

if (size < 1024) {// 小于1k

return [NSString stringWithFormat:@"缓存%ldB",(long)size];

}else if (size < 1024 * 1024){// 小于1m

CGFloat aFloat = size/1024;

return [NSString stringWithFormat:@"缓存%.0fK",aFloat];

}else if (size < 1024 * 1024 * 1024){// 小于1G

CGFloat aFloat = size/(1024 * 1024);

return [NSString stringWithFormat:@"缓存%.1fM",aFloat];

}else{

CGFloat aFloat = size/(1024*1024*1024);

return [NSString stringWithFormat:@"缓存%.1fG",aFloat];

}

}

+(NSString *)YhyBenDiShiJian

{

NSDate *currentDate = [NSDate date];//获取当前时间,日期

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

//    [dateFormatter setDateFormat:@"YYYY/MM/dd hh:mm:ss SS"];

[dateFormatter setDateFormat:@"YYYY/MM/dd"];

NSString *dateString = [dateFormatter stringFromDate:currentDate];

//    NSLog(@"dateString:%@",dateString);

return dateString;

}

相关文章

  • iOS oc-工具类

    /** * 0.040000===0.04 * 去掉浮点数后面多余的0 */ +(NSString*)Yhyrem...

  • iOS oc-工具集合(1)

    处理数字 根据字体长度计算控件大小 距离 截图

  • iOS工具类

    前言 现在好多Dev都开始创建并使用工具类,因为把一些很多地方用到得方法写到工具类里面会显得很简单明了,最主要的是...

  • iOS 内存泄漏检测

    【YFMemoryLeakDetector】人人都能理解的 iOS 内存泄露检测工具类 背景 即使到今天,iOS ...

  • IOS DB 封装类使用

    @[TOC](IOS DB 封装类使用) IOS DB 工具类使用 1. 定义模型 如下定义一个Student模型...

  • iOS开发常用的工具类和宏定义

    iOS开发常用的工具类和宏定义 开发总结的工具类和宏 https://github.com/xiaoChen66...

  • 1.3 iOS应用逆向工程的工具

    iOS逆向工程的工具分为四大类:监测工具、反汇编工具(disassembler)、调试工具(debugger)、开...

  • iOS逆向

    iOS逆向工程的工具可以分为四大类:监测工具、反汇编工具(disassembler)、调试工具(debugger)...

  • OC基础学习:类方法和对象方法的调用过程

    类方法中不能直接访问属性。 在类方法中也不能通过self直接调用当前类的其他的对象方法。 参考: OC-基础总结(一)

  • iOS逆向(class-dump)

    1,iOS逆向工程的工具可以分为四大类:监测工具,反汇编工具(disassembler),调试工具(debugge...

网友评论

      本文标题:iOS oc-工具类

      本文链接:https://www.haomeiwen.com/subject/cjpnzttx.html