书写帮助类,有助于代码的复用和提高开发速度,也能使代码更加简洁。

��目前该帮助类已支持CocoaPods,'pod MZLibrary'��
注:代码具体的作用都有标注,可直接复制使用。

HLHelper.h

//
//  MZHelper.h
//  MZLibrary
//
//  Created by MJCheung on 2017/10/11.
//  Copyright © 2017年 HHL. All rights reserved.
//#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>@interface MZHelper : NSObject/**1、 MD5加密 */
+ (NSString *)MD5:(NSString *)input;/** 先MD5加密,再加盐,再MD5加密 */
+ (NSString *)MD5WithSalt:(NSString *)input;/**2、 是否是空字符串 */
+ (BOOL)isEmpty:(NSString *)input;/**3、 判断有效email */
+ (BOOL)validateEmail:(NSString *)email;/**4、 是否为有效手机号码 */
+ (BOOL)isValidPhoneNumber:(NSString *)phoneNumber;/**5、 判断是不是纯数字 */
+ (BOOL)isPureString:(NSString *)input;/**6、 判断是否为有效身份证号码 */
+ (BOOL)isValidIDCard:(NSString *)IDCard;/**7、 判断是否为汉字 */
+ (BOOL)isChineseCharacters:(NSString *)text;/**8、 SHA256加密 */
+ (NSString*)SHA256:(NSString*)sha;/**9、对较大金额进行逗号分隔 */
+ (NSString *)getMoneyStringWithMoneyNumber:(double)money;/*10、 对一个字符串进行base64编码,并且返回 */
+ (NSString *)base64EncodeString:(NSString *)string;/*11、 对base64编码之后的字符串解码,并且返回 **/
+ (NSString *)base64DecodeString:(NSString *)string;/*12、 数字,字符或符号至少两种 **/
+ (BOOL)isSafePassword:(NSString *)strPwd;/*13、 隐藏手机号的中间四位,如:13800138000 -> 138****8000 **/
+ (NSString *)encryptPhoneNumber:(NSString *)phoneStr;/*14、 获取随机颜色**/
+ (UIColor *)getRandomColorWithAlpha:(CGFloat)alpha;/*15、*  判断用户输入的密码是否符合规范,符合规范的密码要求:·1. 长度大于8位2. 密码中必须同时包含数字和字母*/
+ (BOOL)judgePassWordLegal:(NSString *)pass;/**16、 不区分大小写,比较两个字符串是否相同 */
+ (BOOL)compareString:(NSString *)string CaseInsensitiveWithStr:(NSString *)string2;//、 隐藏手机号的中间四位,如:13800138000 -> 13*******00
+ (NSString *)encryptAccount:(NSString *)phoneStr;/** 17、* 计算文字高度,可以处理计算带行间距的*/
+ (CGSize)boundingRectWithText:(NSString *)textStr Size:(CGSize)size font:(UIFont*)font lineSpacing:(CGFloat)lineSpacing;/**18、 隐藏名字的中间的字 */
+ (NSString *)hideMiddleString:(NSString *)input;/** 187******81 */
+ (NSString *)hideAccountId:(NSString *)input;/** 身份证号码:5130***********876 */
+ (NSString *)hideIDCard:(NSString *)input;/** 只保留姓氏:张** */
+ (NSString *)hideName:(NSString *)input;/** 隐藏公司名称:深圳************有限公司 */
+ (NSString *)hideCompany:(NSString *)input;/** 后面的大为1、后面的小为-1, 相等为0 */
+ (int)compareDate:(NSString*)date01 withDate:(NSString*)date02;/** 添加导航栏的返回按钮 */
+ (UIBarButtonItem *)leftBarButtonItemWithImage:(UIImage *)image action:(SEL)action;/** 抖动动画 */
+ (void)shakeAnimationForView:(UIView *)view;@end

.m

