各种校验(手机号,银行卡,身份证,邮箱等)

DMValidate.h

#import <Foundation/Foundation.h>
@interface DMValidate : NSObject

#pragma mark - 判断是否是合法手机号
+ (BOOL)isLegalMobileNumber:(NSString *)number;
#pragma mark - 判断时候是合法银行卡
+ (BOOL)isLegalBankcard:(NSString *)cardNum;
#pragma mark - 判断是否是合法身份证号
+ (BOOL)is18PaperId:(NSString *)sPaperId;
#pragma mark - 判断邮箱合法
+ (BOOL)isLegalEmail:(NSString *)email;
#pragma mark - 判断邮编合法
+ (BOOL)isLegalPostcode:(NSString *)postcode;
#pragma mark - 判断输入是否为空
+ (BOOL)isEmpty:(NSString *)value;
#pragma mark - 判断是否包含特殊字符
+ (BOOL)isContainSpechars:(NSString *)value;
#pragma mark - 判断账号长度是否合法
+ (BOOL)isLegalAccount:(NSString *)account;
#pragma mark - 判断账号是否数字加字母的自合
+ (BOOL)isLegalNumberAndletter:(NSString *)string;
#pragma mark - 判断密码长度是否合法
+ (BOOL)isLegalPassword:(NSString *)pwd;
#pragma mark - 判断支付密码是否合法
+ (BOOL)isLegalPayPassword:(NSString *)pwd;
#pragma mark - 判断真实姓名长度是否合法
+ (BOOL)isLegalRealName:(NSString *)name;
#pragma mark - 判断密码是否一致
+ (BOOL)pwd1:(NSString *)pwd1 isSameAsPwd2:(NSString *)pwd2;
#pragma mark - 判断是否为正整数
+ (BOOL)isInteger:(NSString *)str;
#pragma mark - 判断是否是小数
+ (BOOL)isPureFloat:(NSString*)string;
#pragma mark - 判断是否全是汉字
+ (BOOL)isAllChinese:(NSString *)content;
#pragma mark - 判断两个数的大小
+ (BOOL)number1:(NSString *)number1 isGreaterThanNumber2:(NSString *)number2;

@end

 

 

 

DMValidate.m

#import "DMValidate.h"
//#import "DMTools.h"

@implementation DMValidate

#pragma mark - 判断时候是合法手机号
+ (BOOL)isLegalMobileNumber:(NSString *)number
{
    //判断位数
    if ([number length] <11)return NO;
    
//    NSString *regex = @"^((13[0-9])|(147)|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";
    NSString *regex = @"^((13[0-9])|(17[0-9])|(15[^4,\\D])|(18[0-9])|(14[57]))\\d{4,8}$";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    return [pred evaluateWithObject:number];
}

#pragma mark - 判断时候是合法银行卡
+ (BOOL)isLegalBankcard:(NSString *)value
{

    NSInteger sum = 0;
    NSInteger len = [value length];
    NSInteger i = 0;
    
    while (i < len) {
        NSString *tmpString = [value substringWithRange:NSMakeRange(len - 1 - i, 1)];
        int tmpVal = [tmpString intValue];
        if (i % 2 != 0) {
            tmpVal *= 2;
            if(tmpVal>=10) {
                tmpVal -= 9;
            }
        }
        sum += tmpVal;
        i++;
    }
    
    if((sum % 10) == 0)
        return YES;
    else
        return NO;
}

