iOS UITextField输入银行卡号校验设置

简书

输入银行卡号要自限制?我有好方法!

校验银行卡号?我有好方法!

构建思路

  1. 选择合适的键盘
  2. 输入时进行调整
  3. 结束编辑再次调整

核心规避风险

贴代码演示
class:superclass<UIUITextFieldDelegate>

self.CardNoField.text = [[UITextField alloc]init];

self.CardNoField.delegate = self;

  • 键盘设置建议使用的键盘UIKeyboardTypeNumberPad
图片发自简书App
    self.CardNoField.keyboardType = UIKeyboardTypeNumberPad;
代理中应做的:
  • 编辑时
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    
    NSLog(@"%@",string);
    
    if ([string isEqualToString:@" "]) {
        return NO;
    }
    if(self.CardNoField == textField){
        if ([string isEqualToString:@"."]&&newLength == 18) {
            textField.text = [NSString stringWithFormat:@"%@X",textField.text];
            return NO;
        }if ([string isEqualToString:@"."]) {
            return NO;
        }
        
        NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
        NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
        return [string isEqualToString:filtered]&&newLength <= 19? YES :NO   ;
    }
    return newLength <= 16;
    
}
  • 结束编辑再次调整
- (void)textFieldDidEndEditing:(UITextField *)textField;{
    if (self.CardNoField== textField) {
        NSCharacterSet *setToRemove = [[ NSCharacterSet characterSetWithCharactersInString:@"0123456789"]
                                       invertedSet ];
        textField.text  = [[textField.text  componentsSeparatedByCharactersInSet:setToRemove] componentsJoinedByString:@""];
    }
}
  • 校验是否正确
+ (BOOL) checkCardNo:(NSString*) cardNo{
    if (cardNo.length<15) {
        return NO;
    }
    int oddsum = 0;     //奇数求和
    int evensum = 0;    //偶数求和
    int allsum = 0;
    int cardNoLength = (int)[cardNo length];
    int lastNum = [[cardNo substringFromIndex:cardNoLength-1] intValue];
    
    cardNo = [cardNo substringToIndex:cardNoLength - 1];
    for (int i = cardNoLength -1 ; i>=1;i--) {
        NSString *tmpString = [cardNo substringWithRange:NSMakeRange(i-1, 1)];
        int tmpVal = [tmpString intValue];
        if (cardNoLength % 2 ==1 ) {
            if((i % 2) == 0){
                tmpVal *= 2;
                if(tmpVal>=10)
                    tmpVal -= 9;
                evensum += tmpVal;
            }else{
                oddsum += tmpVal;
            }
        }else{
            if((i % 2) == 1){
                tmpVal *= 2;
                if(tmpVal>=10)
                    tmpVal -= 9;
                evensum += tmpVal;
            }else{
                oddsum += tmpVal;
            }
        }
    }
    
    allsum = oddsum + evensum;
    allsum += lastNum;
    if((allsum % 10) == 0)
        return YES;
    else
        return NO;
}

谢谢!

[上一篇]:iOS 校验身份证号码是否正确

[下一篇]:IOS实现应用内打开第三方地图app进行导航






我的专题:

iOS开发

Mac汉化(游戏/软件)

推荐阅读更多精彩内容

  • 秋叶 绍兴文理...
    元培小小编阅读 20评论 0 0
  • 在上一期的文章中工程造价大数据网的小编有为大家分享到《市政工程施工图预算——施工图预算的审查》,有兴趣的朋友可以前...
    成都市大匠通科技阅读 358评论 0 5
  • 一、什么时候应该补血? 一般来说,想要知道自己是否贫血,并不会去医院查血常规,而是通过对自身直接的观察和感受来判断...
    说书人99999阅读 32评论 0 0
  • 夜已深,心却不能静。读完史铁生的《命若琴弦》,内心深处风起云涌,翻江倒海,感触颇深,我和铁生的生命遭遇有些相似,却...
    青樱低诉阅读 51评论 3 2
  • 近日发现舒缓的音乐在阴霾的天气效果很棒! 苗阜相声说:翻阅历史的夹缝,发现孙悟空是最可爱的人。这是相声,相声都是假...
    苏小民阅读 16评论 0 0