嵌入式系统设计报告-基于C#的身份证验证系统

上传人:QQ15****706 文档编号:52451141 上传时间:2018-08-21 格式:DOCX 页数:12 大小:152.51KB
返回 下载 相关 举报
嵌入式系统设计报告-基于C#的身份证验证系统_第1页
第1页 / 共12页
嵌入式系统设计报告-基于C#的身份证验证系统_第2页
第2页 / 共12页
嵌入式系统设计报告-基于C#的身份证验证系统_第3页
第3页 / 共12页
嵌入式系统设计报告-基于C#的身份证验证系统_第4页
第4页 / 共12页
嵌入式系统设计报告-基于C#的身份证验证系统_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《嵌入式系统设计报告-基于C#的身份证验证系统》由会员分享,可在线阅读,更多相关《嵌入式系统设计报告-基于C#的身份证验证系统(12页珍藏版)》请在金锄头文库上搜索。

1、1大学信息科学技术学院嵌入式系统大作业设计报告项目名称项目名称基于基于 Windows CE 6.0 的的 C#身份证验证系统身份证验证系统姓名:学号:班级:日期:2目录目录第一部分 设计任务.3 第二部分 设计原理.3 号码的结构和表示形式.3 号码的结构.3 地址码.3 出生日期码.3 顺序码.3 校验码.3 校验公式.3 校验字符值的计算.4 号码的表示形式.4 第三部分 设计方案及实现.4 实现的关键技术说明.4 身份证号码检验类.4 号码格式检验.4 地区号检验.5 出生日期检验.5 校验码的检验.6 项目实现方案及论证.6 窗体应用程序实现.6 系统的输入与输出与流程.6 事件.7

2、 设计步骤.8 第四部分 系统测试与性能分析.8 测试用例设计.8 测试实验结果.8 第五部分 结论.10 附录.10 (1)参考资料.10 (2)设计步骤.10 (3)遇到的问题与解决方法.11 (4)课程体会及建议.113第一部分第一部分 设计任务设计任务本课题主要目的是为了设计一套程序来验证给出的身份证号是否正确,如若正确将身份 证号所体现的关键信息性别,年龄,出生日期展现给用户,给相关部门机构带来方便。 否则展示具体的错误信息提醒用户。该系统运行在 Windows Embedded CE 6.0 环境下, 基于 C#语言进行开发。第二部分第二部分 设计原理设计原理系统的主要部分是身份证

3、号码的验证。验证方法根据中国国家质量技术监督局于 1999 年 7 月 1 日发布的国家标准:GB11643-1999公民身份号码中的内容进行校验。号码的结构和表示形式号码的结构和表示形式号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至 右依次为六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。 地址码 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按 GB/T2260 的规定执行。 出生日期码 表示编码对象出生的年、月、日,按 GB/T7408 的规定执行。年、月、日代码之间不用分隔 符。 例:某人出生日期为 1966

4、年 10 月 26 日,其出生日期码为 19661026。 顺序码 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序 码的奇数分配给男性,偶数分配给女性。 校验码 校验码采用 ISO7064:1983,MOD11-2 校验码系统 校验公式 公民身份号码中各个位置上的号码字符值应满足下列公式的校验:式中i: 表示号码字符从右至左包括校验码字符在内的位置序号;ai 表示第 i 位置上的号码字符值;Wi 表示第 i 位置上的加权因子,其数值依据公式 Wi = 2(i-1) (mod 11)计算得出。表 1 列出公民身份号码中各个位置上的加权因子 Wi 数值。表 1 公

5、民身份号码中各个位置上的加权因子 Wi 数值4i181716151413121110987654321wi791058421163791058421校验字符值的计算 当 i=1 时,W1 = 20 = 1,公式(1)可表示成:公式(2)中,a1即为校验码字符值,其取值范围是 0ai10;当 ai = 10 时,用罗马数字符 X 表示。 满足于公式(2)及取值范围要求的校验码字符值 ai可根据 a1 与 的换算关系算出,见表 2。表 2 字符值 a1 与(计算值)的换算关系表(计算值)012345678910校验码字符值10X98765432号码的表示形式公民身份号码的各特征码依次连接,不留空格

6、,其表示形式为: 一位数字校验码三位数字校验码八位数字校验码六位数字校验码第三部分第三部分 设计方案及实现设计方案及实现实现的关键技术说明实现的关键技术说明程序设计组成框图:身份证号码验证系统1.接收用户输入 的身份证号,判 断位数及每一位 是否正确。2.判断地 区码是否 正确。3.判断出生年 月日是否符 合实际,特 别是 2 月。4.运算校验 码,并比较 第十八位时 候为校验码。5.提取输 出关键信 息。5身份证号码检验类校验码的检验单独抽取为 CheckCid 类,包含静态方法 CheckCidInfo(),输入的参数是 string 类型的身份证 号,返回的是 Hashtable 类型的

