正则表达式—————判断身份证号
来源:互联网 发布:Windows怎么截屏长图 编辑:程序博客网 时间:2024/05/22 15:35
- /**
- *
- * 判断身份证是否正确
- *
- * @param value 身份证号
- *
- * @return YES or NO
- */
- + (BOOL)judgeIdcardLegal:(NSString *)value;
- + (BOOL)judgeIdcardLegal:(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;
- switch (length) {
- case 15:
- year = [value substringWithRange:NSMakeRange(8,2)].intValue +1900;
- if (year %400 ==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:匹配到得字符串的个数
- numberofMatch = [regularExpression numberOfMatchesInString:value
- options:NSMatchingReportProgress
- range:NSMakeRange(0, value.length)];
- if(numberofMatch >0) {
- return YES;
- }else {
- return NO;
- }
- case 18:
- year = [value substringWithRange:NSMakeRange(6,4)].intValue;
- if (year %400 ==0 || (year %100 !=0 && year %4 ==0)) {
- //原来的@"^[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]$"
- 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) {
- 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)];// 判断校验位
- if ([M isEqualToString:[value substringWithRange:NSMakeRange(17,1)]]) {
- return YES;// 检测ID的校验位
- }else {
- return NO;
- }
- }else {
- return NO;
- }
- default:
- return false;
- }
- }
0 0
- 正则表达式—————判断身份证号
- 利用正则表达式判断身份证号
- 利用正则表达式判断身份证号
- 利用正则表达式判断身份证号
- 利用正则表达式判断身份证号
- IOS中判断身份证号的正则表达式
- iOS开发——手机号,密码,邮箱,身份证号,中文判断
- 《iOS学习笔记—— 身份证号认证判断》
- 正则表达式—————判断邮箱
- 正则表达式对数字的判断——转
- java正则表达式——判断日期格式
- js正则表达式判断身份证号、邮箱和空字符串
- OC正则表达式判断手机号、身份证号、车牌号等是否正确
- 邮箱,手机号,身份证号等正则表达式的判断
- 身份证号验证正则表达式
- 正则表达式验证身份证号
- 正则表达式校验身份证号
- 身份证号 正则表达式 探究
- 高效网站开发缓存技术应用——网页输出缓存
- 程序性能分析profiling
- jquery操作select标签
- 委托--Func与Action
- RecyclerView系列之(1):为RecyclerView添加Header和Footer
- 正则表达式—————判断身份证号
- 洛谷 P1419 寻找段落
- 《CLR via C#》读书笔记-异步编程(一)
- PHP 数组基本概念
- printf格式指令说明
- 每日一个js实例14--随机数
- 我心中的微信小程序 韩俊强的博客
- Junit Test使用样例
- 如何给你的Android 安装文件(APK)瘦身