发表文章 返回首页
当前位置: bitsCN.com > JAVA > 核心技术 > 高级编程 >

身份证号码的升位和验证

时间:2008-07-16 00:00来源:中国网管联盟 作者:bitsCN整理 点击:
package com.work.util; import java.io.BufferedReader; import java.io.InputStreamReader; /** * @author cuiwx * wangmj整理优化。 * */ public class IdCard { // 经过计算得出的指数数组,算法:2的n-1次方
  

       BufferedReader reader = new BufferedReader(

网管网bitsCN_com

          new InputStreamReader(System.in));

54com.cn

        System.out.println("15位身份证号:"); 中国网管论坛bbs.bitsCN.com

        String lowerid = reader.readLine(); 中国网管联盟www_bitscn_com

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

feedom.net

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

中国网管联盟www.bitscn.com

         break;

网管网bitsCN_com

        } 中国网管联盟www_bitscn_com

        System.out.println("8位出生日期(19791216):");

中国网管联盟www、bitsCN、com

        String birth = reader.readLine();

中国网管联盟www_bitscn_com

  中国网管联盟www.bitscn.com

        System.out.println("请输入性别"); 54ne.com

        String sex = reader.readLine();

网管网bitsCN_com

  中国网管联盟www、bitsCN、com

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

中国网管联盟www_bitscn_com

        System.out.println("18位号:" + upperIdNumber(lowerid, birth)); 网管网bitsCN_com

        System.out.println(checkIdNumber(upperIdNumber(lowerid, birth), feedom.net

          birth, sex)); feedom.net

       }

网管网bitsCN_com

      } catch (Exception e) { 54ne.com

       System.out.println(e);

网管联盟www.bitsCN.com

      } 中国网管联盟www.bitscn.com

  54com.cn

 

网管网bitsCN_com

     }

中国网管论坛bbs.bitsCN.com

  网管网bitsCN.com

     /**

54ne.com

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

中国网管联盟www.bitscn.com

      *

54com.cn

      * @param lowerId,15位身份证号 中国网管联盟www、bitsCN、com

      * @param birthday出生日期,19810912 54com.cn

      * @return upperId,返回18位身份证号 中国网管联盟www.bitscn.com

      */ 中国网管联盟www.bitscn.com

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

网管网bitsCN_com

      if (lowerId.length() != 15) { 网管网bitsCN_com

       return "请录入15位身份证号码。"; 中国网管联盟www_bitscn_com

      } else {

中国网管联盟www_bitscn_com

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

网管网bitsCN_com

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

中国网管联盟www_bitscn_com

      } 网管网bitsCN_com

      // return lowerId+ai[checkBit("372832198109126616")]; 中国网管联盟www_bitscn_com

     }

54com.cn

  中国网管联盟www.bitscn.com

     /** 网管网bitsCN.com

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

feedom.net

      * feedom.net

      * @param lowerId,15位身份证号

网管网bitsCN_com

      * @param birthday出生日期,19810912

中国网管联盟www、bitsCN、com

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

54com.cn

      */ 中国网管联盟www_bitscn_com

     public static int checkBit(String lowerId, String birthday) {

feedom.net

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

       return -1; 网管网bitsCN.com

  中国网管联盟www、bitsCN、com

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

网管网bitsCN_com

        + lowerId.substring(6); 中国网管联盟www_bitscn_com

      int sum = 0;

网管网bitsCN.com

      // 计算校验位,前 17位加权求和,然后除以11取模 54com.cn

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

54com.cn

       sum = sum + wi[i - 1]

中国网管论坛bbs.bitsCN.com

         * (Integer.parseInt(lowerId.substring(i - 1, i))); feedom.net

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

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

网管网bitsCN_com

      // 计算校验位end

54com.cn

      int mod = sum % 11;

54com.cn

 

54com.cn

      return mod; 中国网管联盟www、bitsCN、com

     }

网管联盟www.bitsCN.com

 

网管联盟www.bitsCN.com

     /**

feedom.net

      * 根据传入的18位身份证号,计算校验位 网管网bitsCN.com

      * 网管联盟www.bitsCN.com

      * @param id,18位身份证号 中国网管联盟www_bitscn_com

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

网管网bitsCN_com

      */

