iOS UITextField輸入銀行卡號(hào)校驗(yàn)設(shè)置

簡書

輸入銀行卡號(hào)要自限制?我有好方法!

校驗(yàn)銀行卡號(hào)?我有好方法!

構(gòu)建思路

  1. 選擇合適的鍵盤
  2. 輸入時(shí)進(jìn)行調(diào)整
  3. 結(jié)束編輯再次調(diào)整

核心規(guī)避風(fēng)險(xiǎn)

貼代碼演示
class:superclass<UIUITextFieldDelegate>

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

self.CardNoField.delegate = self;

  • 鍵盤設(shè)置建議使用的鍵盤UIKeyboardTypeNumberPad
圖片發(fā)自簡書App
    self.CardNoField.keyboardType = UIKeyboardTypeNumberPad;
代理中應(yīng)做的:
  • 編輯時(shí)
-(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;
    
}
  • 結(jié)束編輯再次調(diào)整
- (void)textFieldDidEndEditing:(UITextField *)textField;{
    if (self.CardNoField== textField) {
        NSCharacterSet *setToRemove = [[ NSCharacterSet characterSetWithCharactersInString:@"0123456789"]
                                       invertedSet ];
        textField.text  = [[textField.text  componentsSeparatedByCharactersInSet:setToRemove] componentsJoinedByString:@""];
    }
}
  • 校驗(yàn)是否正確
+ (BOOL) checkCardNo:(NSString*) cardNo{
    if (cardNo.length<15) {
        return NO;
    }
    int oddsum = 0;     //奇數(shù)求和
    int evensum = 0;    //偶數(shù)求和
    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 校驗(yàn)身份證號(hào)碼是否正確

[下一篇]:IOS實(shí)現(xiàn)應(yīng)用內(nèi)打開第三方地圖app進(jìn)行導(dǎo)航






我的專題:

iOS開發(fā)

Mac漢化(游戲/軟件)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、什么時(shí)候應(yīng)該補(bǔ)血? 一般來說,想要知道自己是否貧血,并不會(huì)去醫(yī)院查血常規(guī),而是通過對(duì)自身直接的觀察和感受來判斷...
    瀟湘妃子JC閱讀 292評(píng)論 0 1
  • 夜已深,心卻不能靜。讀完史鐵生的《命若琴弦》,內(nèi)心深處風(fēng)起云涌,翻江倒海,感觸頗深,我和鐵生的生命遭遇有些相似,卻...
    青櫻低訴閱讀 362評(píng)論 3 2
  • 近日發(fā)現(xiàn)舒緩的音樂在陰霾的天氣效果很棒! 苗阜相聲說:翻閱歷史的夾縫,發(fā)現(xiàn)孫悟空是最可愛的人。這是相聲,相聲都是假...
    蘇小民閱讀 306評(píng)論 0 0

友情鏈接更多精彩內(nèi)容