iOS各種驗(yàn)證、手機(jī)號(hào)驗(yàn)證、身份證號(hào)驗(yàn)證、銀行卡號(hào)驗(yàn)證、郵箱驗(yàn)證、用戶名驗(yàn)證、密碼驗(yàn)證

整理了之前用到的一些驗(yàn)證,發(fā)出來(lái),希望對(duì)各位有用。

ValidateClass.h文件

//
//  ValidateClass.h
//  CustomProject
//
//  Created by Von on 2017/7/20.
//  Copyright ? 2017年 Von. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ValidateClass : NSObject

//驗(yàn)證郵箱
+ (BOOL)validateEmail:(NSString *)email;

//驗(yàn)證手機(jī)
+ (BOOL)validateMobile:(NSString *)mobile;

//驗(yàn)證車牌號(hào)
+ (BOOL)validateCarNo:(NSString *)carNo;

//驗(yàn)證用戶名
+ (BOOL)validateUserName:(NSString *)name;

//驗(yàn)證密碼
+ (BOOL)validatePassword:(NSString *)passWord;

//驗(yàn)證昵稱
+ (BOOL)validateNickname:(NSString *)nickname;

//驗(yàn)證身份證
+ (BOOL)validateIdentityCard: (NSString *)identityCard;

//驗(yàn)證身份證號(hào)碼最后一位是否為X  可用于身份證號(hào)碼輸入的自動(dòng)補(bǔ)全
- (BOOL)theLastIsX:(NSString *)IDNumber;

//驗(yàn)證金額
+ (BOOL)validateMoney:(NSString *)money;

//驗(yàn)證webUrl
+ (BOOL)validateWebUrl:(NSString*)url;

//銀行卡號(hào)驗(yàn)證
+ (BOOL)validateBankCard:(NSString*)cardNo;

//驗(yàn)證IP
+ (BOOL)isValidatIP:(NSString *)ipAddress;

@end

ValidateClass.m文件

//
//  ValidateClass.m
//  CustomProject
//
//  Created by FengYiHao on 2017/7/20.
//  Copyright ? 2017年 FengYiHao. All rights reserved.
//

#import "ValidateClass.h"

@implementation ValidateClass

+ (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];
}


//手機(jī)號(hào)碼驗(yàn)證
+ (BOOL)validateMobile:(NSString *)mobile
{
    //手機(jī)號(hào)以13, 15,18開頭,八個(gè) \d 數(shù)字字符
    NSString *phoneRegex = @"^((13[0-9])|(15[^4,\\D])|(17[^4,\\D])|(18[0,0-9]))\\d{8}$";
    NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
    return [phoneTest evaluateWithObject:mobile];
}
//金額驗(yàn)證
+ (BOOL)validateMoney:(NSString *)money
{
    
    NSString *phoneRegex = @"^([0-9]*[1-9][0-9]*)$";
    NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
    return [phoneTest evaluateWithObject:money];
}

//車牌號(hào)驗(yàn)證
+ (BOOL)validateCarNo:(NSString *)carNo
{
    NSString *carRegex = @"^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{4}[a-zA-Z_0-9_\u4e00-\u9fa5]$";
    NSPredicate *carTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",carRegex];
    NSLog(@"carTest is %@",carTest);
    return [carTest evaluateWithObject:carNo];
}


//用戶名
+ (BOOL)validateUserName:(NSString *)name
{
    NSString *userNameRegex = @"^[A-Za-z0-9]{6,20}+$";
    NSPredicate *userNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",userNameRegex];
    BOOL B = [userNamePredicate evaluateWithObject:name];
    return B;
}


//密碼
+ (BOOL)validatePassword:(NSString *)passWord
{
    NSString *passWordRegex = @"^[a-zA-Z0-9]{6,20}+$";
    NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",passWordRegex];
    return [passWordPredicate evaluateWithObject:passWord];
}


//昵稱
+ (BOOL) validateNickname:(NSString *)nickname
{
    NSString *nicknameRegex = @"^[\u4e00-\u9fa5]{4,8}$";
    NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nicknameRegex];
    return [passWordPredicate evaluateWithObject:nickname];
}


//身份證號(hào)
+ (BOOL)validateIdentityCard: (NSString *)identityCard
{
    //判斷是否為空
    if (identityCard==nil||identityCard.length <= 0) {
        return NO;
    }
    //判斷是否是18位,末尾是否是x
    NSString *regex2 = @"^(\\d{14}|\\d{17})(\\d|[xX])$";
    NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];
    if(![identityCardPredicate evaluateWithObject:identityCard]){
        return NO;
    }
    //判斷生日是否合法
    NSRange range = NSMakeRange(6,8);
    NSString *datestr = [identityCard substringWithRange:range];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat : @"yyyyMMdd"];
    if([formatter dateFromString:datestr]==nil){
        return NO;
    }
    
    //判斷校驗(yàn)位
    if(identityCard.length==18)
    {
        NSArray *idCardWi= @[ @"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2" ]; //將前17位加權(quán)因子保存在數(shù)組里
        NSArray * idCardY=@[ @"1", @"0", @"10", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2" ]; //這是除以11后,可能產(chǎn)生的11位余數(shù)、驗(yàn)證碼,也保存成數(shù)組
        int idCardWiSum=0; //用來(lái)保存前17位各自乖以加權(quán)因子后的總和
        for(int i=0;i<17;i++){
            idCardWiSum+=[[identityCard substringWithRange:NSMakeRange(i,1)] intValue]*[idCardWi[i] intValue];
        }
        
        int idCardMod=idCardWiSum%11;//計(jì)算出校驗(yàn)碼所在數(shù)組的位置
        NSString *idCardLast=[identityCard substringWithRange:NSMakeRange(17,1)];//得到最后一位身份證號(hào)碼
        
        //如果等于2,則說(shuō)明校驗(yàn)碼是10,身份證號(hào)碼最后一位應(yīng)該是X
        if(idCardMod==2){
            if([idCardLast isEqualToString:@"X"]||[idCardLast isEqualToString:@"x"]){
                return YES;
            }else{
                return NO;
            }
        }else{
            //用計(jì)算出的驗(yàn)證碼與最后一位身份證號(hào)碼匹配,如果一致,說(shuō)明通過,否則是無(wú)效的身份證號(hào)碼
            if([idCardLast intValue]==[idCardY[idCardMod] intValue]){
                return YES;
            }else{
                return NO;
            }
        }
    }
    return NO;
}

