帮助类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 call

    NSMutableString *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,64
    uint8_t digest[CC_SHA256_DIGEST_LENGTH];
    //    //使用对应的CC_SHA256,CC_SHA384,CC_SHA512
    CC_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=date01
        case 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值