/**
* 功能:身份证号校验
*/
// ------确定
- (void)authClick {
if (![self checkData]) {
return;
};
// 写验证成功后的代码
}
- (BOOL)checkData {
MBProgressHUD *mbhud = [[MBProgressHUD alloc] initWithView:self.view];
[self.view addSubview:mbhud];
mbhud.delegate = self;
mbhud.yOffset = - 50;
mbhud.mode = MBProgressHUDModeText;
// 姓名
if (_name.text.length == 0) {
mbhud.labelText = @"请输入姓名";
[mbhud show:YES];
[mbhud hide:YES afterDelay:1];
return NO;
}
// 身份证
if (_identity.text.length == 0) {
mbhud.labelText = @"请输入身份证号码";
[mbhud show:YES];
[mbhud hide:YES afterDelay:1];
return NO;
}
if (_identity.text.length == 15 || _identity.text.length == 18) {
NSString *emailRegex = @"^[0-9]*$";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
bool sfzNo = [emailTest evaluateWithObject:[_identity.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
if (_identity.text.length == 15) {
if (!sfzNo) {
mbhud.labelText = @"请输入正确的身份证号";
[mbhud show:YES];
[mbhud hide:YES afterDelay:1];
return NO;
}
}
else if (_identity.text.length == 18) {
bool sfz18NO = [self checkIdentityCardNo:_identity.text];
if (!sfz18NO) {
mbhud.labelText = @"请输入正确的身份证号";
[mbhud show:YES];
[mbhud hide:YES afterDelay:1];
return NO;
}
}
}else{
mbhud.labelText = @"请输入正确的身份证号";
[mbhud show:YES];
[mbhud hide:YES afterDelay:1];
return NO;
}
return YES;
}
#pragma mark - 身份证识别
- (BOOL)checkIdentityCardNo:(NSString*)cardNo
{
if (cardNo.length != 18) {
return NO;
}
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:[cardNo 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+=[[cardNo substringWithRange:NSMakeRange(i , 1) ] intValue]* [[codeArray objectAtIndex:i] intValue];
}
NSString* strlast = [checkCodeDic objectForKey:[NSString stringWithFormat:@"%d",sumValue%11]];
if ([strlast isEqualToString: [[cardNo substringWithRange:NSMakeRange(17, 1)]uppercaseString]]) {
return YES;
}
return NO;
}
22、[ iOS ] 身份证号校验
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 二代身份证除了位数和各位表达的含义有限制外,还有一个校验和的问题,这篇文章就是来解决这个问题。网络上应该有对应的J...
- 前提 我们在平常注册的时候都会校验省份证,但是很少会遇到校验其他证件类型的,今天正好结合ios调用js方法实现这一...
- http://blog.csdn.net/djl4104804/article/details/17114143 ...
- 研究了研究身份证扫描识别,顺便就看了看直接校验身份证号是什么样子的 1.简单验证一下身份证的格式是否满足需求可使用...