在開發(fā)Java程序時,常常需要對身份證號進(jìn)行校驗(yàn)或者提取其中的信息。身份證號一共有18位,前17位為地區(qū)碼和出生日期碼的組合,最后一位為校驗(yàn)位。
身份證校驗(yàn)位的計(jì)算方法是將前17位加權(quán)求和,然后除以11取余,對應(yīng)的余數(shù)就是校驗(yàn)位。加權(quán)求和的權(quán)重分別是7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,其中最后一位用X表示。
public static boolean checkId(String id) { if (id == null || id.length() != 18) { return false; } // 定義加權(quán)數(shù)組 int[] weights = new int[]{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; // 定義校驗(yàn)碼對應(yīng)數(shù)組 char[] checkCodeArray = new char[]{'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'}; // 計(jì)算加權(quán)和 int sum = 0; for (int i = 0; i< 17; i++) { sum += Character.getNumericValue(id.charAt(i)) * weights[i]; } // 取余數(shù)得到校驗(yàn)位 int mod = sum % 11; char checkCode = checkCodeArray[mod]; // 檢查校驗(yàn)碼是否正確 return checkCode == id.charAt(17); }
身份證信息提取可以通過截取身份證號的特定位置來獲得。例如,出生日期可以從第7-14位獲得,性別可以從第17位獲得,其中1表示男性,2表示女性。
public static String getGender(String id) { if (id == null || id.length() != 18) { return null; } char genderChar = id.charAt(16); if (genderChar % 2 == 0) { return "女"; } else { return "男"; } } public static Date getBirthday(String id) { if (id == null || id.length() != 18) { return null; } SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String birthdayStr = id.substring(6, 14); try { return sdf.parse(birthdayStr); } catch (ParseException e) { e.printStackTrace(); return null; } }
以上是Java身份證校驗(yàn)位和信息提取的相關(guān)內(nèi)容。