首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java 身份证第18位数目字的算法

2012-11-20 
java 身份证第18位数字的算法原来在注册一个网站的时候,发现输入身份证会被验证出来。即使前面的全正确,但

java 身份证第18位数字的算法

原来在注册一个网站的时候,发现输入身份证会被验证出来。

即使前面的全正确,但是如果最后一位不正确的话,也会被验证出来的。

原来在身份证的号码,是有规则的。特别是最后一位。

下面是18位身份证最后一位的算法:

/** *功能: 求18位身份证的最后一位 * @author cfd406635982 * */public class IdentityNum {    public static void main(String[] args) {        System.out.println(getLastIDNum("37018319880321312"));    }    /**      * 名称: 计算18位身份证的最后一位     * 功能 : 根据前17位身份证号,求最后一位     * 身份证最后一位的算法:     * 1.将身份证号码的前17位的数字,分别乘以权数 : 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2      *      (比如:第一位乘以7,第二位乘以9,以此类推)     * 2.再将上面的所有乘积求和     * 3.将求得的和mod以11(%11),得到一个小于11的数(0到11)     * 4.然后从1 0 X 9 8 7 6 5 4 3 2几位校验码中找出最后一位的数字     *   如果得到的是0,则对应第一位:1,如果得到的是1,则对应第二位:0     *   如果得到的是2,则对应第三位:X,如果得到的是3,则对应第四位:9,以此类推     * 5.最后得到的就是身份证的最后一位     */    public static Character getLastIDNum(String preIds) {        Character lastId = null;        //当传入的字符串没有17位的时候,则无法计算,直接返回        if(preIds==null && preIds.length()<17) {            return null;        }        int[] weightArray = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//权数数组        String vCode = "10X98765432";//校验码字符串        int sumNum = 0;//前17为乘以权然后求和得到的数                //循环乘以权,再求和        for(int i=0;i<17;i++) {            int index = Integer.parseInt(preIds.charAt(i)+"");            sumNum = sumNum +index*weightArray[i];//乘以权数,再求和        }                int modNum = sumNum%11;//求模        lastId = vCode.charAt(modNum);//从验证码中找出对应的数                return lastId;    }}

可能一般项目中,对于身份证的验证不是很严格。

所以一般也都不怎么验证。但是通过这个也算增长了一种知识。 呵呵。。

1 楼 liberD 2011-03-04   厉害!学习了!
如果楼主把如何推算出来的过程也写出来,就更好了!

热点排行