輸入銀行卡號(hào)要自限制?我有好方法!
校驗(yàn)銀行卡號(hào)?我有好方法!
構(gòu)建思路
- 選擇合適的鍵盤
- 輸入時(shí)進(jìn)行調(diào)整
- 結(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)航