• 银行卡格式化输出及后四位显示


    #import <UIKit/UIKit.h>
    
    @interface BankCardFormat : UITextField
    
    @end
    #import "BankCardFormat.h"
    
    @interface BankCardFormat ()<UITextFieldDelegate>
    {
        NSString *previousTextFieldContent;
        
        UITextRange *previousSelection;
    }
    @end
    
    @implementation BankCardFormat
    
    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        
        if (self) {
            self.delegate = self;
            
            [self addTarget:self
             
           action          :@selector(reformatAsCardNumber:)
             
           forControlEvents:UIControlEventEditingChanged];
        }
        
        return self;
    }
    
    - (void)reformatAsCardNumber:(UITextField *)textField
    {
        
        NSUInteger targetCursorPosition =[textField offsetFromPosition:textField.beginningOfDocument toPosition:textField.selectedTextRange.start];
        
        NSString *cardNumberWithoutSpaces =[self removeNonDigits:textField.text andPreserveCursorPosition:&targetCursorPosition];
        
        if ([cardNumberWithoutSpaces length] > 19) {
            [textField setText:previousTextFieldContent];
            textField.selectedTextRange = previousSelection;
            return;
        }
        
        NSString *cardNumberWithSpaces =[self insertSpacesEveryFourDigitsIntoString:cardNumberWithoutSpaces
                                                          andPreserveCursorPosition:&targetCursorPosition];
        
        textField.text = cardNumberWithSpaces;
        UITextPosition *targetPosition =[textField positionFromPosition:[textField beginningOfDocument]offset:targetCursorPosition];
        
        [textField setSelectedTextRange:[textField textRangeFromPosition:targetPosition toPosition:targetPosition]];
    }
    
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        previousTextFieldContent = textField.text;
        previousSelection = textField.selectedTextRange;
        
        return YES;
    }
    - (NSString *)removeNonDigits :(NSString *)string  andPreserveCursorPosition:(NSUInteger *)cursorPosition
    {
        NSUInteger      originalCursorPosition = *cursorPosition;
        NSMutableString *digitsOnlyString = [NSMutableString new];
        
        for (NSUInteger i = 0; i < [string length]; i++) {
            unichar characterToAdd = [string characterAtIndex:i];
            
            if (isdigit(characterToAdd)) {
                NSString *stringToAdd =[NSString stringWithCharacters:&characterToAdd length:1];
                
                [digitsOnlyString appendString:stringToAdd];
            } else {
                if (i < originalCursorPosition) {
                    (*cursorPosition)--;
                }
            }
        }
        
        return digitsOnlyString;
    }
    - (NSString *)insertSpacesEveryFourDigitsIntoString:(NSString *)string andPreserveCursorPosition :(NSUInteger *)cursorPosition
    {
        NSMutableString *stringWithAddedSpaces = [NSMutableString new];
        NSUInteger      cursorPositionInSpacelessString = *cursorPosition;
        
        for (NSUInteger i = 0; i < [string length]; i++) {
            if ((i > 0) && ((i % 4) == 0)) {
                [stringWithAddedSpaces appendString:@" "];
                
                if (i < cursorPositionInSpacelessString) {
                    (*cursorPosition)++;
                }
            }
            unichar     characterToAdd = [string characterAtIndex:i];
            NSString    *stringToAdd =
            [NSString stringWithCharacters:&characterToAdd length:1];
            
            [stringWithAddedSpaces appendString:stringToAdd];
        }
        
        return stringWithAddedSpaces;
    }
    
    @end
    //银行卡号输入的时候要求四位一个空格
    /*使用方法:
     
     BankCardFormat *bankCardNumber = [[BankCardFormat alloc]initWithFrame:CGRectMake(60, 122, 230, 50)];
     bankCardNumber.borderStyle = UITextBorderStyleLine;
     bankCardNumber.placeholder = @"请输入你的银行卡号";
     [self.view addSubview:bankCardNumber];
     
     */
    
    //银行卡只显示后四位的做法
    /*
     原始卡号
    NSString * origincardNo = [_wedData  objectAtIndex:i][@"bankCardNo"];
    
    NSString *firstCardNo = [origincardNo  substringToIndex:origincardNo.length-4];
    DLog(@"")
    //        后四位数字
    NSString *lastfourCardno = [origincardNo  substringFromIndex:origincardNo.length - 4];
    DLog(@"%@",lastfourCardno);
    
    
    DLog("%lu",(unsigned long)origincardNo.length);
    
    DLog("%lu",(unsigned long)firstCardNo.length);
    
    
    NSString *replacecardNo = [firstCardNo  stringByReplacingOccurrencesOfString:firstCardNo withString:@"*****************************"];
    
    DLog("%lu",(unsigned long)replacecardNo.length);
    
    
    NSString *transform;
    
    if (replacecardNo.length>firstCardNo.length) {
        
        transform = [replacecardNo  substringToIndex:firstCardNo.length];
    }
    
    DLog("%lu",(unsigned long)transform.length);
    
    DLog("%@",replacecardNo);
    
    
    NSString *cardNumberstr = [NSString stringWithFormat:@"%@%@",transform,lastfourCardno];
    
    NSString *tmpStr = cardNumberstr;
    
    DLog("%@",cardNumberstr);
    
    DLog("%@",tmpStr);
    
    int size = (int)tmpStr.length / 4;
    NSMutableArray *tmpStrArr = [[NSMutableArray alloc] init];
    for (int n = 0;n < size; n++)
    {
        [tmpStrArr addObject:[tmpStr substringWithRange:NSMakeRange(n*4, 4)]];
    }
    [tmpStrArr addObject:[tmpStr substringWithRange:NSMakeRange(size*4, (tmpStr.length % 4))]];
    tmpStr = [tmpStrArr componentsJoinedByString:@" "];
    
    DLog("%lu",(unsigned long)tmpStr.length);
    DLog("%@",tmpStr);
    
    //tmpStr就是最终只显示后四位的的银行卡号
     */
  • 相关阅读:
    EF 关系规则(一对一、一对多、多对多...)
    EF框架中加子类后出现列名 'Discriminator' 无效问题
    .net下Ueditor配置(主要讲解上传功能配置)
    同构数查找程序的优化过程 Anthony
    Effective STL 条款17 Anthony
    C 语言中的数组类型和数组指针类型. Anthony
    Effective STL 条款18 Anthony
    RDLC之自定義數據集二
    给Calendar添加标签
    Profile学习
  • 原文地址:https://www.cnblogs.com/er-dai-ma-nong/p/5045729.html
Copyright © 2020-2023  润新知