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

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;
    }
}

时间: 2024-11-10 01:12:25

简单java 身份证第18位数字的算法的相关文章

java,javascript对18位身份证格式的验证算法

参考资料 1 java实现的18位身份证格式验证算法 http://fanqiang.chinaunix.net/program/java/2006-06-22/4639.shtml 原码中有少许错误,我已经调整过来了 2 身份证效验规则,经典 http://since2006.com/blog/176 公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 1.地址码 表示编码对象常住户口所

微信被扫码支付的18位数字代表什么

问题描述 微信被扫码支付的18位数字代表什么 为什么扫码支付的数字是18位,其中数字又分别代表什么,求大神解答 解决方案 这是微信接口的文档,你可以参考一下 http://wenku.baidu.com/link?url=iiWlLGVB6G3HWp0xHzaKg30Qc0MpY3sDg92XUpBUb2PQyfof3npp1AXt5kWozCnCtEGRefXd-KPTWbrByR0_gm5_rB7_ZKzKp92ekFZVMuu

查询新身份证(18位)的校验位

/*    根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码.     地址码表示编码对象常住户口所在县(市.旗.区)的行政区划代码.生日期码表示编码对象出生的年.月.日,其中年份用四位数字表示,年.月.日之间不用分隔符.顺序码表示同一地址码所标识的区域范围内,对同年.月.日出生的人员编定的顺序号.顺序码的

excel中输入18位身份证号的方法

  在公司.学校,经常会遇到需要在Excel录入身份证号的场景,但录入完毕会发现身份证号成了科学统计法,再次点击发现最后三位成了"0",这个如何解决呢? 规规矩矩的输入18位数字 最后三位成了"0" 究其原因,就是Excel目前最多支持15位数字,超过的数字全部默认为"0",解决方法很简单,将格式由"数值"改为"文本".因为身份证号作为一串固定的数字并没有运算需求,应该归属于规规矩矩的文本. 方法一:先在表

JavaScript验证18位身份证号码最后一位正确性的实现代码_javascript技巧

根据身份证号码推算出最后一位的正确性,如果不正确还会给出正确结果,非常有意思的一断程序. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> &l

bs代码身份证15位升18位算法

问题描述 15位身份证转18位身份证代码,代码简洁明了,易懂 解决方案 解决方案二:15位和18位规则不一样的,无法确认的地方你打算怎么处理?解决方案三:///<summary>///身份证ID15转18位///</summary>///<paramname="id">15位身份证号</param>///<returns>18位身份证号</returns>publicstringPersonID15To18(str

java身份证合法性校验并提取身份证有效信息_java

java身份证合法性校验并获取身份证号有效信息,供大家参考,具体内容如下 java身份证合法性校验 /**身份证前6位[ABCDEF]为行政区划数字代码(简称数字码)说明(参考<GB/T 2260-2007 中华人民共和国行政区划代码>): * 该数字码的编制原则和结构分析,它采用三层六位层次码结构,按层次分别表示我国各省(自治区,直辖市,特别行政区). * 市(地区,自治州,盟).县(自治县.县级市.旗.自治旗.市辖区.林区.特区). 数字码码位结构从左至右的含义是: 第一层为AB两位代码表

15位和18位身份证JS校验的简单实例_javascript技巧

一.身份证号码的结构和表示形式 1.号码的结构 根据[中华人民共和国国家标准GB11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 2.地址码 表示编码对象常住户口所在县(市.旗.区)的行政区划代码,按GB/T2260的规定执行. 3.出生日期码 表示编码对象出生的年.月.日,按GB/T7408的规定执行,年.月.日代码之间不用分隔符. 4.顺序

JS实现身份证号码15位转18位时最后一位的算法

js|算法 <SCRIPT LANGUAGE="JavaScript"><!--var lastNumber;var id = "15位身份证号码"//15位身份证号码var getNum=eval(id.charAt(0)*7+id.charAt(1)*9+id.charAt(2)*10+id.charAt(3)*5+id.charAt(4)*8+id.charAt(5)*4+id.charAt(6)*2+id.charAt(7)*1+id.ch