iOS UITextField輸入銀行卡號校驗設置 核心規避風險 我的專題: iOS開發 Mac漢化(遊戲/軟件)

簡書

輸入銀行卡號要自限制?我有好方法!

校驗銀行卡號?我有好方法!

構建思路

  1. 選擇合適的鍵盤
  2. 輸入時進行調整
  3. 結束編輯再次調整

核心規避風險

貼代碼演示
class:superclass<UIUITextFieldDelegate>

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

self.CardNoField.delegate = self;

  • 鍵盤設置建議使用的鍵盤UIKeyboardTypeNumberPad
    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漢化(遊戲/軟件)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章