正则表达式—————判断身份证号

  1. /** 
  2.  * 
  3.  *  判断身份证是否正确 
  4.  * 
  5.  *  @param value 身份证号 
  6.  * 
  7.  *  @return YES or NO 
  8.  */  
  9. + (BOOL)judgeIdcardLegal:(NSString *)value;  



  1. + (BOOL)judgeIdcardLegal:(NSString *)value {  
  2.       
  3.     value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];  
  4.       
  5.     NSInteger length =0;  
  6.       
  7.     if (!value) {  
  8.           
  9.         return NO;  
  10.           
  11.     }else {  
  12.           
  13.         length = value.length;  
  14.           
  15.         if (length !=15 && length !=18) {  
  16.             return NO;  
  17.         }  
  18.     }  
  19.       
  20.     // 省份代码  
  21.     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"];  
  22.       
  23.     NSString *valueStart2 = [value substringToIndex:2];  
  24.       
  25.     BOOL areaFlag =NO;  
  26.       
  27.     for (NSString *areaCode in areasArray) {  
  28.           
  29.         if ([areaCode isEqualToString:valueStart2]) {  
  30.               
  31.             areaFlag =YES;  
  32.               
  33.             break;  
  34.               
  35.         }  
  36.           
  37.     }  
  38.       
  39.     if (!areaFlag) {  
  40.           
  41.         return false;  
  42.           
  43.     }  
  44.     //生日部分的编码  
  45.     NSRegularExpression *regularExpression;  
  46.       
  47.     NSUInteger numberofMatch;  
  48.       
  49.     NSInteger year =0;  
  50.       
  51.     switch (length) {  
  52.               
  53.         case 15:  
  54.               
  55.             year = [value substringWithRange:NSMakeRange(8,2)].intValue +1900;  
  56.               
  57.             if (year %400 ==0 || (year %100 !=0 && year %4 ==0)) {  
  58.                   
  59.                 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}$"  
  60.                                        
  61.                                                                         options:NSRegularExpressionCaseInsensitive  
  62.                                        
  63.                                                                           error:nil];//测试出生日期的合法性  
  64.                   
  65.             }else {  
  66.                   
  67.                 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}$"  
  68.                                        
  69.                                                                         options:NSRegularExpressionCaseInsensitive  
  70.                                        
  71.                                                                           error:nil];//测试出生日期的合法性  
  72.                   
  73.             }  
  74.             //numberofMatch:匹配到得字符串的个数  
  75.             numberofMatch = [regularExpression numberOfMatchesInString:value  
  76.                                
  77.                                                                options:NSMatchingReportProgress  
  78.                                
  79.                                                                  range:NSMakeRange(0, value.length)];  
  80.               
  81.             if(numberofMatch >0) {  
  82.                   
  83.                 return YES;  
  84.                   
  85.             }else {  
  86.                   
  87.                 return NO;  
  88.                   
  89.             }  
  90.               
  91.         case 18:  
  92.               
  93.             year = [value substringWithRange:NSMakeRange(6,4)].intValue;  
  94.               
  95.             if (year %400 ==0 || (year %100 !=0 && year %4 ==0)) {  
  96.                   
  97.                 //原来的@"^[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]$"  
  98.                 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]$"  
  99.                                        
  100.                                                                         options:NSRegularExpressionCaseInsensitive  
  101.                                        
  102.                                                                           error:nil];//测试出生日期的合法性  
  103.                   
  104.             }else {  
  105.                   
  106.                 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]$"  
  107.                                        
  108.                                                                         options:NSRegularExpressionCaseInsensitive  
  109.                                        
  110.                                                                           error:nil];//测试出生日期的合法性  
  111.                   
  112.             }  
  113.               
  114.             numberofMatch = [regularExpression numberOfMatchesInString:value  
  115.                                
  116.                                                                options:NSMatchingReportProgress  
  117.                                
  118.                                                                  range:NSMakeRange(0, value.length)];  
  119.             //验证校验位  
  120.             if(numberofMatch >0) {  
  121.                   
  122.                 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;  
  123.                   
  124.                   
  125.                 int Y = S %11;  
  126.                   
  127.                 NSString *M =@"F";  
  128.                   
  129.                 NSString *JYM =@"10X98765432";  
  130.                   
  131.                 M = [JYM substringWithRange:NSMakeRange(Y,1)];// 判断校验位  
  132.                   
  133.                 if ([M isEqualToString:[value substringWithRange:NSMakeRange(17,1)]]) {  
  134.                       
  135.                     return YES;// 检测ID的校验位  
  136.                       
  137.                 }else {  
  138.                       
  139.                     return NO;  
  140.                       
  141.                 }  
  142.                   
  143.             }else {  
  144.                   
  145.                 return NO;  
  146.                   
  147.             }  
  148.               
  149.         default:  
  150.               
  151.             return false;  
  152.     }  
  153.       
  154. }  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值