身份证号码有效性检测
身份证号码有效性检测
在开发软件的时候有些注册需要身份证号等信息,并且要求号码的正确性。
简单的身份证号码有效性检测
- (BOOL)verifyIdentityCardNum {NSString *regex2 = @"^(\\d{14}|\\d{17})(\\d|[xX])$";return [self q_isValidateByRegex:regex2];
}
精确的身份证号码有效性检测
- (BOOL)verifyIdentityCardNum {NSString *value = [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];int length =0;if (!value) {return NO;} else {length = (int)value.length;if (length !=15 && length !=18) {return NO;}}// 省份代码NSArray *areasArray =@[@"11",@"12", @"13",@"14", @"15",@"21", @"22",@"23", @"31",@"32", @"33",@"34", @"35",@"36", @"37",@"41", @"42",@"43", @"44",@"45", @"46",@"50", @"51",@"52", @"53",@"54", @"61",@"62", @"63",@"64", @"65",@"71", @"81",@"82", @"91"];NSString *valueStart2 = [value substringToIndex:2];BOOL areaFlag =NO;for (NSString *areaCode in areasArray) {if ([areaCode isEqualToString:valueStart2]) {areaFlag =YES;break;}}if (!areaFlag) {return false;}NSRegularExpression *regularExpression;NSUInteger numberofMatch;int year =0;switch (length) {case 15:year = [value substringWithRange:NSMakeRange(6,2)].intValue +1900;if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {// 测试出生日期的合法性regularExpression = [[NSRegularExpression alloc] initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$"options:NSRegularExpressionCaseInsensitiveerror:nil];} else {// 测试出生日期的合法性regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$"options:NSRegularExpressionCaseInsensitiveerror:nil];}numberofMatch = [regularExpression numberOfMatchesInString:valueoptions:NSMatchingReportProgressrange:NSMakeRange(0, value.length)];if (numberofMatch >0) {return YES;} else {return NO;}case 18:year = [value substringWithRange:NSMakeRange(6,4)].intValue;if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {// 测试出生日期的合法性regularExpression = [[NSRegularExpression alloc] initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$"options:NSRegularExpressionCaseInsensitiveerror:nil];} else {// 测试出生日期的合法性regularExpression = [[NSRegularExpression alloc] initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$"options:NSRegularExpressionCaseInsensitiveerror:nil];}numberofMatch = [regularExpression numberOfMatchesInString:valueoptions:NSMatchingReportProgressrange:NSMakeRange(0, value.length)];if (numberofMatch > 0) {int S = ([value substringWithRange:NSMakeRange(0, 1)].intValue +[value substringWithRange:NSMakeRange(10, 1)].intValue) * 7 +([value substringWithRange:NSMakeRange(1, 1)].intValue +[value substringWithRange:NSMakeRange(11, 1)].intValue) * 9 +([value substringWithRange:NSMakeRange(2, 1)].intValue +[value substringWithRange:NSMakeRange(12, 1)].intValue) * 10 +([value substringWithRange:NSMakeRange(3, 1)].intValue +[value substringWithRange:NSMakeRange(13, 1)].intValue) * 5 +([value substringWithRange:NSMakeRange(4, 1)].intValue +[value substringWithRange:NSMakeRange(14, 1)].intValue) * 8 +([value substringWithRange:NSMakeRange(5, 1)].intValue +[value substringWithRange:NSMakeRange(15, 1)].intValue) * 4 +([value substringWithRange:NSMakeRange(6, 1)].intValue +[value substringWithRange:NSMakeRange(16, 1)].intValue) * 2 +[value substringWithRange:NSMakeRange(7, 1)].intValue * 1 +[value substringWithRange:NSMakeRange(8, 1)].intValue * 6 +[value substringWithRange:NSMakeRange(9, 1)].intValue * 3;int Y = S % 11;NSString *M =@"F";NSString *JYM =@"10X98765432";M = [JYM substringWithRange:NSMakeRange(Y,1)]; // 判断校验位if ([M isEqualToString:[value substringWithRange:NSMakeRange(17,1)]]) {return YES; // 检测 ID 的校验位} else {return NO;}} else {return NO;}default:return NO;}
}
银行卡号、ip 地址、车牌号等等正则会持续更新上去。
身份证号码有效性检测相关推荐
- 身份证号码有效性检测算法 ( js版 转 .net版 )
1 #region 检测是否是正确的身份证 2 /// <summary> 3 /// 身份证验证 4 /// </summary> 5 /// <param name= ...
- 身份证号码有效性检测算法 ( js版 转 C#版 )
C#版 #region 检测是否是正确的身份证 /// <summary> /// 身份证验证 /// </summary> /// <param name=" ...
- Js实现中国公民身份证号码有效性验证
2019独角兽企业重金招聘Python工程师标准>>> 参考: Java实现中国公民身份证号码有效性验证 Php实现中国公民身份证号码有效性验证 本文将使用JavaScript实现中 ...
- 【python】身份证号码有效性校验
1. 前言 中华人民共和国国家标准GB 11643-1999<公民身份号码>中规定:公民身份号码是特征组合码,由17位数字本体码和1位校验码组成. 18位数字组合的方式是: 其中,最后一位 ...
- 请写代码校验第二代身份证号码有效性。程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效。
请写代码校验第二代身份证号码有效性.程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效. 第二代身份证号组成规则: a) 身份证号码(18位)= 地址码(6)+ 出生日期码(8) ...
- python 身份证号码有效性验证
先声明以下代码不是全部原创,网上找了前辈的一些代码,经过自己的部分加工,有了如下的身份证有效性验证代码: #!/usr/bin/env python3 # -*- coding: utf-8 -*-i ...
- 在EXCEL中VBA编程检验身份证号码有效性
*2022-12-05 改正代码中错别字,规范表述 *2022-11-30 1.增加了过程clearB()用来清除B1:Bx原有的出错说明,在过程examIdentityCard() 开头调用 2.修 ...
- MATLAB身份证号码定位检测识别GUI
一.应用背景 随着信息时代的飞速发展,身份证作为人口信息行之有效的管理工具,已经深入到社会生活的方方面面.身份证是我国居民身份的象征,独一无二的身份证号码录入了公民的基本个人信息.出于保障公民的合 ...
- 身份证号码有效性验证
结构和形式 号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 地址码 表示编码对象 ...
最新文章
- cordova编译报错:Execution failed for task ':processDebugResources'
- VMware vMotion 配置要求
- mysql需要vc_VC连接MySql
- 用服务器控件在后台调用前台客户端JS方法
- 关于db link权限分配的苦旅(一)
- 在 ASP.NET Core 中安装 MVC
- JavaScript将负数转换为正数
- 任务管理器只有概要信息解决办法
- matlabrobert锐化_基于Matlab的图像锐化的研究
- (20)Xilinx PCIE中断调试成功(学无止境)
- 应用实例_兴达奇智能燃烧控制器BMU460DP现场应用实例图
- 数据结构上机实践第八周项目3-顺序串算法
- MySQL学习4 数据过滤
- creo绘图属性模板_creo完整制作工程图模板.docx
- 2010年计算机专业考研大纲解析
- 流程图用什么软件做?好用的流程图软件盘点
- ST芯片烧录失败的原因分析及对策
- 天使投资人给创业者的一封信
- 2022城市辅助驾驶赛道陷入“三国争霸”,数据智能助力毫末智行杀出重围?
- Mysql学习日记:L13-distinct关键字