iOS开发自动补全第18位身份证号码的X

原创 2016年05月30日 23:39:42

众所周知,大陆的身份证号码是由18位数字组成的,当然也有一个特例就是有些人的身份证号码末位是X。对于iOS开发来说真是蛋疼的要命,用普通键盘样式,字母键盘要和数字键盘切换,明显不利于用户操作,但是用数字键盘吧,又没有X。大多数人肯定就会想直接自定义键盘。这个方法是能解决问题,但是总这么千篇一律的,感觉不到一点新意。我查阅了身份证号码的百度百科后,发现最后一位其实可以通过前17位数字计算出来的。于是我就想出了一个不自定义键盘也能用数字键盘写出身份证号码的方法:当写到17位的时候,如果判断出来该用户的18位为X,则自动补全X,否则依然由用户输入第18位

// textField代理方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    // string.length为0,表明没有输入字符,应该是正在删除,应该返回YES。
    if (string.length == 0) {
        return YES;
    }
    // length为当前输入框中的字符长度
    NSUInteger length = textField.text.length + string.length;
    // 如果该页面中还有其他的输入框,则需要做这个判断
    if (textField == self.idNumberTextField) {
    	// str为当前输入框中的字符
        NSString *str = [NSString stringWithFormat:@"%@%@", textField.text, string];
        // 当输入到17位数的时候,通过theLastIsX方法判断最后一位是不是X
        if (length == 17 && [self theLastIsX:str]) {
        	// 如果是17位,并通过前17位计算出18位为X,自动补全,并返回NO,禁止编辑。
            textField.text = [NSString stringWithFormat:@"%@%@X", textField.text, string];
            return NO;
        }
        // 如果是其他情况则直接返回小于等于18(最多输入18位)
        return length <= 18;
    }
    return YES;
}
// 判断最后一个是不是X
- (BOOL)theLastIsX:(NSString *)IDNumber {
    NSMutableArray *IDArray = [NSMutableArray array];
    for (int i = 0; i < 17; i++) {
        NSRange range = NSMakeRange(i, 1);
        NSString *subString = [IDNumber substringWithRange:range];
        [IDArray addObject:subString];
    }
    NSArray *coefficientArray = [NSArray arrayWithObjects:@"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2", nil];
    int sum = 0;
    for (int i = 0; i < 17; i++) {
        int coefficient = [coefficientArray[i] intValue];
        int ID = [IDArray[i] intValue];
        sum += coefficient * ID;
    }
    if (sum % 11 == 2) return YES;
    else return NO;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

自定义身份证键盘

DZKeyBoard 是一个继承与UIView开发的一个身份证键盘,和系统纯数字键盘相比多了一个X按键,由于有些业务需要输入身份证,所以在这里使用了UIView自定义了一个这样的键盘;里面写的比较简单...
  • GZXios
  • GZXios
  • 2017年03月06日 12:49
  • 1098

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

iOS开发:自定义数字键盘(两种方式)

有的app要求校验身份证号,键盘只能输入数字和X符号,所以要定制键盘,目前有两种方法。 预览 思路 两种方法,一种是改造系统键盘在上面添加button,另...

iOS开发之键盘类型UIKeyboardType

UIKeyboardTypeDefault

iOS开发笔记-根据银行卡号判断银行名称

鸡肋的后台返回银行卡号却没有返回名称,问他是不是忘了添加,他说你自己网上找找。。。。。。尼玛,很无奈的在网上扒拉了半天知道了java的,万幸博主还学过Java,四年的大学也不是白上了,还好代码还不是很...

iOS根据银行卡号识别银行

+ (NSString *)getBankName:(NSString*) cardId{ //发卡行.卡种名称 NSArray *bankName = @[@"邮储银行·绿卡通", ...

iOS身份证号码全校验与校验位自动补全

在项目中进行身份证号码的校验,首先有必要了解一下居民身份证的基本构成: 1、长度必须是18位,前17位必须是数字,第十八位可以是数字或X; 2、前两位必须是以下情形中的一种:11、12、13、14...

iOS开发 根据正则表达式谓词(NSPredicate)判断邮箱,手机号码,身份证...

最近在做一个项目,其中有一些需要自己判断是否输入正确以否,比如手机号,邮箱,还有其他等等 一.NSPredicate的基本语法 1.比较运算符:=、==、>=、=>、、 =、==:判断两个表...

iOS开发之身份证号码的验证

iOS开发之身份证号码的验证
  • l2i2j2
  • l2i2j2
  • 2016年04月19日 23:54
  • 1525

iOS开发 精确的身份证号码有效性检测

//精确的身份证号码有效性检测 + (BOOL)accurateVerifyIDCardNumber:(NSString *)value { value = [value stringByTr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS开发自动补全第18位身份证号码的X
举报原因:
原因补充:

(最多只允许输入30个字)