欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

iOS 中使用正则表达式判断身份证格式及银行卡号格式是否正确(推荐)

程序员文章站 2022-03-27 08:51:45
1.有时候我们会用到上传身份证号,或者银行卡号,这个时候就需要我们对身份证号以及银行卡号,进行基本的判断。 下面便是身份证号的判断返回yes是合法,反之不合法...

1.有时候我们会用到上传身份证号,或者银行卡号,这个时候就需要我们对身份证号以及银行卡号,进行基本的判断。

下面便是身份证号的判断返回yes是合法,反之不合法

#pragma mark 判断身份证号是否合法
- (bool)judgeidentitystringvalid:(nsstring *)identitystring {
  if (identitystring.length != 18) return no;
  // 正则表达式判断基本 身份证号是否满足格式
  nsstring *regex2 = @"^(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[xx])$)$";
  nspredicate *identitystringpredicate = [nspredicate predicatewithformat:@"self matches %@",regex2];
  //如果通过该验证,说明身份证格式正确,但准确性还需计算
  if(![identitystringpredicate evaluatewithobject:identitystring]) return no;
  //** 开始进行校验 *//
  //将前17位加权因子保存在数组里
  nsarray *idcardwiarray = @[@"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2"];
  //这是除以11后,可能产生的11位余数、验证码,也保存成数组
  nsarray *idcardyarray = @[@"1", @"0", @"10", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2"];
  //用来保存前17位各自乖以加权因子后的总和
  nsinteger idcardwisum = 0;
  for(int i = 0;i < 17;i++) {
    nsinteger substrindex  = [[identitystring substringwithrange:nsmakerange(i, 1)] integervalue];
    nsinteger idcardwiindex = [[idcardwiarray objectatindex:i] integervalue];
    idcardwisum      += substrindex * idcardwiindex;
  }
  //计算出校验码所在数组的位置
  nsinteger idcardmod=idcardwisum%11;
  //得到最后一位身份证号码
  nsstring *idcardlast= [identitystring substringwithrange:nsmakerange(17, 1)];
  //如果等于2,则说明校验码是10,身份证号码最后一位应该是x
  if(idcardmod==2) {
    if(![idcardlast isequaltostring:@"x"]||[idcardlast isequaltostring:@"x"]) {
      return no;
    }
  }else{
    //用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码
    if(![idcardlast isequaltostring: [idcardyarray objectatindex:idcardmod]]) {
      return no;
    }
  }
  return yes;
}

在接下来便是银行卡号的的判断返回yes或者是真是合法,反之不合法

#pragma mark 判断银行卡号是否合法
-(bool)isbankcard:(nsstring *)cardnumber{
  if(cardnumber.length==0){
    return no;
  }
  nsstring *digitsonly = @"";
  char c;
  for (int i = 0; i < cardnumber.length; i++){
    c = [cardnumber characteratindex:i];
    if (isdigit(c)){
      digitsonly =[digitsonly stringbyappendingformat:@"%c",c];
    }
  }
  int sum = 0;
  int digit = 0;
  int addend = 0;
  bool timestwo = false;
  for (nsinteger i = digitsonly.length - 1; i >= 0; i--){
    digit = [digitsonly characteratindex:i] - '0';
    if (timestwo){
      addend = digit * 2;
      if (addend > 9) {
        addend -= 9;
      }
    }
    else {
      addend = digit;
    }
    sum += addend;
    timestwo = !timestwo;
  }
  int modulus = sum % 10;
  return modulus == 0;
}

以上所述是小编给大家介绍的ios 中使用正则表达式判断身份证格式及银行卡号格式是否正确(推荐),希望对大家有所帮助