身份证号码校验算法实现.docx_第1页
身份证号码校验算法实现.docx_第2页
身份证号码校验算法实现.docx_第3页
身份证号码校验算法实现.docx_第4页
身份证号码校验算法实现.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/* * 【身份证号码的规则】 1、15位身份证号码组成: ddddddyymmddxxs共15位,其中: * dddddd为6位的地方代码,根据这6位可以获得该身份证号所在地。 yy为2位的年份代码,是身份证持有人的出身年份。 * mm为2位的月份代码,是身份证持有人的出身月份。 dd为2位的日期代码,是身份证持有人的出身日。 这6位在一起组成了身份证持有人的出生日期。 * xx为2位的顺序码,这个是随机数。 s为1位的性别代码,奇数代表男性,偶数代表女性。 2、18位身份证号码组成: * ddddddyyyymmddxxsp共18位,其中: 其他部分都和15位的相同。年份代码由原来的2位升级到4位。最后一位为校验位。 校验规则是: * (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 也就是说,如果得到余数为1则最后的校验位p应该为对应的0.如果校验位不是,则该身份证号码不正确。 */package citi;import java.util.Scanner;/* * author D.puntu * */public class MyIdCard private static String Id = null;private static String myIndexStr, index = null;private static int i = 0;private static int m = 0, n = 0, myIndex;private static int areaId, year, mon, day, sex;private static int id = 0;/ 从第一位到第十七位的数字的权值private static int myArrayIndex = 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9,10, 5, 8, 4, 2 ;public static void main(String args) startIndex();private static void startIndex() Scanner in = new Scanner(System.in);System.out.println(请输入身份证号(18位数字):);Id = in.next();i = Id.length();while (i != 18) if (i 18) System.out.println(身份证号码只有18位数字,但是您输入 + i + 位,请重新输入);Id = in.next();i = Id.length(); else if (i 18) System.out.println(身份证号码应该有18位数字,但是您输入 + i + 位,请重新输入);Id = in.next();i = Id.length();if (i = 18) while (!getAreaId(Id, i) | !getYear(Id, i) | !getMon(Id, i)| !getDay(Id, i) Id = in.next();i = Id.length();getIndex(Id, i, getSum(Id, i);private static int getSum(String id, int i) for (m = 0; m 659001 | areaId 2015 | year 1865) System.out.println(输入的身份证号码年份有错误!请重新输入身份证号码);myYear = false; else myYear = true;return myYear;public static boolean getMon(String str, int i) boolean myMon = false;mon = Integer.parseInt(str.substring(id + 10, id + 12);if (mon = 1) myMon = true; else System.out.println(输入的身份证号码月份有错误!请重新输入身份证号码);return myMon;public static boolean getDay(String str, int i) boolean myDay = false;int dayToMon = Integer.parseInt(str.substring(id + 10, id + 12);day = Integer.parseInt(str.substring(id + 12, id + 14);if (day = 1 & day = getMonday(dayToMon) myDay = true; else System.out.println(输入的身份证号码天数与对应的月份不一致!请重新输入身份证号码);return myDay;public static int getMonday(int i) int jDay = 0;switch (i) case 1:case

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论