iOS校验二代身份证(正则加校验和)

二代身份证除了位数和各位表达的含义有限制外,还有一个校验和的问题,这篇文章就是来解决这个问题。网络上应该有对应的Java代码,我在这里这是把Java代码转换成了oc的代码,供大家使用。已经经过测试,验证正确。

- (BOOL)validateIdentityCard:(NSString *)identityCard
{
  BOOL flag;
  if (identityCard.length <= 0) {
      flag = NO;
      return flag;
  }

  flag = [identityCardPredicate evaluateWithObject:identityCard];

  flag = flag && [self isRealIDCode:identityCard];

  return flag;

}

- (BOOL)isRealIDCode:(NSString *)realCode {

  if (realCode.length < 18) {
      return false;
  }

  NSArray *ds = @[@7, @9, @10, @5, @8, @4, @2, @1, @6, @3, @7, @9, @10, @5, @8, @4, @2];
  NSInteger total = 0;

  for (NSInteger i = 0; i < 17; i++) {
    
      NSRange currentRange = NSMakeRange(i, 1);
      NSString *currentCode = [realCode substringWithRange:currentRange];
      NSInteger currentCodeInteger = [currentCode integerValue];
    
      NSInteger dsi = [ds[i] integerValue];
      total += currentCodeInteger * dsi;
  }

  total = total % 11;
  NSArray *ends = @[@"1", @"0", @"x", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2"];
  NSString *end = ends[total];

  if ([end isEqualToString:[[realCode substringWithRange:NSMakeRange(17, 1)] lowercaseString]]) {
      return YES;
  }

  return NO;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • QQBLin阅读 243评论 0 0
  • 监考,外校学生,最后一场时,发生了不愉快。 这场不好监是这两天来老师公认的。有俩学生特别猴,我不得不得站在他们身旁...
    荷塘恋雨阅读 184评论 2 1
  • 在这样一个只有风的夜晚,我坐在椅子上煎熬着不肯入眠。干脆打开窗户迎接月脸。朝阳 刚刚蹿上地平线,小黑追逐着屋檐上的...
    李一十八阅读 258评论 1 1
  • 酒与污水定律:指平时在工作时喜欢传播负能量的人,他们经常传播负能量把事情搞糟糕,打破内部和谐的局面,这种人会很容易...
    雨馨l阅读 154评论 0 0