#pragma mark - 判断是否是合法身份证号
+ (BOOL)is18PaperId:(NSString *)sPaperId
{
    //判断位数
    if ([sPaperId length] != 15 && [sPaperId length] != 18) {
        return NO;
    }
    NSString *carid = sPaperId;
    long lSumQT =0;
    //加权因子
    int R[] ={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
    //校验码
    unsigned char sChecker[11]={'1','0','X', '9', '8', '7', '6', '5', '4', '3', '2'};
    //将15位身份证号转换成18位
    NSMutableString *mString = [NSMutableString stringWithString:sPaperId];
    if ([sPaperId length] == 15) {
        [mString insertString:@"19" atIndex:6];
        long p = 0;
        const char *pid = [mString UTF8String];
        for (int i=0; i<=16; i++) {
            p += (pid[i]-48) * R[i];
        }
        int o = p%11;
        NSString *string_content = [NSString stringWithFormat:@"%c",sChecker[o]];
        [mString insertString:string_content atIndex:[mString length]];
        carid = mString;
    }
    
    //判断地区码
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
    [dic setObject:@"北京" forKey:@"11"];
    [dic setObject:@"天津" forKey:@"12"];
    [dic setObject:@"河北" forKey:@"13"];
    [dic setObject:@"山西" forKey:@"14"];
    [dic setObject:@"内蒙古" forKey:@"15"];
    [dic setObject:@"辽宁" forKey:@"21"];
    [dic setObject:@"吉林" forKey:@"22"];
    [dic setObject:@"黑龙江" forKey:@"23"];
    [dic setObject:@"上海" forKey:@"31"];
    [dic setObject:@"江苏" forKey:@"32"];
    [dic setObject:@"浙江" forKey:@"33"];
    [dic setObject:@"安徽" forKey:@"34"];
    [dic setObject:@"福建" forKey:@"35"];
    [dic setObject:@"江西" forKey:@"36"];
    [dic setObject:@"山东" forKey:@"37"];
    [dic setObject:@"河南" forKey:@"41"];
    [dic setObject:@"湖北" forKey:@"42"];
    [dic setObject:@"湖南" forKey:@"43"];
    [dic setObject:@"广东" forKey:@"44"];
    [dic setObject:@"广西" forKey:@"45"];
    [dic setObject:@"海南" forKey:@"46"];
    [dic setObject:@"重庆" forKey:@"50"];
    [dic setObject:@"四川" forKey:@"51"];
    [dic setObject:@"贵州" forKey:@"52"];
    [dic setObject:@"云南" forKey:@"53"];
    [dic setObject:@"西藏" forKey:@"54"];
    [dic setObject:@"陕西" forKey:@"61"];
    [dic setObject:@"甘肃" forKey:@"62"];
    [dic setObject:@"青海" forKey:@"63"];
    [dic setObject:@"宁夏" forKey:@"64"];
    [dic setObject:@"新疆" forKey:@"65"];
    [dic setObject:@"台湾" forKey:@"71"];
    [dic setObject:@"香港" forKey:@"81"];
    [dic setObject:@"澳门" forKey:@"82"];
    [dic setObject:@"国外" forKey:@"91"];
    NSString *sProvince = [carid substringToIndex:2];
    if ([dic objectForKey:sProvince] == nil) {
        return NO;
    }
    
    //判断年月日是否有效
    //年份
    int strYear = [[carid substringWithRange:NSMakeRange(6,4)] intValue];
    //月份
    int strMonth = [[carid substringWithRange:NSMakeRange(10,2)] intValue];
    //日
    int strDay = [[carid substringWithRange:NSMakeRange(12,2)] intValue];
    
    NSTimeZone *localZone = [NSTimeZone localTimeZone];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
    [dateFormatter setTimeZone:localZone];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSDate *date=[dateFormatter dateFromString:[NSString stringWithFormat:@"%d-%d-%d 12:01:01",strYear,strMonth,strDay]];
    if (date == nil) {
        return NO;
    }
    const char *PaperId  = [carid UTF8String];
    //检验长度
    if( 18 != strlen(PaperId)) return -1;
    //校验数字
    for (int i=0; i<18; i++) {
        if ( !isdigit(PaperId[i]) && !(('X' == PaperId[i] || 'x' == PaperId[i]) && 17 == i) ) {
            return NO;
        }
    }
    //验证最末的校验码
    for (int i=0; i<=16; i++) {
        lSumQT += (PaperId[i]-48) * R[i];
    }
    if (sChecker[lSumQT%11] != PaperId[17] ) {
        return NO;
    }
    return YES;
    
}

#pragma mark - 判断邮箱合法
+ (BOOL)isLegalEmail:(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];
}

#pragma mark - 判断邮编合法
+ (BOOL)isLegalPostcode:(NSString *)postcode
{
    NSString *postRegex = @"^[1-9][0-9]{5}$";
    NSPredicate *postTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", postRegex];
    return [postTest evaluateWithObject:postcode];
}


#pragma mark - 判断是否为正整数
+ (BOOL)isInteger:(NSString *)str
{
    NSString *regex = @"^[0-9]*[1-9][0-9]*$";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF matches %@", regex];
    BOOL val = [pred evaluateWithObject:str];
    return val;
}

