最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Objective-C实现身份证验证的方法示例
时间:2022-06-25 04:36:13 编辑:袖梨 来源:一聚教程网
最近在一个二次开发的项目中看到了一段身份证验证的OC代码,虽然我一直讨厌二次开发。因为这这个二次开发的项目太老,代码太乱,毫无层次感。可是令人欣慰的是,我在里面发现了一段有用的代码,感兴趣的可以参考学习。
直接上代码
代码如下 | 复制代码 |
- (BOOL)isValidIdCardNum { NSString *value = [self copy]; value = [value stringByReplacingOccurrencesOfString:@"X"withString:@"x"]; value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; intlength = 0; if(!value) { returnNO; }else{ length = (int)value.length; if(length != 15 && length !=18) { returnNO; } } // 省份代码 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]; BOOLareaFlag = NO; for(NSString *areaCode in areasArray) { if([areaCode isEqualToString:valueStart2]) { areaFlag = YES; break; } } if(!areaFlag) { returnNO; } NSRegularExpression *regularExpression; NSUInteger numberofMatch; intyear = 0; switch(length) { case15: 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)]; if(numberofMatch > 0) { returnYES; }else{ returnNO; } case18: 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|20[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|20[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)]; if(numberofMatch > 0) { intS = ([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; intY = S % 11; NSString *M = @"F"; NSString *JYM = @"10X98765432"; M = [JYM substringWithRange:NSMakeRange(Y,1)];// 判断校验位 if([M isEqualToString:[[value substringWithRange:NSMakeRange(17,1)] uppercaseString]]) { returnYES;// 检测ID的校验位 }else{ returnNO; } }else{ returnNO; }
default: returnNO; } returnNO; } |
上面的代码验证十分全面。
相关文章
- 光遇12.26免费魔法有什么 12-26
- 江南百景图碎金泉怎么样 12-26
- 江南百景图游宴廊怎么样 江南百景图游宴廊建筑介绍 12-26
- 江南百景图碎金泉怎么样 江南百景图碎金泉建筑介绍 12-26
- 炉石传说兑换码大全 12-26
- 重返未来1999趋光性研究夜幕之外怎么玩 趋光性夜幕之外活动介绍 12-26