因为各个公司的需求不同,当时我也是很麻烦才找到了这些验证的东西,今天我把他整理一下,希望以后有人再用的时候,可以容易一点,一言不合,直接上代码
一、身份证的验证
+ (BOOL)validateIDCardNumber:(NSString *)value {
value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSInteger length =0;
if (!value) {
return NO;
}else {
length = value.length;
if (length !=15 && length !=18) {
return NO;
}
}
// 省份代码
NSArray *areasArray =@[@"11",@"12", @"13",@"14", @"15",@"21", @"22",@"23", @"31",@"32", @"33",@"34", @"35",@"36", @"37",@"41", @"42",@"43", @"44",@"45", @"46",@"50", @"51",@"52", @"53",@"54", @"61",@"62", @"63",@"64", @"65",@"71", @"81",@"82", @"91"];
NSString *valueStart2 = [value substringToIndex:2];
BOOL areaFlag =NO;
for (NSString *areaCode in areasArray) {
if ([areaCode isEqualToString:valueStart2]) {
areaFlag =YES;
break;
}
}
if (!areaFlag) {
return false;
}
NSRegularExpression * regularExpression;
NSUInteger numberofMatch;
NSInteger year = 0;
if (length==15) {
year = [value substringWithRange:NSMakeRange(6,2)].intValue +1900;
if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {
regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$"
options:NSRegularExpressionCaseInsensitive
error:nil];//测试出生日期的合法性
}else {
regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$"
options:NSRegularExpressionCaseInsensitive
error:nil];//测试出生日期的合法性
}
numberofMatch = [regularExpression numberOfMatchesInString:value
options:NSMatchingReportProgress
range:NSMakeRange(0, value.length)];
// [regularExpression release];
if(numberofMatch >0) {
return YES;
}else {
return NO;
}
}else if(length==18){
year = [[value substringWithRange:NSMakeRange(6,4)] intValue];
if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {
regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$"
options:NSRegularExpressionCaseInsensitive
error:nil];//测试出生日期的合法性
}else {
regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$"
options:NSRegularExpressionCaseInsensitive
error:nil];//测试出生日期的合法性
}
numberofMatch = [regularExpression numberOfMatchesInString:value
options:NSMatchingReportProgress
range:NSMakeRange(0, value.length)];
// [regularExpressionrelease];
if(numberofMatch >0) {
int S = ([value substringWithRange:NSMakeRange(0,1)].intValue + [value substringWithRange:NSMakeRange(10,1)].intValue) *7 + ([value substringWithRange:NSMakeRange(1,1)].intValue + [value substringWithRange:NSMakeRange(11,1)].intValue) *9 + ([value substringWithRange:NSMakeRange(2,1)].intValue + [value substringWithRange:NSMakeRange(12,1)].intValue) *10 + ([value substringWithRange:NSMakeRange(3,1)].intValue + [value substringWithRange:NSMakeRange(13,1)].intValue) *5 + ([value substringWithRange:NSMakeRange(4,1)].intValue + [value substringWithRange:NSMakeRange(14,1)].intValue) *8 + ([value substringWithRange:NSMakeRange(5,1)].intValue + [value substringWithRange:NSMakeRange(15,1)].intValue) *4 + ([value substringWithRange:NSMakeRange(6,1)].intValue + [value substringWithRange:NSMakeRange(16,1)].intValue) *2 + [value substringWithRange:NSMakeRange(7,1)].intValue *1 + [value substringWithRange:NSMakeRange(8,1)].intValue *6 + [value substringWithRange:NSMakeRange(9,1)].intValue *3;
int Y = S %11;
NSString *M =@"F";
NSString *JYM =@"10X98765432";
M = [JYM substringWithRange:NSMakeRange(Y,1)];// 判断校验位
NSString * str = [value substringWithRange:NSMakeRange(17,1)].uppercaseString;
if ([M isEqualToString:str]) {
return YES;// 检测ID的校验位
}else {
return NO;
}
}else {
return NO;
}
}else
{
return NO;
}
}
二、校验用户手机号
+ (BOOL) validateUserPhone:(NSString *)str
{
NSRegularExpression *regularexpression = [[NSRegularExpression alloc]
initWithPattern:@"^1[3|4|5|7|8][0-9][0-9]{8}$"
options:NSRegularExpressionCaseInsensitive
error:nil];
NSUInteger numberofMatch = [regularexpression numberOfMatchesInString:str
options:0
range:NSMakeRange(0, str.length)];
if(numberofMatch > 0)
{
return YES;
}
return NO;
}
三、邮箱格式校验
+ (BOOL) validateUserEmail:(NSString *)str
{
NSRegularExpression * regularexpression = [[NSRegularExpression alloc]
initWithPattern:@"\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"
options:NSRegularExpressionCaseInsensitive
error:nil];
NSUInteger numberofMatch = [regularexpression numberOfMatchesInString:str
options:0
range:NSMakeRange(0, str.length)];
if(numberofMatch > 0)
{
NSLog(@"%@ isNumbericString: YES", str);
return YES;
}
NSLog(@"%@ isNumbericString: NO", str);
return NO;
}
+(BOOL)validateUserName:(NSString *)str
{
int alength = (int)[str length];
for (int i = 0; i<alength; i++) {
char commitChar = [str characterAtIndex:i];
NSString *temp = [str substringWithRange:NSMakeRange(i,1)];
if ( [self validateNameIsChinese:temp]){
NSLog(@"字符串中含有中文");
}else if((commitChar>64)&&(commitChar<91)){
NSLog(@"字符串中含有大写英文字母");
}else if((commitChar>96)&&(commitChar<123)){
NSLog(@"字符串中含有小写英文字母");
}else if((commitChar>47)&&(commitChar<58)){
NSLog(@"字符串中含有数字");
}else{
NSLog(@"字符串中含有非法字符");
return NO;
}
}
return YES;
}
+(BOOL)validateNameIsChinese:(NSString*)str
{
NSString *match=@"(^[\u4e00-\u9fa5]+$)";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF matches %@", match];
return [predicate evaluateWithObject:str];
}
这篇博客整理了身份证、手机号和邮箱的验证代码,包括15位和18位身份证的校验,手机号的匹配,以及邮箱格式的检查,旨在帮助开发者更方便地进行用户输入验证。
923

被折叠的 条评论
为什么被折叠?



