各种校验(手机号,银行卡,身份证,邮箱等)
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

浙公网安备 33010602011771号