网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > 核心技术 > 高级编程 > 身份证号码的升位和验证  

身份证号码的升位和验证

2008-07-16  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

    package com.work.util; 网管bitscn_com

    import java.io.BufferedReader;

网管联盟bitsCN_com

    import java.io.InputStreamReader;

网管网www.bitscn.com

    /**

网管u家u.bitscn@com

     * @author cuiwx 网管联盟bitsCN_com

     * wangmj整理优化。 网管u家u.bitscn@com

     * 中国网管论坛bbs.bitsCN.com

     */ 网管bitscn_com

    public class IdCard {

网管u家u.bitscn@com

        // 经过计算得出的指数数组,算法:2的n-1次方求和,除以11取模 中国网管联盟bitsCN.com

        // 如:2的0次方除以11取模=1,2的1次方除以11取模=2,2的2次方除以11取模=4 网管bitscn_com

        static int[] wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; 网管bitscn_com

        // 校验位数组 网管bitscn_com

        static char[] ai = { '1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2' };

网管下载dl.bitscn.com

 

网管网www.bitscn.com

        public static void main(String args[]) {

网管网www.bitscn.com

            // IdCard ic = new IdCard(); 网管u家u.bitscn@com

            // System.currentTimeMillis();

网管网www_bitscn_com

            try { 网管联盟bitsCN@com

                boolean flag = false;

网管u家u.bitscn@com

                while (flag) { 中国网管论坛bbs.bitsCN.com

                    BufferedReader reader = new BufferedReader( 网管论坛bbs_bitsCN_com

                            new InputStreamReader(System.in));

网管论坛bbs_bitsCN_com

                    System.out.println("15位身份证号:");

中国网管联盟bitsCN.com

                    String lowerid = reader.readLine();

网管联盟bitsCN@com

                    if (lowerid.equals("quit")) {

中国网管论坛bbs.bitsCN.com

                        System.out.println("bye~~");

网管联盟bitsCN_com

                        break; 中国网管联盟bitsCN.com

                    } 网管u家u.bitscn@com

                    System.out.println("8位出生日期(19791216):"); 中国网管论坛bbs.bitsCN.com

                    String birth = reader.readLine(); 网管网www.bitscn.com

  网管联盟bitsCN_com

                    System.out.println("请输入性别"); 网管u家u.bitscn@com

                    String sex = reader.readLine();

网管联盟bitsCN_com

 

网管联盟bitsCN@com

                    System.out.println(checkIdNumber(lowerid, birth, sex));

网管u家u.bitsCN.com

                    System.out.println("18位号:" + upperIdNumber(lowerid, birth)); 中国网管论坛bbs.bitsCN.com

                    System.out.println(checkIdNumber(upperIdNumber(lowerid, birth), 中国网管论坛bbs.bitsCN.com

                            birth, sex)); 网管u家u.bitscn@com

                } 中国网管联盟bitsCN.com

            } catch (Exception e) {

网管联盟bitsCN_com

                System.out.println(e);

网管联盟bitsCN_com

            }

网管网www_bitscn_com

 

中国网管联盟bitsCN.com

 

网管u家u.bitscn@com

        }

网管网www_bitscn_com

 

网管bitscn_com

        /**

网管联盟bitsCN_com

         * 根据15位身份证号和出生日期计算得出18位身份证号

网管下载dl.bitscn.com

         * 网管网www_bitscn_com

         * @param lowerId,15位身份证号

中国网管论坛bbs.bitsCN.com

         * @param birthday出生日期,19810912

中国网管论坛bbs.bitsCN.com

         * @return upperId,返回18位身份证号

网管联盟bitsCN_com

         */ 网管网www_bitscn_com

        public static String upperIdNumber(String lowerId, String birthday) {

网管下载dl.bitscn.com

            if (lowerId.length() != 15) {

网管联盟bitsCN_com

                return "请录入15位身份证号码。";

网管u家u.bitscn@com

            } else {

网管论坛bbs_bitsCN_com

                return lowerId.substring(0, 6) + birthday.substring(0, 2)

网管网www_bitscn_com

                        + lowerId.substring(6) + ai[checkBit(lowerId, birthday)]; 网管bitscn_com

            }

网管联盟bitsCN@com

            // return lowerId+ai[checkBit("372832198109126616")];

网管u家u.bitsCN.com

        } 网管下载dl.bitscn.com

  网管论坛bbs_bitsCN_com

        /** 网管bitscn_com

         * 根据15位身份证号和出生日期,计算校验位

网管论坛bbs_bitsCN_com

         *

中国网管联盟bitsCN.com

         * @param lowerId,15位身份证号 网管u家u.bitscn@com

         * @param birthday出生日期,19810912 网管bitscn_com

         * @return mod,第18位校验位,用于从ai数组取数作为身份证号的最后一位,即ai[mod]

网管bitscn_com

         */ 网管u家u.bitsCN.com

        public static int checkBit(String lowerId, String birthday) { 网管下载dl.bitscn.com

            if (lowerId.length() != 15)// 请录入15位身份证号码

网管u家u.bitsCN.com

                return -1; 网管联盟bitsCN_com

  网管bitscn_com

            lowerId = lowerId.substring(0, 6) + birthday.substring(0, 2) 网管u家u.bitsCN.com

                    + lowerId.substring(6); 网管论坛bbs_bitsCN_com

            int sum = 0;

网管u家u.bitscn@com

            // 计算校验位,前 17位加权求和,然后除以11取模 网管联盟bitsCN@com

            for (int i = 1; i < lowerId.length() + 1; i++) {

网管网www.bitscn.com

                sum = sum + wi[i - 1] 网管网www_bitscn_com

                        * (Integer.parseInt(lowerId.substring(i - 1, i))); 网管u家u.bitsCN.com

            }

网管下载dl.bitscn.com

            // System.out.println("sum = " + sum); 网管网www_bitscn_com

            // 计算校验位end

网管下载dl.bitscn.com

            int mod = sum % 11;

中国网管论坛bbs.bitsCN.com

  网管网www_bitscn_com

            return mod;

网管u家u.bitscn@com

        } 网管联盟bitsCN@com

  中国网管联盟bitsCN.com

        /**

网管u家u.bitscn@com

         * 根据传入的18位身份证号,计算校验位

网管网www_bitscn_com

         * 中国网管论坛bbs.bitsCN.com

         * @param id,18位身份证号 网管bitscn_com

         * @return mod,返回校验位,用于从ai数组取数作为身份证号的最后一位,即ai[mod] 网管bitscn_com

         */

网管网www_bitscn_com

        public static int checkBit(String id) { 网管论坛bbs_bitsCN_com

            String lowerId = id.substring(0, 17); 网管网www.bitscn.com

            int sum = 0; 网管联盟bitsCN_com

            for (int i = 1; i < lowerId.length() + 1; i++) {

中国网管论坛bbs.bitsCN.com

                sum = sum + wi[i - 1] 网管u家u.bitscn@com

                        * (Integer.parseInt(lowerId.substring(i - 1, i))); 中国网管联盟bitsCN.com

            }

中国网管联盟bitsCN.com

 

网管联盟bitsCN_com

            int mod = sum % 11; 网管u家u.bitscn@com

  网管联盟bitsCN_com

  网管u家u.bitscn@com

中国网管论坛bbs.bitsCN.com


TAGs   验证   号码   身份证       //   String   身份   证号   日期   result      
 上一篇:关于BigDecimal的不精确计算问题   下一篇:没有了
身份证号码的升位和验证 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: