BufferedReader reader = new BufferedReader(
网管网bitsCN_com
new InputStreamReader(System.in));
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;
} 中国网管联盟www_bitscn_com
System.out.println("8位出生日期(19791216):");
中国网管联盟www、bitsCN、com
String birth = reader.readLine();
中国网管联盟www.bitscn.com
System.out.println("请输入性别"); 54ne.com
String sex = reader.readLine();
中国网管联盟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
}
} catch (Exception e) { 54ne.com
System.out.println(e);
} 中国网管联盟www.bitscn.com
54com.cn
网管网bitsCN_com
}
中国网管论坛bbs.bitsCN.com
网管网bitsCN.com
/**
* 根据15位身份证号和出生日期计算得出18位身份证号
*
* @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) {
if (lowerId.length() != 15) { 网管网bitsCN_com
return "请录入15位身份证号码。"; 中国网管联盟www_bitscn_com
} else {
return lowerId.substring(0, 6) + birthday.substring(0, 2)
+ 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
* @param lowerId,15位身份证号
网管网bitsCN_com
* @param birthday出生日期,19810912
* @return mod,第18位校验位,用于从ai数组取数作为身份证号的最后一位,即ai[mod]
*/ 中国网管联盟www_bitscn_com
public static int checkBit(String lowerId, String birthday) {
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]
* (Integer.parseInt(lowerId.substring(i - 1, i))); feedom.net
} 中国网管论坛bbs.bitsCN.com
// System.out.println("sum = " + sum);
// 计算校验位end
int mod = sum % 11;
54com.cn
54com.cn
return mod; 中国网管联盟www、bitsCN、com
}
网管联盟www.bitsCN.com
网管联盟www.bitsCN.com
/**
* 根据传入的18位身份证号,计算校验位 网管网bitsCN.com
* 网管联盟www.bitsCN.com
* @param id,18位身份证号 中国网管联盟www_bitscn_com
* @return mod,返回校验位,用于从ai数组取数作为身份证号的最后一位,即ai[mod]
*/
public static int checkBit(String id) {
中国网管论坛bbs.bitsCN.com
String lowerId = id.substring(0, 17); 网管网bitsCN.com
int sum = 0;
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
int mod = sum % 11;
中国网管论坛bbs.bitsCN.com
中国网管联盟www.bitscn.com
return mod;
} 中国网管联盟www.bitscn.com
中国网管联盟www_bitscn_com
/** 54com.cn
* 校验身份证号 中国网管联盟www.bitscn.com
*
网管联盟www.bitsCN.com
* @param id 54ne.com
* 身份证号,包括15位和18位
* @param birthday出生日期8位(20071207) 54ne.com
* @param sex,性别,男为奇数,女为偶数
* @return result,返回身份证号是否正确 中国网管论坛bbs.bitsCN.com
*/
public static String checkIdNumber(String id, String birthday, String sex) { 网管联盟www.bitsCN.com
String result = "";
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位---------------");
} else if (len == 18) {
// 调用18位身份证号校验方法 中国网管联盟www.bitscn.com
result = checkId_18(id, birthday, sex); 中国网管联盟www.bitscn.com
// System.out.println("18位---------------"); 网管网bitsCN_com
} else {
result = "false|身份证号长度错误,只能是15位或18位。"; 中国网管论坛bbs.bitsCN.com
} 中国网管联盟www.bitscn.com
网管联盟www.bitsCN.com
return result;
} 中国网管联盟www_bitscn_com
/** 中国网管联盟www.bitscn.com
* 校验15位身份证号
网管网bitsCN.com
* feedom.net
* @param id 网管网bitsCN_com
* 15位身份证号 中国网管论坛bbs.bitsCN.com
* @param birthday出生日期8位(20071207)
* @param sex,性别,男为奇数,女为偶数
54com.cn
* @return result 网管联盟www.bitsCN.com
*/
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);
if (isex % 2 == 1) {// 除2余数为1
中国网管论坛bbs.bitsCN.com
result = "true|身份证号通过验证。";
} else {
result = "false|身份证号与性别不相符。"; 网管联盟www.bitsCN.com
} feedom.net
中国网管联盟www、bitsCN、com
网管网bitsCN.com
