一、身份證15位和18位的區別
中國居民身份證號碼是由公安機關按照規定的編碼規則在全國範圍內唯一標識一個公民的身份信息。身份證號碼共有18位和15位兩種,其中原15位身份證號碼中,最後一位是校驗碼,而18位身份證號碼中,最後一位是校驗碼,同時加入了生日、地址碼和順序碼等信息。由此可看出,18位的身份證號碼包含了15位的所有信息,並且加入了一些其他的信息。
二、15位身份證轉18位身份證的算法
下面是將身份證15位號碼轉換為18位號碼的具體算法:
/**
* 將15位身份證號碼轉換成18位號碼
* @param idCard 15位身份證號碼
* @return String
*/
public static String convertIdCard(String idCard) {
if (idCard == null) {
return null;
}
if (idCard.length() != 15) {
return idCard;
}
StringBuilder sb = new StringBuilder(idCard);
sb.insert(6, "19"); // 在第7位插入19,表示19xx年出生
sb.append(getCheckCode(sb.toString())); // 計算校驗碼並添加到尾部
return sb.toString();
}
/**
* 計算身份證號碼校驗碼
* @param idCardNumber 身份證號碼(17位)
* @return 校驗碼
*/
private static char getCheckCode(String idCardNumber) {
char[] c = idCardNumber.toCharArray();
int[] bit = new int[]{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char[] checkCode = new char[]{'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
int sum = 0;
for (int i = 0; i < bit.length; i++) {
sum += (c[i] - '0') * bit[i];
}
int remainder = sum % 11;
return checkCode[remainder];
}
三、18位身份證號的信息分析
按照18位身份證號碼的編碼規則,可以對18位身份證號碼進行信息的分析:
- 第1-6位為地址碼,表示申請人的常住戶籍所在地址的行政區劃代碼。
- 第7-14位為出生日期碼,表示申請人出生的年、月、日信息。
- 第15-17位為順序碼,表示在同一地址碼和生日碼下,對同年同月同日出生的人進行編號,順序碼從 001 ~ 999(多出的位數用0補齊)。
- 第18位為校驗碼,是由前面17位數字通過一定的算法計算得出,用於檢驗身份證號碼的正確性。
四、應用舉例
身份證號碼作為身份認證的重要標誌,應用的範圍非常廣泛。如,在銀行開戶、購買保險、辦理公務員招考報名、報考教師資格考試、涉及到安全認證的網站註冊、出國留學和前往香港、澳門等國家和地區旅遊等方面,都需要提供身份證號碼。而身份證15位轉18位,可以滿足相關應用需要,同時也避免了15位號碼長度不足的問題。
原創文章,作者:JELKQ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/363847.html
微信掃一掃
支付寶掃一掃