java实现验证身份证号是否合法
2017-12-17 18:02
633 查看
输入18位的身份证号码,要求首先验证身份证号码合法性(仅利用校验位验证),如果合法则输出性别和出生日期。说明:
(1)身份证号码的7~12位表示出生年月;第17位表示性别,奇数为男,偶数为女;最后一位为校验位
(2)校验算法:将前面的身份证号码17位数加权求和(系数分别7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2),然后除以11,根据余数找到对应的校验位(分别为1、0、X 、9、8、7、6、5、4、3、2),如果计算的校验位和输入的校验位一致说明身份证号码合法。比如身份证号码53010219200508011x,前17位加权求和:
(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2=189
189%11 = 2
序号为2的校验位就是X,所以身份证号码合法。
总结:编程主要的还是思路,思路清晰了写代码就容易,就比如本题,我们拿到的时候首先想输入一个身份证号,然后就要判断身份证号是否合法,等合法了我们才可以进行下一步。这样的话我们就需要一个判断身份证号是否合法的方法。当判断合法之后,我们就可以输出年月和性别了。输出年月和性别可以分别设置方法进行判断。
当然这里面存在一些bug,比如输入19个的身份证号,前18位正确,多数了一个数也会被认为正确的。
(1)身份证号码的7~12位表示出生年月;第17位表示性别,奇数为男,偶数为女;最后一位为校验位
(2)校验算法:将前面的身份证号码17位数加权求和(系数分别7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2),然后除以11,根据余数找到对应的校验位(分别为1、0、X 、9、8、7、6、5、4、3、2),如果计算的校验位和输入的校验位一致说明身份证号码合法。比如身份证号码53010219200508011x,前17位加权求和:
(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2=189
189%11 = 2
序号为2的校验位就是X,所以身份证号码合法。
package zt_text_id; import java.util.Scanner; public class zt_text_idmain { public static void main(String[] args) { System.out.println("请输入你的身份证号:"); Scanner scan = new Scanner(System.in); String iden = scan.next(); idCard id = new idCard(iden); System.out.println("你的身份证号"+(id.isLegal()==1?"合法":"不合法")); if (id.isLegal()==1){ System.out.println("你的出生年月是:"+id.year()); System.out.println("性别:"+(id.sex()==1?"男":"女")); } } }
package zt_text_id; public class idCard { private String id; private static final byte MALE = 1; private static final byte FAMALE = 0; /** * 构造函数初始化 * @param id */ public idCard(String id){ this.id = id; } /** * 检验身份证是否合法 * @return 1-合法;0-不合法 */ public int isLegal(){ int a = 0; int sum = 0; char checkBit[]={'1','0','X','9','8','7','6','5','4','3','2'}; int []add={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; char []stringArr = id.toCharArray(); for (int i=0;i<17;i++){ sum +=add[i]*(stringArr[i]-'0'); } if (stringArr[17]==checkBit[sum%11]){ a=1; } return a; } /** * 判断性别 * @return 1-男;0-女;-1-错误; */ public byte sex(){ if (isLegal()==1){ char []stringArr = id.toCharArray(); if (stringArr[17]%2==0){ return MALE; }else{ return FAMALE; } } return -1; } /** * 输出年月日 * @return 年月日的字符串比如:20171207 */ public String year(){ String num=null; if (isLegal()==1){ num = id.substring(6,14); } return num; } }
总结:编程主要的还是思路,思路清晰了写代码就容易,就比如本题,我们拿到的时候首先想输入一个身份证号,然后就要判断身份证号是否合法,等合法了我们才可以进行下一步。这样的话我们就需要一个判断身份证号是否合法的方法。当判断合法之后,我们就可以输出年月和性别了。输出年月和性别可以分别设置方法进行判断。
当然这里面存在一些bug,比如输入19个的身份证号,前18位正确,多数了一个数也会被认为正确的。
相关文章推荐
- Java验证身份证是否合法
- Java 银行卡和身份证号根据校验位验证是否合法
- C#实现验证身份证是否合法的方法
- Java验证身份证号码是否合法
- Unity实现验证身份证是否合法
- Java验证身份证号是否合法
- java代码实现身份证第18位的计算和验证身份证号码是否是真实有效.
- java验证身份证是否合法
- 第三十七篇:JAVA验证身份证号是否合法
- Java验证身份证是否合法
- JAVA后台验证身份证是否合法
- Java 验证 身份证号码是否规范
- php内置函数实现 验证邮箱,url地址格式是否合法
- JavaScript验证18位或者15位身份证号码是否合法
- 验证身份证是否合法的c#代码
- java实现的18位身份证格式验证算法
- ios验证身份证是否合法
- C语言身份证信息查询系统(可验证输入身份证是否合法)
- Android java用正则方法验证文件名是否合法
- java实现的18位身份证格式验证算法