身份证号码验证课程设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
protected int year;//用于存放年份 protected int month;//用于存放月份 protected int date;//用于存放日期天数 protected String sex;//用于存放性别 protected int age;//用于存放年龄 protected HashMap <Integer, String>remainGroup;//存放效验码值对 应表
之后定义构造函数,检查各项的正确性。特别是二月的检查,要区分 平年和闰年 ,平年二月日期到 28 号,闰年为 29 号。构造计算校验码的函 数,运用 java 语言的运算规则,按照给出的校验码计算规则计算校验码。
//定义构造函数 public IdCard (){
第4 页 共 34 页
验证身份证号码的正确性
} public IdCard (String id){
this.id = id; //用于存放效验码对应表 remainGroup = new HashMap <Integer ,String>(); 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, "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){
目录
验证身份证号码的正确性
1 绪论····························································1 1.1 课题内容与要求··············································1 1.2 需求分析····················································1 1.3 操作环境·····················································1
31) || (month < 8 && month % 2 == 0 && date <= 30)){ return true;
}else if ((month >= 8 && month % 2 == 0 && date <= 31) || (month >= 8 && month % 2 != 0 && date <= 30)){
3 运行结果························································14 4 总结····························································16 参考文献···························································17 附录·······························································18
String str1 = id.substring (id.length () - 1, id.length ());
Pattern p = Pattern.compile ("[0-9]{17}");
Matcher m = p.matcher (str);
if ((str1.matches ("\\d") || str1.equals ("X")) && m.matches
课题要求 (1)使用 java 语言完成本课题的程序设计,并具有一定的深度和难度; (2)结构化程序设计,源程序要有适当的注释,使程序容易阅读; (3)能先对问题进行分析然后进行设计最后进行编码的原则。每一步都要
有文档产生; (4)程序一定要做必要的测试和分析,必须得到合理结果; (5)可适当添加功能,让程序更具有实用性。 (6)提交的所有材料必须符合《长沙理工大学课程设计管理规定》(长理
} //定义个身份证类用于实现接口 IdCardInterFace
class IdCard implements IdCardInterFace {
public final static int systemTime = new GregorianCalendar ().get(Calendar.YEAR);//取得当前系统年份
1.3 操作环境
MyEclipse 8.5
验证身份证号码的正确性
2 功能实现设计 2.1 总体设计
根据上面的分析,将系统分为几大部分:判断身份证号的位数以及每一位是 否正确,判断出生年月是否符合实际,根据算法运算对比校验码是否正确,新旧 身份证号转换,提取输出关键信息。
2.1.1 程序设计组成框图
if (year < 1900 || year > IdCard.systemTime - 18){
DATE_SIGN = 1;
return false;
}else
第6 页 共 34 页
验证身份证号码的正确性
{ month = Integer.parseInt (id.substring (10, 12));//取得月份 //判断月份的正确性 if (month <= 12){ //判断天数的正确性 date = Integer.parseInt (id.substring (12, 14));//取得天数 if (year % 4 == 0 && (year % 100 != 0 || year % 400 ==
1 绪论
验证身份证号码的正确性
1.1 课题内容与要求
课题内容 身份证第 18 位(校验码)的计算方法: (1)将前面的身份证号码 17 位分别乘以不同的系数: 从第一位到第十七位的系数分别为: 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; 身份证号码的第七位到十四位为出生年月日,应符合现实;
2 功能实现设计····················································2 2.1 总体设计·····················································2 2.1.1 程序设计组成框图········································2 2.1.2 数据流图················································2 2.2 详细设计·····················································3 2.2.1 存放信息设计···········································4 2.2.2 构造函数设计···········································4 2.2.3 判断信息是否正确·······································9 2.2.4 新旧身份证号转换······································13 2.2.5 窗口类的创建及实现····································13
0))//判断是否为闰年 { //判断二月份的天数正确性 if (month == 2){ if (date <= 29){ return true; }else{ DATE_SIGN = 3; return false; } }else{ //判断其它月份的天数正确性 if ((month < 8 && month % 2 != 0 && date <=
的和
private int remainder;//存放效验码 private int totals;//存放每一位字符值与它所对应的加权因子的乘积
protected String id;//存放身份证号码 private static int DATE_SIGN;//存放日期错误标志
2.2.2 构造函数设计
口,定义存放年份,月份,天数,性别,年龄,校验码对应表,校验码,
身份证号码,错误标识的容器。
//定义一个接口用于其它类实现
interface IdCardInterFace { int digitCheck (final String id);//位数检查 boolean charCheck ();//字符检查 boolean dateCheck ();//日期检查 boolean efficacyCode ();//效验码检查
工大[2005]8 号)的要求。
1.2 需求分析
本课题主要目的是为了设计一套程序来验证给出的身份证号是否正确,如 若正确将身份证号所体现的关键信息性别,年龄,出生日期展现给用户,同时考 虑到实实际情况给出了十五位身份证号转十八位,以及十八位转十五位的算法, 从而给相关部门机构带来方便。
第1 页 共 34 页
N
判断位数是否正确
Y
退出系统(报错)
判断每一位是否 正确
N
Y
N N
判断出生年月日是 否符合实际
Y
计算校验码
判断校验码是否匹配
Y
十八位转十五位(十五位转十八位) 提取输出关键信息 退出系统
第3 页 共 34 页
验证身份证号码的正确性
2.2 详细设计
2.2.1 存放信息设计
导包,定义一个接口类用于其他类实现,定义个身份证类用于实现接
Pattern p = Pattern.compile ("[0-9]{17}");
Matcher m = p.matcher (id);
return m.matches ();
}else if (id.length () == 18){
String str = id.substring (0, id.lengtБайду номын сангаас () - 1);
return true; }else{
DATE_SIGN = 3; return false; }
return 18; }else if (id.length () == 15){
return 15; }else{
return 0; } } //检查每一位的正确性 public boolean charCheck (){
第5 页 共 34 页
if (id.length () == 17){
验证身份证号码的正确性
身份证号验证系统
1.接收用户输 入的身份证号, 判断位数及每 一位是否正确。
2.判断出生年 月日时候符 合实际,特别 是二月。
3. 运 算 校 验 码,并比较第 十八位时候为 校验码。
2.1.2 数据流图
4.新旧身份 证号转换。
5.提取输出 关键信息。
开始
第2 页 共 34 页
验证身份证号码的正确性
()){
return true;
}else{
return false;
}
}else{
Pattern p = Pattern.compile ("[0-9]{1,18}");
Matcher m = p.matcher (id);
return m.matches ();
}
} //检查日期的正确性
public boolean dateCheck (){ year = Integer.parseInt (id.substring (6, 10));//取得年份 //判断年份的正确性
之后定义构造函数,检查各项的正确性。特别是二月的检查,要区分 平年和闰年 ,平年二月日期到 28 号,闰年为 29 号。构造计算校验码的函 数,运用 java 语言的运算规则,按照给出的校验码计算规则计算校验码。
//定义构造函数 public IdCard (){
第4 页 共 34 页
验证身份证号码的正确性
} public IdCard (String id){
this.id = id; //用于存放效验码对应表 remainGroup = new HashMap <Integer ,String>(); 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, "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){
目录
验证身份证号码的正确性
1 绪论····························································1 1.1 课题内容与要求··············································1 1.2 需求分析····················································1 1.3 操作环境·····················································1
31) || (month < 8 && month % 2 == 0 && date <= 30)){ return true;
}else if ((month >= 8 && month % 2 == 0 && date <= 31) || (month >= 8 && month % 2 != 0 && date <= 30)){
3 运行结果························································14 4 总结····························································16 参考文献···························································17 附录·······························································18
String str1 = id.substring (id.length () - 1, id.length ());
Pattern p = Pattern.compile ("[0-9]{17}");
Matcher m = p.matcher (str);
if ((str1.matches ("\\d") || str1.equals ("X")) && m.matches
课题要求 (1)使用 java 语言完成本课题的程序设计,并具有一定的深度和难度; (2)结构化程序设计,源程序要有适当的注释,使程序容易阅读; (3)能先对问题进行分析然后进行设计最后进行编码的原则。每一步都要
有文档产生; (4)程序一定要做必要的测试和分析,必须得到合理结果; (5)可适当添加功能,让程序更具有实用性。 (6)提交的所有材料必须符合《长沙理工大学课程设计管理规定》(长理
} //定义个身份证类用于实现接口 IdCardInterFace
class IdCard implements IdCardInterFace {
public final static int systemTime = new GregorianCalendar ().get(Calendar.YEAR);//取得当前系统年份
1.3 操作环境
MyEclipse 8.5
验证身份证号码的正确性
2 功能实现设计 2.1 总体设计
根据上面的分析,将系统分为几大部分:判断身份证号的位数以及每一位是 否正确,判断出生年月是否符合实际,根据算法运算对比校验码是否正确,新旧 身份证号转换,提取输出关键信息。
2.1.1 程序设计组成框图
if (year < 1900 || year > IdCard.systemTime - 18){
DATE_SIGN = 1;
return false;
}else
第6 页 共 34 页
验证身份证号码的正确性
{ month = Integer.parseInt (id.substring (10, 12));//取得月份 //判断月份的正确性 if (month <= 12){ //判断天数的正确性 date = Integer.parseInt (id.substring (12, 14));//取得天数 if (year % 4 == 0 && (year % 100 != 0 || year % 400 ==
1 绪论
验证身份证号码的正确性
1.1 课题内容与要求
课题内容 身份证第 18 位(校验码)的计算方法: (1)将前面的身份证号码 17 位分别乘以不同的系数: 从第一位到第十七位的系数分别为: 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; 身份证号码的第七位到十四位为出生年月日,应符合现实;
2 功能实现设计····················································2 2.1 总体设计·····················································2 2.1.1 程序设计组成框图········································2 2.1.2 数据流图················································2 2.2 详细设计·····················································3 2.2.1 存放信息设计···········································4 2.2.2 构造函数设计···········································4 2.2.3 判断信息是否正确·······································9 2.2.4 新旧身份证号转换······································13 2.2.5 窗口类的创建及实现····································13
0))//判断是否为闰年 { //判断二月份的天数正确性 if (month == 2){ if (date <= 29){ return true; }else{ DATE_SIGN = 3; return false; } }else{ //判断其它月份的天数正确性 if ((month < 8 && month % 2 != 0 && date <=
的和
private int remainder;//存放效验码 private int totals;//存放每一位字符值与它所对应的加权因子的乘积
protected String id;//存放身份证号码 private static int DATE_SIGN;//存放日期错误标志
2.2.2 构造函数设计
口,定义存放年份,月份,天数,性别,年龄,校验码对应表,校验码,
身份证号码,错误标识的容器。
//定义一个接口用于其它类实现
interface IdCardInterFace { int digitCheck (final String id);//位数检查 boolean charCheck ();//字符检查 boolean dateCheck ();//日期检查 boolean efficacyCode ();//效验码检查
工大[2005]8 号)的要求。
1.2 需求分析
本课题主要目的是为了设计一套程序来验证给出的身份证号是否正确,如 若正确将身份证号所体现的关键信息性别,年龄,出生日期展现给用户,同时考 虑到实实际情况给出了十五位身份证号转十八位,以及十八位转十五位的算法, 从而给相关部门机构带来方便。
第1 页 共 34 页
N
判断位数是否正确
Y
退出系统(报错)
判断每一位是否 正确
N
Y
N N
判断出生年月日是 否符合实际
Y
计算校验码
判断校验码是否匹配
Y
十八位转十五位(十五位转十八位) 提取输出关键信息 退出系统
第3 页 共 34 页
验证身份证号码的正确性
2.2 详细设计
2.2.1 存放信息设计
导包,定义一个接口类用于其他类实现,定义个身份证类用于实现接
Pattern p = Pattern.compile ("[0-9]{17}");
Matcher m = p.matcher (id);
return m.matches ();
}else if (id.length () == 18){
String str = id.substring (0, id.lengtБайду номын сангаас () - 1);
return true; }else{
DATE_SIGN = 3; return false; }
return 18; }else if (id.length () == 15){
return 15; }else{
return 0; } } //检查每一位的正确性 public boolean charCheck (){
第5 页 共 34 页
if (id.length () == 17){
验证身份证号码的正确性
身份证号验证系统
1.接收用户输 入的身份证号, 判断位数及每 一位是否正确。
2.判断出生年 月日时候符 合实际,特别 是二月。
3. 运 算 校 验 码,并比较第 十八位时候为 校验码。
2.1.2 数据流图
4.新旧身份 证号转换。
5.提取输出 关键信息。
开始
第2 页 共 34 页
验证身份证号码的正确性
()){
return true;
}else{
return false;
}
}else{
Pattern p = Pattern.compile ("[0-9]{1,18}");
Matcher m = p.matcher (id);
return m.matches ();
}
} //检查日期的正确性
public boolean dateCheck (){ year = Integer.parseInt (id.substring (6, 10));//取得年份 //判断年份的正确性