iOS 身份证最后一位是X,输入17位后自动补全X(转)

非原创,转载自http://blog.csdn.net/l2i2j2/article/details/51542028如果身份证最后一位是X,输入17位后自动补全X// 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;
}
时间: 2024-10-11 06:11:34

iOS 身份证最后一位是X,输入17位后自动补全X(转)的相关文章

UITextFiled自动补全输入,选中补全内容。NSRange和UITextRange的相互转换。-b

有个需求就是 需要用户输入几位以后账号,可以根据本地存储的登录成功的账号,进行自动补全,并且补全内容为选中状态,不影响用户的新输入. 研究了一下,下面是完整的实现的方法. 补充个下载地址http://download.csdn.net/detail/darkmengqi/8426463 写在 textFiled的delegate里面,这样当有输入时会调用此方法. [objc] view plain copy -(BOOL)textField:(UITextField *)textField sh

自动补全 多输入, 适合新闻标签

2015年5月12日 20:16:48 星期二 js+css 1 <script type="text/javascript"> 2 var ac_domain = 'http://'+document.domain+'/'; 3 initAutoComplete(); 4 function initAutoComplete() 5 { 6 var ac_input = document.getElementById('auto_complete_input'); 7 if

JS实现在输入框内输入@时,邮箱账号自动补全

<!DOCTYPE HTML> <html lang="en"> <head> <meta charset="utf-8"/> <title>邮箱自动补全</title> <style type="text/css"> .wrap{width:200px;margin:0 auto;} h1{font-size:36px;text-align:center;lin

交互式输入编辑与历史命令补全

1.行编辑 如果支持,在交互式命令输入中,当前行可以使用以下的快捷键进行编辑: Ctrl+A:将光标移动到行开始位置 Ctrl+E:将光标移动到行结束位置 Ctrl+B:将光标往左移动一个位置 Ctrl+F:将光标往右移动一个位置 Backspace擦除光标左边的一个字符 Ctrl+D:擦除光标右侧一个字符 Ctrl+K:擦除光标右侧所有字符 2.历史命令补全 历史命令补全工作原理如下:将所有从命令行中输入的非空行保存在历史缓存中,当你在新的一行中输入命令 时,使用Ctrl+p输入历史命令中的上

[Android] AutoCompleteTextView:自动完成输入内容的控件(自动补全)

AutoCompleteTextView是EditText的直接子类,与普通EditText的最大不同就是,在用户输入的过程中,可以列出可供选择的输入项,方便使用者. AutoCompleteTextView与普通EditText控件使用方法类似,只是需要为其指定一个Adapter对象,绑定可供选择的输入项. AutoCompleteTextView可实现一次自动完成的功能,而另一个控件MultiAutoCompleteTextView,可以连续多次自动完成,即在通过自动完成一个输入项,接着输入

javascript 邮箱输入自动补全插件(转)

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>inputSuggest_0.1.js</title> <style type="text/css"> body{margin:0;padding:0;} input{width:200px;} .suggest-container{border:1px solid

输入人民币/美元后自动判断,输出转换后相对应的值

1 ''' 2 作者:pasaulis 3 版本:v2.0 4 日期:2018.11.7 5 功能:输入人民币/美元后自动判断,输出转换后相对应的值 6 ''' 7 in_str_value=input('请输入人民币/美元金额(格式示例:100rmb/100usd)') 8 9 usd_vs_value=6.91 10 rmb_value='' 11 usd_value='' 12 if in_str_value[-3:]=='rmb': 13 rmb_value=eval(in_str_va

Input自动补全,并且将输入的数据存放到本地

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head lang="en"> <meta charset="UTF-8"> <script src="jquery.js"></script&g

iOS 疑难杂症(什么鬼系列)— — 收到推送显示后自动消失的问题

声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 问题 正在支持 Remote Notification ,服务端已经加好 content-available ,测试发现一个奇怪的问题 —— 确实不影响老版本,新版本收到推送后消息过会会自动消失.一开始以为是服务端的问题,以为少传了 badge 和 sound 参数导致了,用 NWPusher 本地测试了一下删掉也没问题,然后就继续检查