7、验证结果表,验证结果包含状态码以及详细信息。号码格式检验使用正则表达式进行校验,校验规则具体为: 1.以 17 位数字开始 2.以一位数字或者 x 字符结束 通过使用系统类 System.Text.RegularExpressions 的 Regex 方法生成正则表达式实例,通过调用实例的 Match 方法对输入的身份证号进行验证。 若匹配结果失败,说明身份证号码不符合格式要求,返回错误码-1,并带上错误信息:“非法身份证号, 数据长度或者格式不正确” 。System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpre

8、ssions.Regex(“d17(d|x)$“);System.Text.RegularExpressions.Match mc = rg.Match(cid);Hashtable pt = new Hashtable();if (!mc.Success)pt.Add(“result“, -1);pt.Add(“msg“, “非法身份证号,数据长度或者格式不正确“);return pt;地区号检验通过预定义所有的两位地区号并获取身份证的前两位地区号,将两者进行对比。如果身份证号码的前两位 没有对应的地区,说明改身份证号码错误,返回错误码-1,并带上错误信息:“非法身份证号,地区码错 误” 。

9、string aCity = new string 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, “河南“, “湖北“, “湖南“, “广东“, “广

10、西“, “海南“, 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, null, “国外“ ;if (aCityint.Parse(c

11、id.Substring(0, 2) = null)pt.Add(“result“, -1);pt.Add(“msg“, “非法身份证号,地区码错误“);6return pt;出生日期检验获取身份证的第 7 到第 13 位,通过调用系统的日期解析函数 DateTime.Parse(),验证日期是否合法。如果 函数抛出异常,说明出生日期不合法,返回错误码-1,并带上错误信息:“非法身份证号,出生日期错误” 。tryDateTime.Parse(cid.Substring(6, 4) + “-“ + cid.Substring(10, 2) + “-“ + cid.Substring(12, 2)

12、;catchpt.Add(“result“, -1);pt.Add(“msg“, “非法身份证号,出生日期错误“);return pt;校验码的检验根据报告第二部分中的检验码的检验方法,生成对应的计算值,通过计算值获取正确的检验码。将计算获 取的检验码与实际输入的校验码进行对比,如果相同,说明身份证合法,如果不相同,返回错误码-1,并 带上错误信息:“非法证号,校验码错误” 。for (int i = 17; i 0; i-)iSum += (System.Math.Pow(2, i) % 11) * int.Parse(cid17 - i.ToString(), System.Globali

13、zation.NumberStyles.HexNumber);/余数string arrVarifyCode = (“1,0,x,9,8,7,6,5,4,3,2“).Split(,);int y = (int)iSum % 11;if (arrVarifyCodey != cid.Substring(17,1).ToLower()pt.Add(“result“, -1);pt.Add(“msg“, “非法证号,校验码错误“);return pt;7项目实现方案及论证项目实现方案及论证窗体应用程序实现通过 C#的窗体应用程序,设计程序所需要的各个控件,包括输入框,按钮,文字标签,tab 布局等。

14、通过 绑定按钮点击事件,获取输入框中的内容,调用 CheckCid 类的 CheckCidInfo()方法,得到内容的验证结果。 将验证结果输出到页面的控件中。系统的输入与输出与流程分析系统的输入与输出,输入只有需要验证的身份证号码。 而输出不仅仅是“输入的号码非法”或者“输入的号码合法” ,而是需要具体到每个部分的错误信息,比 如“地区码错误” ,或者是“出生日期错误”等,一个优良的系统与用户交互方式的多样性和准确性是非 常有必要的。当用户输入完成后,就开始进行验证了。在系统设计的过程中,需要考虑到模块的划分,模块的划分除了 考虑耦合度和内聚,也要考虑系统代码的复用,在可能的情况下,让尽可能

15、多的代码能被重用,这样做不 仅能减少程序体积的大小,还能让程序错误发生的概率降低。在嵌入式系统中,程序的体积也是一个需要 重点考虑的因素。当用户完成了输入,就会开始要求系统对输入的号码及其相关信息进行验证。系统中设置了一个按钮来接 受用户的验证请求。在这个按钮的单击事件中加入整个系统的逻辑。由于已经把身份证验证的具体逻辑封装为一个 CheckCid 类,因此在单击事件中,只要获取用户输入的号 码作为输入,定义一个 Hashtable 变量作为返回值,直接调用 CheckCid. CheckCidInfo(cid)并获取返回的检 验结果。在返回的结果 result 中,result“result

16、”代表返回的状态码,状态码为-1 代表验证失败,此时在验 证结果中显示验证失败,并带上 result 中包含的错误信息 result“msg”。错误信息包括了具体的错误详情, 如“地区码错误” ,或者是“出生日期错误” 。如果返回的状态码为 0,此时在验证结果中显示验证成功, 并在各个输入框中展示验证出来的具体信息,如地区,年龄,日期,性别。在 CheckCid 类中的 CheckCidInfo()中,验证的逻辑分为这几步: 1.验证号码格式 2.验证地区号码 3.验证出生日期 4.验证性别 5.验证校验码事件完成了验证类之后,就可以开始实现各个按钮的事件了,即当用户 激发某些事情时,系统将产生相应的回应。在这个系统中,最主要 的按钮便是验证按钮。private void button1_Click(object sender, EventArgs e)String test = textBox1.Text;8Has

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 论文指导/设计

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号