//
//  MZHelper.m
//  MZLibrary
//
//  Created by MJCheung on 2017/10/11.
//  Copyright © 2017年 HHL. All rights reserved.
//#import "MZHelper.h"//Libs
#import <CommonCrypto/CommonDigest.h>@implementation MZHelper// 1、MD5加密
+ (NSString *)MD5:(NSString *)input {const char *cStr = [input UTF8String];unsigned char digest[16];CC_MD5(cStr, (unsigned int)strlen(cStr), digest ); // This is the md5 callNSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {[output appendFormat:@"%02x", digest[i]];}NSString *encryptStr = [output uppercaseString];return  encryptStr;
}//先MD5加密,再加盐,再MD5加密
+ (NSString *)MD5WithSalt:(NSString *)input {NSMutableString *string = [NSMutableString stringWithString:[self MD5:input]];[string appendString:@"HXWcjvQWVG1wI4FQBLZpQ3pWj48AV63d"];NSString *encryptStr = [self MD5:[NSString stringWithString:string]];return encryptStr;
}// 2、判断是否为空字符串
+ (BOOL)isEmpty:(NSString *)input {return [input isKindOfClass:[NSNull class]] || input == nil || [input length] <= 0;
}// 3、判断有效email
+ (BOOL)validateEmail:(NSString *)email {NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];return [emailTest evaluateWithObject:email];
}// 4、判断是否为有效手机号码
+ (BOOL)isValidPhoneNumber:(NSString *)phoneNumber {//增加173号段NSString *regex =@"^((1[3-8][0-9])|(147)|(173)|(15[^4,\\D])|(18[0,5-9])|(199)|(198)|(166))\\d{8}$";NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];return [pred evaluateWithObject:phoneNumber];
}// 5、判断是不是纯数字
+ (BOOL)isPureString:(NSString *)input {if([self isEmpty:input]){return NO;}int len = (int)input.length;for(int i = 0; i < len; i++){unichar c = [input characterAtIndex:i];if(!isnumber(c)){return NO;}}return YES;
}// 6、判断是否为有效身份证号码
+ (BOOL)isValidIDCard:(NSString *)IDCard {NSString *cardNumber = @"^\\d{15}(\\d\\d[0-9xX])?$";NSPredicate *numberPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",cardNumber];return [numberPre evaluateWithObject:IDCard];
}// 7、判断输入的文字是否为汉字
+ (BOOL)isChineseCharacters:(NSString *)text {NSString *textNumber = @"^[\u4E00-\u9FA5]*$";NSPredicate *numberPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", textNumber];return [numberPre evaluateWithObject:text];
}// 8、对字符串进行SHA256加密
+ (NSString *)SHA256:(NSString *)sha {const char *cstr = [sha cStringUsingEncoding:NSUTF8StringEncoding];NSData *data = [NSData dataWithBytes:cstr length:sha.length];//    //使用对应的CC_SHA1,CC_SHA256,CC_SHA384,CC_SHA512的长度分别是20,32,48,64uint8_t digest[CC_SHA256_DIGEST_LENGTH];//    //使用对应的CC_SHA256,CC_SHA384,CC_SHA512CC_SHA256(data.bytes, (CC_LONG)data.length, digest);NSMutableString* result = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH];for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {[result appendFormat:@"%02x", digest[i]];}return result;}// 9、对较大金额进行逗号分隔
+ (NSString *)getMoneyStringWithMoneyNumber:(double)money {NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];// 设置格式[numberFormatter setPositiveFormat:@"###,##0.00;"];NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:money]];return formattedNumberString;
}// 10、对一个字符串进行base64编码,并且返回
+ (NSString *)base64EncodeString:(NSString *)string {//1.先转换为二进制数据NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];//2.对二进制数据进行base64编码,完成之后返回字符串return [data base64EncodedStringWithOptions:0];
}// 11、对base64编码之后的字符串解码,并且返回
+ (NSString *)base64DecodeString:(NSString *)string {//注意:该字符串是base64编码后的字符串//1.转换为二进制数据(完成了解码的过程)NSData *data = [[NSData alloc] initWithBase64EncodedString:string options:0];//2.把二进制数据在转换为字符串return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}// 12、 数字,字符或符号至少两种
+ (BOOL)isSafePassword:(NSString *)strPwd {NSString *passWordRegex = @"^((?![0-9]+$)(?![a-zA-Z]+$)(?![~!@#$^&|*-_+=.?,]+$))[0-9A-Za-z~!@#$^&|*-_+=.?,]{6,20}$";NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", passWordRegex];if ([regextestcm evaluateWithObject:strPwd]) {return YES;} else {return NO;}
}// 13、 隐藏手机号的中间四位,如:13800138000 -> 138****8000
+ (NSString *)encryptPhoneNumber:(NSString *)phoneStr {if (phoneStr.length == 11) {NSString *headStr = [phoneStr substringToIndex:3];NSString *tailStr = [phoneStr substringFromIndex:7];return [NSString stringWithFormat:@"%@****%@", headStr, tailStr];}return phoneStr;
}// 14、获取随机颜色
+ (UIColor *)getRandomColorWithAlpha:(CGFloat)alpha {float red = arc4random() % 100 / 100.0;float green = arc4random() % 100 / 100.0;float blue = arc4random() % 100 / 100.0;UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];return color;
}/**  判断用户输入的密码是否符合规范,符合规范的密码要求:1. 长度大于8位2. 密码中必须同时包含数字和字母*/
+ (BOOL)judgePassWordLegal:(NSString *)pass {BOOL result = NO;if ([pass length] >= 8) {// 判断长度大于8位后再接着判断是否同时包含数字和字符NSString * regex = @"^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$";NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];result = [pred evaluateWithObject:pass];}return result;
}/** 不区分大小写,比较两个字符串是否相同 */
+ (BOOL)compareString:(NSString *)string CaseInsensitiveWithStr:(NSString *)string2 {BOOL isSame = [string compare:string2 options:NSCaseInsensitiveSearch] == NSOrderedSame;return isSame;
}//、 隐藏手机号的中间四位,如:13800138000 -> 13*******00
+ (NSString *)encryptAccount:(NSString *)phoneStr {if (phoneStr.length == 11) {NSString *headStr = [phoneStr substringToIndex:2];NSString *tailStr = [phoneStr substringFromIndex:9];return [NSString stringWithFormat:@"%@****%@", headStr, tailStr];}return phoneStr;
}/** 17、* 计算文字高度,可以处理计算带行间距的*/
+ (CGSize)boundingRectWithText:(NSString *)textStr Size:(CGSize)size font:(UIFont*)font lineSpacing:(CGFloat)lineSpacing {NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:textStr];NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];paragraphStyle.lineSpacing = lineSpacing;[attributeString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, textStr.length)];[attributeString addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, textStr.length)];NSStringDrawingOptions options = NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading;CGRect rect = [attributeString boundingRectWithSize:size options:options context:nil];//文本的高度减去字体高度小于等于行间距,判断为当前只有1行if ((rect.size.height - font.lineHeight) <= paragraphStyle.lineSpacing) {if ([self containChinese:textStr]) {  //如果包含中文rect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height-paragraphStyle.lineSpacing);}}return rect.size;
}/**18、判断如果包含中文 */
+ (BOOL)containChinese:(NSString *)str {for(int i=0; i< [str length];i++){ int a = [str characterAtIndex:i];if( a > 0x4e00 && a < 0x9fff){return YES;}}return NO;
}/**18、 隐藏名字的中间的字 */
+ (NSString *)hideMiddleString:(NSString *)input {if (input.length <= 2) {return [NSString stringWithFormat:@"%@ *", [input substringToIndex:1]];}return [NSString stringWithFormat:@"%@ * %@", [input substringToIndex:1], [input substringFromIndex:input.length - 1]];
}/** 187******81 */
+ (NSString *)hideAccountId:(NSString *)input {if (input.length > 3) {return [NSString stringWithFormat:@"%@******%@", [input substringToIndex:3], [input substringFromIndex:input.length - 2]];}return input;
}/** 身份证号码:5130***********876 */
+ (NSString *)hideIDCard:(NSString *)input {if (input.length > 3) {return [NSString stringWithFormat:@"%@***********%@", [input substringToIndex:4], [input substringFromIndex:input.length - 3]];}return input;
}/** 只保留姓氏:张** */
+ (NSString *)hideName:(NSString *)input {if (input.length > 1) {return [NSString stringWithFormat:@"%@**", [input substringToIndex:1]];}return input;
}/** 隐藏公司名称:深圳************有限公司 */
+ (NSString *)hideCompany:(NSString *)input {if (input.length > 3) {return [NSString stringWithFormat:@"%@***********%@", [input substringToIndex:3], [input substringFromIndex:input.length - 4]];}return input;
}/** 后面的大为1、后面的小为-1, 相等为0 */
+ (int)compareDate:(NSString*)date01 withDate:(NSString*)date02 {int ci;NSDateFormatter *df = [[NSDateFormatter alloc]init];[df setDateFormat:@"yyyy-MM-dd"];NSDate *dt1 = [[NSDate alloc] init];NSDate *dt2 = [[NSDate alloc] init];dt1 = [df dateFromString:date01];dt2 = [df dateFromString:date02];NSComparisonResult result = [dt1 compare:dt2];switch (result) {//date02比date01大caseNSOrderedAscending: ci=1;break;//date02比date01小caseNSOrderedDescending: ci=-1;break;//date02=date01case NSOrderedSame: ci=0;break;default: NSLog(@"erorr dates %@, %@", dt2, dt1);break;}return ci;
}/** 添加导航栏的返回按钮 */
+ (UIBarButtonItem *)leftBarButtonItemWithImage:(UIImage *)image action:(SEL)action {UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];backBtn.frame = CGRectMake(0, 0, 30, 30);[backBtn setImage:image forState:UIControlStateNormal];[backBtn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];[backBtn setImageEdgeInsets:UIEdgeInsetsMake(0, -5, 0, 5)];UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];return leftItem;
}/** 抖动动画 */
+ (void)shakeAnimationForView:(UIView *)view {CALayer *viewLayer = view.layer;CGPoint position = viewLayer.position;CGPoint left = CGPointMake(position.x - 10, position.y);CGPoint right = CGPointMake(position.x + 10, position.y);CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];[animation setFromValue:[NSValue valueWithCGPoint:left]];[animation setToValue:[NSValue valueWithCGPoint:right]];[animation setAutoreverses:YES]; // 平滑结束[animation setDuration:0.08];[animation setRepeatCount:3];[viewLayer addAnimation:animation forKey:nil];
}@end

