收藏 分享(赏)

C# winform中身份证的正则表达式.doc

上传人:gnk289057 文档编号:9467938 上传时间:2019-08-09 格式:DOC 页数:4 大小:19.50KB
下载 相关 举报
C# winform中身份证的正则表达式.doc_第1页
第1页 / 共4页
C# winform中身份证的正则表达式.doc_第2页
第2页 / 共4页
C# winform中身份证的正则表达式.doc_第3页
第3页 / 共4页
C# winform中身份证的正则表达式.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、先大概介绍一下身份证号码的组成情况(来自百度):目前我国公民身份证号码由 18 位数字组成:前 6 位为地址码,第 7 至 14 位为出生日期码,第 15 至 17 位为顺序码,第 18 位为校验码。检验码分别是“0、1、2、10”共 11 个数字,当检验码为“10”时,为了保证公民身份证号码 18 位,所以用 “X”表示。虽然校验码为“X”不能更换,但若需全用数字表示,只需将 18 位公民身份号码转换成 15 位居民身份证号码,去掉第 7 至 8 位和最后 1 位 3 个数码。 当今的身份证号码有 15 位和 18 位之分。1985 年我国实行居民身份证制度,当时签发的身份证号码是 15 位

2、的,1999 年签发的身份证由于年份的扩展(由两位变为四位)和末尾加了效验码,就成了 18 位。这两种身份证号码将在相当长的一段时期内共存。两种身份证号码的含义如下: 18 位的身份证号码 如:130429#%0078 16 位为地区代码,其中 1、2 位数为各省级政府的代码,3、4 位数为地、市级政府的代码,5、6 位数为县、区级政府代码。如 13(河北省)04(邯郸市)29(永年县) 714 位为出生年月日 1517 位为顺序号,是县、区级政府所辖派出所的分配码,每个派出所分配码为 10 个连续号码,例如“000-009”或“060-069”,其中单数为男性分配码,双数为女性分配码,如遇同

3、年同月同日有两人以上时顺延第二、第三、第四、第五个分配码。如:007 的就是个男生 而且和他同年月日生的男生至少有两个 他们的后四位是 001* 和 003* 18 位为效验位(识别码) ,通过复杂公式算出,普遍采用计算机自动生成。是前面 17 位的一种检验代码,如果你改变了前面某个数字而后面的效验代码不响应改变就会被计算软件判断为非法身份正号码。X 也是效验代码的一中 15 位的身份证号码: (1)16 位为地区代码 (2)78 位为出生年份(2 位 ),910 位为出生月份,1112 位为出生日期 (3)第 1315 位为顺序号,并能够判断性别,奇数为男,偶数为女。介绍完毕!切入正题(直接

4、上代码).if (!Regex.IsMatch(txtID.Text, “(d15$|d18$|d17(d|X|x)$“,RegexOptions.IgnoreCase)MessageBox.Show(“请输入正确的身份证号码!“, “提示“, MessageBoxButtons.OK, MessageBoxIcon.Warning);return;注:以上方法需引入“using System.Text.RegularExpressions;“此命名空间. txtID 为输入身份证号码的 textbox!以上正在表达式(红色部分) 只能判断以下 3 种情况 : 1、身份证号码为 15 位数字;

5、 2、身份证号码为 18 位数字; 3、身份证号码为 17 位数字+1 个字母 个人觉得,身份证组成还有出生年月至少应该加上一个日期判断!以下内容来源网络,仅供参考:18 位身份证标准在国家质量技术监督局于 1999 年 7 月 1 日实施的 GB11643-1999公民身份号码中做了明确的规定。 GB11643-1999公民身份号码 为 GB11643-1989社会保障号码的修订版,其中指出将原标准名称“社会保障号码“ 更名为“公民身份号码“,另外GB11643-1999公民身份号码 从实施之日起代替 GB11643-1989。GB11643-1999公民身份号码主要内容如下:一、范围该标准

6、规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。二、编码对象公民身份号码的编码对象是具有中华人民共和国国籍的公民。三、号码的结构和表示形式1、号码的结构公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。2、地址码表示编码对象常住户口所在县(市、旗、区) 的行政区划代码,按 GB/T2260 的规定执行。3、出生日期码表示编码对象出生的年、月、日,按 GB/T7408 的规定执行,年、月、日代码之间不用分隔符。4、顺序码表示在同一地址码所标识的

7、区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。5、校验码(1)十七位数字本体码加权求和公式S = Sum(Ai * Wi), i = 0, . , 16 ,先对前 17 位数字的权求和Ai:表示第 i 位置上的身份证号码数字值Wi:表示第 i 位置上的加权因子Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (2)计算模Y = mod(S, 11)(3)通过模得到对应的校验码Y: 0 1 2 3 4 5 6 7 8 9 10校验码: 1 0 X 9 8 7 6 5 4 3 2四、举例如下:北京市朝阳区: 1101051

8、9491231002X广东省汕头市: 440524188001010014以下是程序代码:调用测试:Response.Write(CheckCidInfo(“340524198002300019“);Response.Write(CheckCidInfo(“34052419800101001x“);private string CheckCidInfo(string cid)string aCity = new stringnull,null,null,null,null,null,null,null,null,null,null,“北京“,“ 天津“,“河北“,“ 山西“,“ 内蒙古“,nu

9、ll,null,null,null,null,“辽宁“,“吉林 “,“黑龙江“,null,null,null,null,null,null,null,“上海“,“ 江苏“,“浙江“,“安微“,“福建“,“江西“,“ 山东“,null,null,null,“河南“,“ 湖北“,“湖南“,“广东“,“ 广西“,“海南“,null,null,null,“重庆“,“ 四川“,“贵州“,“云南“,“西藏“,null,null,null,null,null,null,“陕西“,“甘肃“,“ 青海 “,“宁夏“,“新疆“,null,null,null,null,null,“台湾“,null,null,nul

10、l,null,null,null,null,null,null,“香港“,“澳门“,null,null,null,null,null,null,null,null,“国外“;double iSum=0;string info=“;System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpressions.Regex(“d17(d|x)$“);System.Text.RegularExpressions.Match mc = rg.Match(cid);if(!mc.Success)return “; cid = ci

11、d.ToLower();cid = cid.Replace(“x“,“a“);if(aCityint.Parse(cid.Substring(0,2)=null)return “非法地区 “;tryDateTime.Parse(cid.Substring(6,4)+“-“+cid.Substring(10,2)+“-“+cid.Substring(12,2);catchreturn “非法生日 “;for(int i=17;i=0;i-) iSum +=(System.Math.Pow(2,i)%11)*int.Parse(cid17-i.ToString(),System.Globalization.NumberStyles.HexNumber);if(iSum%11!=1)return(“非法证号 “);return(aCityint.Parse(cid.Substring(0,2)+“,“+cid.Substring(6,4)+“-“+cid.Substring(10,2)+“-“+cid.Substring(12,2)+“,“+(int.Parse(cid.Substring(16,1)%2=1?“男“:“ 女“);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报