网管网bitsCN.com

     public static int checkBit(String id) {

中国网管论坛bbs.bitsCN.com

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

      int sum = 0;

54ne.com

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

       sum = sum + wi[i - 1] 54com.cn

         * (Integer.parseInt(lowerId.substring(i - 1, i)));

中国网管联盟www.bitscn.com

      }

feedom.net

 

网管联盟www.bitsCN.com

      int mod = sum % 11;

中国网管论坛bbs.bitsCN.com

 

中国网管联盟www.bitscn.com

      return mod;

网管网bitsCN.com

     } 中国网管联盟www.bitscn.com

 

中国网管联盟www_bitscn_com

     /** 54com.cn

      * 校验身份证号 中国网管联盟www.bitscn.com

      *

网管联盟www.bitsCN.com

      * @param id 54ne.com

      *            身份证号,包括15位和18位

中国网管联盟www.bitscn.com

      * @param birthday出生日期8位(20071207) 54ne.com

      * @param sex,性别,男为奇数,女为偶数

中国网管论坛bbs.bitsCN.com

      * @return result,返回身份证号是否正确 中国网管论坛bbs.bitsCN.com

      */

网管联盟www.bitsCN.com

     public static String checkIdNumber(String id, String birthday, String sex) { 网管联盟www.bitsCN.com

      String result = "";

54ne.com

      int len = id.length();

中国网管联盟www_bitscn_com

      if (len == 15) { 中国网管联盟www_bitscn_com

       // 调用15位身份证号校验方法 54com.cn

       result = checkId_15(id, birthday, sex);

feedom.net

       // System.out.println("15位---------------");

feedom.net

      } else if (len == 18) {

中国网管联盟www_bitscn_com

       // 调用18位身份证号校验方法 中国网管联盟www.bitscn.com

       result = checkId_18(id, birthday, sex); 中国网管联盟www.bitscn.com

       // System.out.println("18位---------------"); 网管网bitsCN_com

      } else {

中国网管联盟www_bitscn_com

       result = "false|身份证号长度错误,只能是15位或18位。"; 中国网管论坛bbs.bitsCN.com

      } 中国网管联盟www.bitscn.com

  网管联盟www.bitsCN.com

      return result;

中国网管论坛bbs.bitsCN.com

     } 中国网管联盟www_bitscn_com

 

中国网管论坛bbs.bitsCN.com

     /** 中国网管联盟www.bitscn.com

      * 校验15位身份证号

网管网bitsCN.com

      * feedom.net

      * @param id 网管网bitsCN_com

      *            15位身份证号 中国网管论坛bbs.bitsCN.com

      * @param birthday出生日期8位(20071207)

54com.cn

      * @param sex,性别,男为奇数,女为偶数

54com.cn

      * @return result 网管联盟www.bitsCN.com

      */

feedom.net

     public static String checkId_15(String id, String birthday, String sex) { 网管网bitsCN_com

      String result = ""; 中国网管联盟www_bitscn_com

      String birth_id = id.substring(6, 12);// 6位日期 54com.cn

      String birth = birthday.substring(2);

54ne.com

      if (birth_id.equals(birth)) { 54com.cn

       // 检验日期,出生日期与身份证中的出生日期相符,然后检验性别 网管网bitsCN.com

       if (sex.equals("男")) {

feedom.net

        // 性别为男,最后一位是奇数 中国网管论坛bbs.bitsCN.com

        String temp = id.substring(14);// 最后一位代表性别 54ne.com

        int isex = Integer.parseInt(temp);

中国网管联盟www_bitscn_com

        if (isex % 2 == 1) {// 除2余数为1

中国网管论坛bbs.bitsCN.com

         result = "true|身份证号通过验证。";

网管联盟www.bitsCN.com

        } else {

中国网管联盟www_bitscn_com

         result = "false|身份证号与性别不相符。"; 网管联盟www.bitsCN.com

        } feedom.net

  中国网管联盟www、bitsCN、com

网管网bitsCN.com

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
发布者资料
admin 查看详细资料 发送留言 加为好友 用户等级:注册会员 注册时间:2008-05-08 23:05 最后登录:2009-01-06 01:01
推荐内容