帮助类HLHelper(持续更新)相关推荐

  1. 阿里最新面试必备项之Java的String类,持续更新中!

    最新腾讯面试必备项之Java的String类,持续更新中! 1.1 String的特性 String类:代表字符串.Java程序中的所有字符串字面值(如"abc")都作为此类的实例 ...

  2. 前端常用的 59 个工具类【持续更新】

    #前端常用的 59 个工具类[持续更新] 前言 前端开发有时会处理一部分后台返回的数据,或者根据数据判断做一些处理; 这个时候就非常有必要将一些常用的工具类封装起来; 本文根据常用的一些工具类封装了 ...

  3. 起名与选择器~(总结类、持续更新系列)

    废话没有,直接干活 一.起名方式:1.元素自身的标签名: 2.利用 class 属性自定义名称: 3.利用 id 属性自定义名称.共三种,其中class使用居多. 起名规范:不能用汉字起 第一个字母不 ...

  4. cesium面积计算_GitHub - BulletYuan/bulletCesium: GIS可视化——基于Cesiumjs的一些工具类,测量距离、测量面积。持续更新......

    bulletCesium created at 2018.8.13 基于Cesiumjs的一些工具类,持续更新. lastest - 2018.8.24 - bulletCesium-1.1.1 增加 ...

  5. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  6. android 开发工具类,Android中常用开发工具类—持续更新...

    一.自定义ActionBar public class ActionBarTool { public static void setActionBarLayout(Activity act,Conte ...

  7. ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。

    DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...

  8. AI:大模型领域最新算法SOTA总结、人工智能领域AI工具产品集合分门别类(文本类、图片类、编程类、办公类、视频类、音频类、多模态类)的简介、使用方法(持续更新)之详细攻略

    AI:大模型领域最新算法SOTA总结.人工智能领域AI工具产品集合分门别类(文本类.图片类.编程类.办公类.视频类.音频类.多模态类)的简介.使用方法(持续更新)之详细攻略 导读:由于ChatGPT. ...

  9. Vue数据可视化组件库,类阿里DataV,提供SVG的边框及装饰,图表,飞线图等组件,简单易用,持续更新...

    由于阿里DataV收费,接口维护略有麻烦,同时也基于兴趣和学习,自己从依赖到组件独立开发了一个组件库,从效果上跟阿里的DataV很像. 主要的组件类型 SVG的边框,主要用于提升页面效果,一个边框组件 ...

最新文章

  1. pymssql 安装后只有 .disk-info_变频空调安装注意事项
  2. liunx 安装 zookeeper(转)
  3. map/set/object/array对比
  4. c语言地理坐标存储 转发,纬度/经度坐标的2个列表之间的地理距离
  5. 最高的奖励 51Nod - 1163(贪心+并查集)
  6. 聊聊同步、异步、阻塞与非阻塞
  7. 报表被老板吐槽又多又丑?因为你没有掌握这些动态报表的技巧
  8. 骨传导技术:帮你摆脱噪音的困扰
  9. 那些年,我们踩过的 Java 坑 | 凌云时刻
  10. 【转】mysql createtable errno 121 150 错误 建表错误 外键
  11. MyBatis官方文档——动态SQL部分
  12. 李佳琦薇娅直播预告等微博文章采集转链
  13. 【Java】按要求编程输出2018年日历
  14. 看服务器硬盘序列号,获得服务器硬件信息(CPUID、硬盘号、主板序列号、IP地址等)...
  15. 如何提升串口响应速度
  16. vue drag函数拖拽效果实现
  17. UE4 二维地图的缩放与拖拽操作
  18. python opencv把一张图片嵌入(叠加)到另一张图片上
  19. ue4 开发动作游戏_ue4游戏开发虚幻4学习教程资源素材合集
  20. 名帖101 赵孟頫 小楷《采神图跋册页》

热门文章

  1. 自制Linux精简系统
  2. 号称“高薪、转型、改变命运” ,纽约时报曝光煤矿工地上的编程“速成班”
  3. springSecurity初步认识和执行流程
  4. 【正点原子Linux连载】第二十三章 DDR3实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
  5. 折射向量计算(Refraction Vector Calculation)
  6. 用友云与优客工场达成战略合作 共创企业云服务新模式
  7. 数字化转型的过程就是价值创造、创新和增长的过程
  8. 转:字符编码笔记:SCII,Unicode和UTF-8
  9. 港股软件系统技术分享
  10. SA3008IR+镁光SSD rebuild 异常问题