帮助类HLHelper(持续更新)
书写帮助类,有助于代码的复用和提高开发速度,也能使代码更加简洁。
��目前该帮助类已支持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(持续更新)相关推荐
- 阿里最新面试必备项之Java的String类,持续更新中!
最新腾讯面试必备项之Java的String类,持续更新中! 1.1 String的特性 String类:代表字符串.Java程序中的所有字符串字面值(如"abc")都作为此类的实例 ...
- 前端常用的 59 个工具类【持续更新】
#前端常用的 59 个工具类[持续更新] 前言 前端开发有时会处理一部分后台返回的数据,或者根据数据判断做一些处理; 这个时候就非常有必要将一些常用的工具类封装起来; 本文根据常用的一些工具类封装了 ...
- 起名与选择器~(总结类、持续更新系列)
废话没有,直接干活 一.起名方式:1.元素自身的标签名: 2.利用 class 属性自定义名称: 3.利用 id 属性自定义名称.共三种,其中class使用居多. 起名规范:不能用汉字起 第一个字母不 ...
- cesium面积计算_GitHub - BulletYuan/bulletCesium: GIS可视化——基于Cesiumjs的一些工具类,测量距离、测量面积。持续更新......
bulletCesium created at 2018.8.13 基于Cesiumjs的一些工具类,持续更新. lastest - 2018.8.24 - bulletCesium-1.1.1 增加 ...
- ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- android 开发工具类,Android中常用开发工具类—持续更新...
一.自定义ActionBar public class ActionBarTool { public static void setActionBarLayout(Activity act,Conte ...
- ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。
DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...
- AI:大模型领域最新算法SOTA总结、人工智能领域AI工具产品集合分门别类(文本类、图片类、编程类、办公类、视频类、音频类、多模态类)的简介、使用方法(持续更新)之详细攻略
AI:大模型领域最新算法SOTA总结.人工智能领域AI工具产品集合分门别类(文本类.图片类.编程类.办公类.视频类.音频类.多模态类)的简介.使用方法(持续更新)之详细攻略 导读:由于ChatGPT. ...
- Vue数据可视化组件库,类阿里DataV,提供SVG的边框及装饰,图表,飞线图等组件,简单易用,持续更新...
由于阿里DataV收费,接口维护略有麻烦,同时也基于兴趣和学习,自己从依赖到组件独立开发了一个组件库,从效果上跟阿里的DataV很像. 主要的组件类型 SVG的边框,主要用于提升页面效果,一个边框组件 ...
最新文章
- pymssql 安装后只有 .disk-info_变频空调安装注意事项
- liunx 安装 zookeeper(转)
- map/set/object/array对比
- c语言地理坐标存储 转发,纬度/经度坐标的2个列表之间的地理距离
- 最高的奖励 51Nod - 1163(贪心+并查集)
- 聊聊同步、异步、阻塞与非阻塞
- 报表被老板吐槽又多又丑?因为你没有掌握这些动态报表的技巧
- 骨传导技术:帮你摆脱噪音的困扰
- 那些年,我们踩过的 Java 坑 | 凌云时刻
- 【转】mysql createtable errno 121 150 错误 建表错误 外键
- MyBatis官方文档——动态SQL部分
- 李佳琦薇娅直播预告等微博文章采集转链
- 【Java】按要求编程输出2018年日历
- 看服务器硬盘序列号,获得服务器硬件信息(CPUID、硬盘号、主板序列号、IP地址等)...
- 如何提升串口响应速度
- vue drag函数拖拽效果实现
- UE4 二维地图的缩放与拖拽操作
- python opencv把一张图片嵌入(叠加)到另一张图片上
- ue4 开发动作游戏_ue4游戏开发虚幻4学习教程资源素材合集
- 名帖101 赵孟頫 小楷《采神图跋册页》
热门文章
- 自制Linux精简系统
- 号称“高薪、转型、改变命运” ,纽约时报曝光煤矿工地上的编程“速成班”
- springSecurity初步认识和执行流程
- 【正点原子Linux连载】第二十三章 DDR3实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
- 折射向量计算(Refraction Vector Calculation)
- 用友云与优客工场达成战略合作 共创企业云服务新模式
- 数字化转型的过程就是价值创造、创新和增长的过程
- 转:字符编码笔记:SCII,Unicode和UTF-8
- 港股软件系统技术分享
- SA3008IR+镁光SSD rebuild 异常问题