整理了之前用到的一些驗證,發出來,希望對各位有用。
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
//驗證郵箱
+ (BOOL)validateEmail:(NSString *)email;
//驗證手機
+ (BOOL)validateMobile:(NSString *)mobile;
//驗證車牌號
+ (BOOL)validateCarNo:(NSString *)carNo;
//驗證用戶名
+ (BOOL)validateUserName:(NSString *)name;
//驗證密碼
+ (BOOL)validatePassword:(NSString *)passWord;
//驗證昵稱
+ (BOOL)validateNickname:(NSString *)nickname;
//驗證身份證
+ (BOOL)validateIdentityCard: (NSString *)identityCard;
//驗證身份證號碼最后一位是否為X 可用于身份證號碼輸入的自動補全
- (BOOL)theLastIsX:(NSString *)IDNumber;
//驗證金額
+ (BOOL)validateMoney:(NSString *)money;
//驗證webUrl
+ (BOOL)validateWebUrl:(NSString*)url;
//銀行卡號驗證
+ (BOOL)validateBankCard:(NSString*)cardNo;
//驗證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];
}
//手機號碼驗證
+ (BOOL)validateMobile:(NSString *)mobile
{
//手機號以13, 15,18開頭,八個 \d 數字字符
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];
}
//金額驗證
+ (BOOL)validateMoney:(NSString *)money
{
NSString *phoneRegex = @"^([0-9]*[1-9][0-9]*)$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
return [phoneTest evaluateWithObject:money];
}
//車牌號驗證
+ (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];
}
//身份證號
+ (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;
}
//判斷校驗位
if(identityCard.length==18)
{
NSArray *idCardWi= @[ @"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2" ]; //將前17位加權因子保存在數組里
NSArray * idCardY=@[ @"1", @"0", @"10", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2" ]; //這是除以11后,可能產生的11位余數、驗證碼,也保存成數組
int idCardWiSum=0; //用來保存前17位各自乖以加權因子后的總和
for(int i=0;i<17;i++){
idCardWiSum+=[[identityCard substringWithRange:NSMakeRange(i,1)] intValue]*[idCardWi[i] intValue];
}
int idCardMod=idCardWiSum%11;//計算出校驗碼所在數組的位置
NSString *idCardLast=[identityCard substringWithRange:NSMakeRange(17,1)];//得到最后一位身份證號碼
//如果等于2,則說明校驗碼是10,身份證號碼最后一位應該是X
if(idCardMod==2){
if([idCardLast isEqualToString:@"X"]||[idCardLast isEqualToString:@"x"]){
return YES;
}else{
return NO;
}
}else{
//用計算出的驗證碼與最后一位身份證號碼匹配,如果一致,說明通過,否則是無效的身份證號碼
if([idCardLast intValue]==[idCardY[idCardMod] intValue]){
return YES;
}else{
return NO;
}
}
}
return NO;
}
/** theLastIsX
*
* 驗證身份證號碼最后一位是否為X 可用于身份證號碼輸入的自動補全
*
*/
- (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;
}
//銀行卡號驗證
+ (BOOL)validateBankCard:(NSString*)cardNo{
int oddsum = 0; //奇數求和
int evensum = 0; //偶數求和
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;
}
//驗證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];
}
//驗證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];
//輸出結果
NSLog(@"%@",result);
return YES;
}
}
return NO;
}
@end