国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

Objective-C實(shí)現(xiàn)身份證驗(yàn)證的方法示例

2020-07-26 02:52:54
字體:
供稿:網(wǎng)友

前言

最近在一個(gè)二次開發(fā)的項(xiàng)目中看到了一段身份證驗(yàn)證的OC代碼,雖然我一直討厭二次開發(fā)。因?yàn)檫@這個(gè)二次開發(fā)的項(xiàng)目太老,代碼太亂,毫無層次感。可是令人欣慰的是,我在里面發(fā)現(xiàn)了一段有用的代碼,感興趣的可以參考學(xué)習(xí)。

直接上代碼

- (BOOL)isValidIdCardNum{ NSString *value = [self copy]; value = [value stringByReplacingOccurrencesOfString:@"X" withString:@"x"]; value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; int length = 0; if (!value) {  return NO; }else {  length = (int)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 NO; } NSRegularExpression *regularExpression; NSUInteger numberofMatch; int year = 0; switch (length) {  case 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];// 測(cè)試出生日期的合法性   }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];// 測(cè)試出生日期的合法性   }   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 % 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];// 測(cè)試出生日期的合法性       }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];// 測(cè)試出生日期的合法性   }   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)]; // 判斷校驗(yàn)位    if ([M isEqualToString:[[value substringWithRange:NSMakeRange(17,1)] uppercaseString]]) {     return YES;// 檢測(cè)ID的校驗(yàn)位    }else {     return NO;    }   }else {    return NO;   }     default:   return NO; } return NO;}

上面的代碼驗(yàn)證十分全面。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)武林網(wǎng)的支持。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 绥江县| 马边| 邻水| 溆浦县| 武安市| 鄯善县| 伊春市| 二连浩特市| 五台县| 普定县| 鄂尔多斯市| 宜良县| 普定县| 鄯善县| 彝良县| 黔东| 石泉县| 西乌| 子长县| 米泉市| 巴楚县| 阿拉善盟| 新龙县| 车致| 舞阳县| 忻州市| 齐河县| 伊川县| 天台县| 贵州省| 平安县| 万全县| 定陶县| 彰武县| 武邑县| 云龙县| 临泉县| 上思县| 松原市| 莱芜市| 兴业县|