#pragma mark - 判断输入是否为空
+ (BOOL)isEmpty:(NSString *)value
{
    if (value==nil||[[DMTools stringTrimWhitespace:value] isEqualToString:@""]) {
        return YES;
    }else if ([value isKindOfClass:[NSNull class]]){
        return YES;
    }else if (value ==nil){
        return YES;
    }
    return NO;
}

#pragma mark - 判断是否包含特殊字符
+ (BOOL)isContainSpechars:(NSString *)value
{
    
    //    NSString *regex = @"[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
    //    NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    //    return [test evaluateWithObject:value];
    //构建一个字符集
    NSCharacterSet *nameCharacters = [[NSCharacterSet characterSetWithCharactersInString:@"[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]"] invertedSet];
    //判断字符串是否在指定的字符集范围内
    //    NSRange userNameRange = [value rangeOfCharacterFromSet:nameCharacters];
    //    if (userNameRange.location != NSNotFound) {
    //        return YES;
    //    }
    NSString *trimmedString = [value stringByTrimmingCharactersInSet:nameCharacters];
    if ([trimmedString isEqualToString:@""]) {
        return NO;
    }
    return YES;
}

#pragma mark - 判断账号是否合法
+ (BOOL)isLegalAccount:(NSString *)account
{
    NSInteger length = account.length;
    if (length<6 || length>12) { // 账号6到12位
        return NO;
    }
    return YES;
}
#pragma mark - 判断账号是否数字加字母的自合
+ (BOOL)isLegalNumberAndletter:(NSString *)string
{
    NSString *regex = @"^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,18}$";
    NSPredicate *   pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    if ([pred evaluateWithObject:string]) {
        return YES;
    }else{
        return NO;
    }
}
#pragma mark - 判断密码是否合法
+ (BOOL)isLegalPassword:(NSString *)pwd
{
    NSInteger length = pwd.length;
    if (length<6 || length>18||![self isLegalNumberAndletter:pwd]) { // 密码6到18位
        return NO;
    }
    return YES;
}
#pragma mark - 判断支付密码是否合法
+ (BOOL)isLegalPayPassword:(NSString *)pwd
{
    NSInteger length = pwd.length;
    if (length!=6) { // 密码6位
        return NO;
    }
    return YES;
}
#pragma mark - 判断真实姓名长度是否合法
+ (BOOL)isLegalRealName:(NSString *)name
{
    NSInteger length = name.length;
    if (length>4 || length<2) { // 真实姓名2到4位
        return NO;
    }
    return YES;
}

#pragma mark -判断密码是否一致
+ (BOOL)pwd1:(NSString *)pwd1 isSameAsPwd2:(NSString *)pwd2;
{
    if (![pwd1 isEqualToString: pwd2]) {
        return NO;
    }
    return YES;
}

#pragma mark -- 判断是否是小数
+ (BOOL)isPureFloat:(NSString*)string
{
    NSScanner* scan = [NSScanner scannerWithString:string];
    float val;
    return[scan scanFloat:&val] && [scan isAtEnd];
}

#pragma mark - 判断是否全是汉字
+ (BOOL)isAllChinese:(NSString *)content
{
    NSString *regex = @"[\u4e00-\u9fa5]{1,10}";
    NSPredicate *   pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    if ([pred evaluateWithObject:content]) {
        return YES;
    }else{
        return NO;
    }
    
//    BOOL isAllChinese = YES;
//    for(NSInteger i = 0; i < [content length]; i++) {
//        NSInteger a = [content characterAtIndex:i];
//        if( a > 0x4e00 && a < 0x9fff) {
//        } else {
//            isAllChinese = NO;
//        }
//    }
//    return isAllChinese;
}

#pragma mark -- 判断两个数的大小
+ (BOOL)number1:(NSString *)number1 isGreaterThanNumber2:(NSString *)number2
{
    NSDecimalNumber *discount1 = [NSDecimalNumber decimalNumberWithString:number1];
    NSDecimalNumber *discount2 = [NSDecimalNumber decimalNumberWithString:number2];
    NSComparisonResult result = [discount1 compare:discount2];
    switch (result) {
        case NSOrderedSame:
            return NO;
            break;
        case NSOrderedAscending:
            return NO;
            break;
        case NSOrderedDescending:
            return YES;
            break;
    }
}


@end

posted @ 2016-04-20 15:30  灵笑若然  阅读(1249)  评论(0)    收藏  举报