黑马程序员技术交流社区

标题: 通过身份证判断是不是某地的人 [打印本页]

作者: 超の    时间: 2015-10-3 16:44
标题: 通过身份证判断是不是某地的人
        中华人民共和国公民身份证号码组成规则是前4位是代表省份和地区(例如4201代表湖北省武汉市),最后一位代表性别(1或3代表男性)。编写一个程序,通过身份证号码判断某人是否是武汉人以及其性别。
        char c[30];
        printf("请输入你的身份证号\n");
        gets(c);
// 把C中的字符串转换为OC
        NSString *str =[NSString stringWithUTF8String : c];
//判断前缀
        if ([str hasPrefix:@"4201"]) {
               
                NSLog(@"湖北省人");
               
        }else NSLog(@"bushi ");
        //判断后缀
        if ([str hasSuffix:@"1"]||[str characterAtIndex:str.length-1]=='3'){//获取最后一个字符
                NSLog(@"男性");
        }else NSLog(@"女性");

作者: RIDP    时间: 2015-10-3 16:57
有若干个bug
第一,使用gets方法会在输出窗提示警告字样,可以用fgets来解决问题,而且gets并不安全,可以超出输入长度,如图



第二,只要满足开头和结尾判定条件,即便是英文,也能通过验证
如图



第三,由于没有设定相关的输入判断方法,会导致不论输入任何字符,只要不满足判定条件,均被判定为女性,非湖北省
如图



修改建议:
设定纠错方法,当输入超过16位长度的时候提醒超出长度,并且判定输入内容中是否存在非法字符,即除去数字之外的字符,16位身份证号码不包含最后一位校验码X,所以不会有其他字符,另外就是我记得题目中说“1”和“3”代表男性,当然没说就算了- -以及判定条件建议不要用前缀判断,用range取出之后compare一下
以上

作者: 小李探花    时间: 2015-10-3 18:09
我了个去,学习了
作者: 大宝820    时间: 2015-10-3 23:38
这题可以。自己也动手写写
作者: 超の    时间: 2015-10-4 17:28
RIDP 发表于 2015-10-3 16:57
有若干个bug
第一,使用gets方法会在输出窗提示警告字样,可以用fgets来解决问题,而且gets并不安全,可以 ...

学习了,确实没有做判断。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2