《身份证号码验证课程设计》由会员分享,可在线阅读,更多相关《身份证号码验证课程设计(37页珍藏版)》请在金锄头文库上搜索。
1、 验证身份证号码的正确性目录1 绪论11.1 课题内容与要求11.2 需求分析11.3 操作环境12 功能实现设计22.1 总体设计22.1.1 程序设计组成框图22.1.2 数据流图22.2 详细设计验证身份证号码的正确性第 1 页 共 34 页32.2.1 存放信息设计42.2.2 构造函数设计42.2.3 判断信息是否正确92.2.4 新旧身份证号转换132.2.5 窗口类的创建及实现133 运行结果144 总结16 参考文献17附录18验证身份证号码的正确性第 2 页 共 34 页1 绪论1.1 课题内容与要求课题内容身份证第 18 位(校验码)的计算方法:(1)将前面的身份证号码 1
2、7 位分别乘以不同的系数:从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2;(2)将这 17 位数字和系数相乘的结果相加;(3)用加出来和除以 11,得余数;(4)余数 0-1-2-3-4-5-6-7-8-9-10对应的最后一位身份证号码为 1-0-X-9-8-7-6-5-4-3-2;身份证号码的第七位到十四位为出生年月日,应符合现实;课题要求(1)使用 java 语言完成本课题的程序设计,并具有一定的深度和难度;(2)结构化程序设计,源程序要有适当的注释,使程序容易阅读;(3)能先对问题进行分析然后进行设计最后进行编码的原则。每一步都要有
3、文档产生;(4)程序一定要做必要的测试和分析,必须得到合理结果;(5)可适当添加功能,让程序更具有实用性。(6)提交的所有材料必须符合长沙理工大学课程设计管理规定 (长理验证身份证号码的正确性第 3 页 共 34 页工大20058 号)的要求。1.2 需求分析本课题主要目的是为了设计一套程序来验证给出的身份证号是否正确,如若正确将身份证号所体现的关键信息性别,年龄,出生日期展现给用户,同时考虑到实实际情况给出了十五位身份证号转十八位,以及十八位转十五位的算法, 从而给相关部门机构带来方便。1.3 操作环境 MyEclipse 8.5 2 功能实现设计2.1 总体设计根据上面的分析,将系统分为几
4、大部分:判断身份证号的位数以及每一位是否正确,判断出生年月是否符合实际,根据算法运算对比校验码是否正确,新旧身份证号转换,提取输出关键信息。2.1.1 程序设计组成框图2.1.2 数据流图身份证号验证系统1.接收用户输 入的身份证号, 判断位数及每 一位是否正确。2.判断出生年 月日时候符 合实际,特 别是二月。3.运算校验码, 并比较第十八 位时候为校验 码。4.新旧身份 证号转换。5.提取输出 关键信息。验证身份证号码的正确性第 4 页 共 34 页NYN YNYNY开始判断位数是否正确退出系统(报错)判断每一位是否 正确判断出生年月日是 否符合实际计算校验码判断校验码是否匹配十八位转十五
5、位(十五位转十八位)提取输出关键信息退出系统验证身份证号码的正确性第 5 页 共 34 页2.2 详细设计2.2.1 存放信息设计导包,定义一个接口类用于其他类实现,定义个身份证类用于实现接口,定义存放年份,月份,天数,性别,年龄,校验码对应表,校验码,身份证号码,错误标识的容器。/定义一个接口用于其它类实现 interface IdCardInterFace int digitCheck (final String id);/位数检查 boolean charCheck ();/字符检查 boolean dateCheck ();/日期检查 boolean efficacyCode ();/
6、效验码检查 /定义个身份证类用于实现接口 IdCardInterFace class IdCard implements IdCardInterFace public final static int systemTime = new GregorianCalendar ().get(Calendar.YEAR);/取得当前系统年份 protected int year;/用于存放年份 protected int month;/用于存放月份 protected int date;/用于存放日期天数 protected String sex;/用于存放性别 protected int age;/
7、用于存放年龄 protected HashMap remainGroup;/存放效验码值对 应表 private int remainder;/存放效验码 private int totals;/存放每一位字符值与它所对应的加权因子的乘积 的和 protected String id;/存放身份证号码 private static int DATE_SIGN;/存放日期错误标志2.2.2 构造函数设计验证身份证号码的正确性第 6 页 共 34 页之后定义构造函数,检查各项的正确性。特别是二月的检查,要区分平年和闰年 ,平年二月日期到 28 号,闰年为 29 号。构造计算校验码的函数,运用 ja
8、va 语言的运算规则,按照给出的校验码计算规则计算校验码。/定义构造函数public IdCard ()public IdCard (String id)this.id = id;/用于存放效验码对应表remainGroup = new HashMap ();remainGroup.put (0, “1“);remainGroup.put (1, “0“);remainGroup.put (2, “X“);remainGroup.put (3, “9“);remainGroup.put (4, “8“);remainGroup.put (5, “7“);remainGroup.put (6,
9、“6“);remainGroup.put (7, “5“);remainGroup.put (8, “4“);remainGroup.put (9, “3“);remainGroup.put (10, “2“);/检查位数的正确性public int digitCheck (final String id)if (id.length () = 18)return 18;else if (id.length () = 15)return 15;验证身份证号码的正确性第 7 页 共 34 页elsereturn 0;/检查每一位的正确性public boolean charCheck ()if (
10、id.length () = 17)Pattern p = Ppile (“0-917“);Matcher m = p.matcher (id);return m.matches ();else if (id.length () = 18)String str = id.substring (0, id.length () - 1);String str1 = id.substring (id.length () - 1, id.length ();Pattern p = Ppile (“0-917“);Matcher m = p.matcher (str);if (str1.matches
11、(“d“) | str1.equals (“X“) elsereturn false;elsePattern p = Ppile (“0-91,18“);Matcher m = p.matcher (id);return m.matches ();/检查日期的正确性public boolean dateCheck ()验证身份证号码的正确性第 8 页 共 34 页year = Integer.parseInt (id.substring (6, 10);/取得年份/判断年份的正确性if (year IdCard.systemTime - 18)DATE_SIGN = 1;return fals
12、e;elsemonth = Integer.parseInt (id.substring (10, 12);/取得月份/判断月份的正确性if (month = 8 i-)int ai = Integer.parseInt (id.substring (18-i, 19-i);int wi = (int)Math.pow (2, i-1) % 11;totals = totals + ai * wi;elsefor (int i = id.length () + 1; i 1; i-)int ai = Integer.parseInt (id.substring (18-i, 19-i);int wi = (int)Math.pow (2, i-1) % 11;totals = totals + ai * wi;验证身份证号码的正确性第 11 页 共 34 页remainder = totals % 11;return remainder;2.2.3 判断信息是否正确对于给定的身份证号,通过调用前面的构造函数,来验证各方面信息是否正确,出生年月日是否符合实际,特别是平年闰年二月的判定,性别的判定,以及由前 17 位计算出的校验码是否和身份证号的第十八位的匹配。判定过程中运用了很多循环语句,对于错误运用 java 的异常处理。/检查日期的正确性public boolean