/** theLastIsX
 *
 *  驗(yàn)證身份證號(hào)碼最后一位是否為X  可用于身份證號(hào)碼輸入的自動(dòng)補(bǔ)全
 *
 */
- (BOOL)theLastIsX:(NSString *)IDNumber {
    NSMutableArray *IDArray = [NSMutableArray array];
    for (int i = 0; i < 17; i++) {
        NSRange range = NSMakeRange(i, 1);
        NSString *subString = [IDNumber substringWithRange:range];
        [IDArray addObject:subString];
    }
    NSArray *coefficientArray = [NSArray arrayWithObjects:@"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2", nil];
    int sum = 0;
    for (int i = 0; i < 17; i++) {
        int coefficient = [coefficientArray[i] intValue];
        int ID = [IDArray[i] intValue];
        sum += coefficient * ID;
    }
    return (sum % 11 == 2) ? YES : NO;
}

//銀行卡號(hào)驗(yàn)證
+ (BOOL)validateBankCard:(NSString*)cardNo{
    int oddsum = 0;     //奇數(shù)求和
    int evensum = 0;    //偶數(shù)求和
    int allsum = 0;
    int cardNoLength = (int)[cardNo length];
    int lastNum = [[cardNo substringFromIndex:cardNoLength-1] intValue];
    
    cardNo = [cardNo substringToIndex:cardNoLength - 1];
    for (int i = cardNoLength -1 ; i>=1;i--) {
        NSString *tmpString = [cardNo substringWithRange:NSMakeRange(i-1, 1)];
        int tmpVal = [tmpString intValue];
        if (cardNoLength % 2 ==1 ) {
            if((i % 2) == 0){
                tmpVal *= 2;
                if(tmpVal>=10)
                    tmpVal -= 9;
                evensum += tmpVal;
            }else{
                oddsum += tmpVal;
            }
        }else{
            if((i % 2) == 1){
                tmpVal *= 2;
                if(tmpVal>=10)
                    tmpVal -= 9;
                evensum += tmpVal;
            }else{
                oddsum += tmpVal;
            }
        }
    }
    
    allsum = oddsum + evensum;
    allsum += lastNum;
    if((allsum % 10) == 0)
        return YES;
    else
        return NO;
}


//驗(yàn)證webUrl
+ (BOOL)validateWebUrl:(NSString*)url
{
    NSString *urlRegex = @"((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)$";
    NSPredicate *urlPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",urlRegex];
    return [urlPredicate evaluateWithObject:urlRegex];
}



//驗(yàn)證IP
+ (BOOL)isValidatIP:(NSString *)ipAddress{
    
    NSString  *urlRegEx =@"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
    
    NSError *error;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:urlRegEx options:0 error:&error];
    
    if (regex != nil) {
        NSTextCheckingResult *firstMatch=[regex firstMatchInString:ipAddress options:0 range:NSMakeRange(0, [ipAddress length])];
        
        if (firstMatch) {
            NSRange resultRange = [firstMatch rangeAtIndex:0];
            NSString *result=[ipAddress substringWithRange:resultRange];
            //輸出結(jié)果
            NSLog(@"%@",result);
            return YES;
        }
    }
    return NO;
}


@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評(píng)論 25 709
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 100,584評(píng)論 9 468
  • 每個(gè)人在過年的時(shí)候都會(huì)有雄心壯志,給自己定下N個(gè)目標(biāo),對(duì)新的一年充滿憧憬。農(nóng)歷春節(jié)剛剛過去,有多少人下決心要學(xué)好英...
    有板無(wú)眼的流水閱讀 421評(píng)論 1 1
  • 相遇上 清晨的江南小鎮(zhèn)總是讓人留戀與流連。李藝彤一邊就著豆?jié){吃著油條,一邊享受著清晨的這份寧?kù)o自在。 “老板,來(lái)份...
    lemans閱讀 554評(píng)論 0 0
  • 想長(zhǎng)篇大論寫下所感所悟,話到嘴邊卻吐不出口,一顆心壓抑得快爆炸了。還是不能做到心如止水,還是如此多愁善感,捉摸不定...
    鳳仙兒閱讀 233評(píng)論 0 0

友情鏈接更多精彩內(nèi)容