黑马程序员技术交流社区
标题: 通过身份证判断是不是某地的人 [打印本页]
作者: 超の 时间: 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
学习了,确实没有做判断。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |