验证身份证号和NSScanner的使用
2016-06-01 18:08
232 查看
//验证身份证号是否正确(简单):
+ (BOOL)isIdentityCardRightful: (NSString *)idCard
{
if (idCard.length <=
0) {
return NO;
}
NSString * regex =
@"^(\\d{14}|\\d{17})(\\d|[xX])$";
NSPredicate * idCardPredicate = [NSPredicate
predicateWithFormat:@"SELF MATCHES %@",regex];
BOOL isMatch = [idCardPredicate
evaluateWithObject:idCard];
return isMatch;
}
// 身份证识别(全面)
+(BOOL)checkIdentityCardNo:(NSString*)cardNo
{
if (cardNo.length !=
18) {
return NO;
}
if (![self
isIdentityCardRightful:cardNo]) {
return NO;
}
NSString * cardNOUPStr = cardNo.uppercaseString;
NSArray* codeArray = [NSArray
arrayWithObjects:@"7",@"9",@"10",@"5",@"8",@"4",@"2",@"1",@"6",@"3",@"7",@"9",@"10",@"5",@"8",@"4",@"2",
nil];
NSDictionary* checkCodeDic = [NSDictionary
dictionaryWithObjects:[NSArray
arrayWithObjects:@"1",@"0",@"X",@"9",@"8",@"7",@"6",@"5",@"4",@"3",@"2",
nil]
forKeys:[NSArray
arrayWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",
nil]];
NSScanner* scan = [NSScanner
scannerWithString:[cardNOUPStr
substringToIndex:17]];
int val;
BOOL isNum = [scan
scanInt:&val] && [scan isAtEnd];
if (!isNum) {
return NO;
}
int sumValue =
0;
for (int i =0; i<17; i++) {
sumValue+=[[cardNOUPStr substringWithRange:NSMakeRange(i ,
1) ] intValue]* [[codeArray
objectAtIndex:i] intValue];
}
NSString* strlast = [checkCodeDic
objectForKey:[NSString
stringWithFormat:@"%d",sumValue%11]];
if ([strlast
isEqualToString:[[cardNOUPStr substringWithRange:NSMakeRange(17,
1)]uppercaseString]]) {
return YES;
}
return
NO;
}
+ (BOOL)isIdentityCardRightful: (NSString *)idCard
{
if (idCard.length <=
0) {
return NO;
}
NSString * regex =
@"^(\\d{14}|\\d{17})(\\d|[xX])$";
NSPredicate * idCardPredicate = [NSPredicate
predicateWithFormat:@"SELF MATCHES %@",regex];
BOOL isMatch = [idCardPredicate
evaluateWithObject:idCard];
return isMatch;
}
// 身份证识别(全面)
+(BOOL)checkIdentityCardNo:(NSString*)cardNo
{
if (cardNo.length !=
18) {
return NO;
}
if (![self
isIdentityCardRightful:cardNo]) {
return NO;
}
NSString * cardNOUPStr = cardNo.uppercaseString;
NSArray* codeArray = [NSArray
arrayWithObjects:@"7",@"9",@"10",@"5",@"8",@"4",@"2",@"1",@"6",@"3",@"7",@"9",@"10",@"5",@"8",@"4",@"2",
nil];
NSDictionary* checkCodeDic = [NSDictionary
dictionaryWithObjects:[NSArray
arrayWithObjects:@"1",@"0",@"X",@"9",@"8",@"7",@"6",@"5",@"4",@"3",@"2",
nil]
forKeys:[NSArray
arrayWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",
nil]];
NSScanner* scan = [NSScanner
scannerWithString:[cardNOUPStr
substringToIndex:17]];
int val;
BOOL isNum = [scan
scanInt:&val] && [scan isAtEnd];
if (!isNum) {
return NO;
}
int sumValue =
0;
for (int i =0; i<17; i++) {
sumValue+=[[cardNOUPStr substringWithRange:NSMakeRange(i ,
1) ] intValue]* [[codeArray
objectAtIndex:i] intValue];
}
NSString* strlast = [checkCodeDic
objectForKey:[NSString
stringWithFormat:@"%d",sumValue%11]];
if ([strlast
isEqualToString:[[cardNOUPStr substringWithRange:NSMakeRange(17,
1)]uppercaseString]]) {
return YES;
}
return
NO;
}
相关文章推荐
- DataX学习笔记-Writer插件开发(续)
- 【51CTO学院三周年】我在学院的收获
- Android Studio 配置
- php、js、html表单数据之间值传递方法
- gcc选项-g与-rdynamic的异同
- Java之面向对象的三大特性:封装,继承,多态讲解
- Longest Palindromic Substring --leetcode 数据结构第五题
- db2数据库的使用总结
- 得到 TextView 颜色
- lua 写的游戏log逻辑(基本支持lua所有格式)
- Openresty+YII2.0下开发RestfulAPI系列3:开发基于php的restfulAPI
- java-script简单语法练习-第三天
- BZOJ1113 海报PLA
- 汉诺塔递归实现
- Nginx+Tomcat+MemCached 集群配置手册
- java中关于SSL/TSL的介绍和如何实现SSL Socket双向认证
- 11_实用技巧1—多级页面的抓取技巧
- 第13周项目2:动物这样叫(1)
- Android studio调试
- Spring Boot: HttpMediaTypeNotAcceptableException: Could not find acceptable representation原因及解决方法