身份證轉換

身份證轉換是指將15位身份證號碼轉換成18位身份證號碼的一種操作。身份證是中國公民證明身份的重要證件,而目前大多數機構需要使用18位身份證號碼進行識別和驗證。下面將會從多個方面闡述身份證轉換的細節和注意事項。

一、轉換規則

1、15位身份證號碼的規則:

第1-2位為數字表示所在省(直轄市、自治區)的行政區劃代碼,採用GB/T 2260;
第3-4位為數字表示所在市(地區)的行政區劃代碼,採用GB/T 2260;
第5-6位為數字表示所在區(縣、自治縣、縣級市)的行政區劃代碼,採用GB/T 2260;
第7-8位為數字表示出生年份,採用YY表示法;
第9-10位為數字表示出生月份,採用MM表示法;
第11-12位為數字表示出生日,採用DD表示法;
第13-15位為順序號,其中15位男為單數,女為雙數;

2、18位身份證號碼的規則:

第1-6位為數字表示所在省(直轄市、自治區)的行政區劃代碼,採用GB/T 2260;
第7-10位為數字表示所在市(地區)的行政區劃代碼,採用GB/T 2260;
第11-12位為數字表示所在區(縣、自治縣、縣級市)的行政區劃代碼,採用GB/T 2260;
第13-14位為數字表示出生年份,採用YY表示法;
第15-16位為數字表示出生月份,採用MM表示法;
第17-18位為數字表示出生日,採用DD表示法;
第19-20位為數字表示所在地出生的順序號,同時兼顧性別,其中女性的順序號為奇數,男性的順序號為偶數,即偶數為男性,奇數為女性;
第18位為校驗碼,使用ISO 7064:1983.MOD 11-2校驗碼系統計算出來的碼數;

二、轉換方法

1、生成校驗碼:身份證校驗碼基於ISO 7064:1983.MOD 11-2校驗碼系統,具體方法為:

將前17位數分別乘以不同的係數,其中第18個係數為2,然後將所得的18個乘積相加,用加和代替校驗碼位置上的數字,如果相加結果尾數為10,則校驗碼為X;

2、轉換過程:

(1)將15位身份證號碼的前6位升級到18位身份證的前6位升級(省/自治區/直轄市代碼);
(2)增加第七、八位為「19」(年份升級前兩位為19);
(3)將15位身份證的第7-12位補0,對應18位身份證的第9-14位(出生年月日);
(4)增加一位順序號,男性為奇數,女性為偶數,對應18位身份證的第17位;
(5)生成校驗碼,對應18位身份證的第18位。

三、代碼實現

public static String idCard15To18(String idCard){
String idCard18 = "";
if(idCard.length() != 15){
return null;
}
if(!isDigit(idCard)){
return null;
}
String provinceCode = idCard.substring(0,2);
String cityCode = idCard.substring(2, 4);
String districtCode = idCard.substring(4, 6);
String birthCode = "19" + idCard.substring(6, 12);
String orderCode = getGenderCode(idCard.substring(14, 15));
String verifyCode = getVerifyCode(idCard.substring(0,17));
idCard18 = provinceCode + cityCode + districtCode + birthCode + orderCode + verifyCode;
return idCard18;
}
private static boolean isDigit(String str) {
return str.matches("^[0-9]*$");
}
private static String getGenderCode(String str) {
int genderNum = Integer.parseInt(str);
if (genderNum % 2 == 0) {
return "2";
} else {
return "1";
}
}
private static String getVerifyCode(String id17) {
String[] sigma = new String[]{"1","0","X","9","8","7","6","5","4","3","2"};
String[] coefficient = new String[]{"7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2","1"};
int sum = 0;
for(int i=0;i<17;i++){
sum += Integer.parseInt(id17.substring(i,i+1)) * Integer.parseInt(coefficient[i]);
}
int remainder = sum % 11;
return sigma[remainder];
}

四、注意事項

1、轉換後的18位身份證號碼需要進行校驗,以保證其真實性和有效性;

2、在身份證轉換過程中,需要注意年份升級,一般為前兩位追加19;

3、由於身份證轉換主要是針對15位身份證號碼的轉換,因此在使用過程中要保證輸入的號碼長度為15位。

原創文章,作者:ICOCL,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/371921.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ICOCL的頭像ICOCL
上一篇 2025-04-23 18:08
下一篇 2025-04-23 18:08

相關推薦

  • Python輸入身份證判斷地區

    在Python中,我們可以通過簡單的代碼來驗證身份證號碼的合法性,同時也可以從中提取出身份證所屬的地區信息。 一、驗證身份證號碼的合法性 身份證號碼是一個18位的字符串,其中最後一…

    編程 2025-04-27
  • 身份證正則表達式詳細闡述

    一、身份證正則表達式 身份證號碼是中國公民的唯一身份標識,其格式是18位純數字或17位數字加1位大寫字母X。身份證正則表達式使用正則表達式來描述此格式,以進行身份證號碼的合法性校驗…

    編程 2025-04-12
  • 身份證15位轉18位詳解

    一、身份證15位和18位的區別 中國居民身份證號碼是由公安機關按照規定的編碼規則在全國範圍內唯一標識一個公民的身份信息。身份證號碼共有18位和15位兩種,其中原15位身份證號碼中,…

    編程 2025-03-12
  • 身份證15位轉18位在線轉換

    在中國,身份證號碼是一個很重要的身份識別證件,它具有唯一性和不可更改性。在我們的日常生活中有時會遇到需要將15位的身份證號轉換為18位的情況。那麼該如何完成這個任務呢?本文將從多個…

    編程 2025-02-05
  • python讀取身份證號碼(python提取身份證信息)

    本文目錄一覽: 1、用Python校驗身份證號碼真偽 2、python3.8.3 控制台提示輸出身份證號,並輸出接入的數據的位數? 3、Python怎麼用正則表達式匹配全省身份證號…

    編程 2025-01-16
  • 身份證15位轉18位在線轉換詳解

    一、身份證15位轉18位在線轉換器 身份證15位轉18位在線轉換器是一種web應用程序,它可以非常方便地將身份證號碼從15位轉換為18位。 使用身份證15位轉18位在線轉換器非常簡…

    編程 2025-01-03
  • php驗證身份證的驗證類,php身份證識別

    本文目錄一覽: 1、php 身份證 正則 檢測是否有效怎麼寫? 2、PHP正則表達式驗證身份證號格式是否正確 3、如何使用PHP實現身份證是否合法的驗證 4、PHP 做的後台,如何…

    編程 2024-12-31
  • mysql身份證驗證數據庫,數據庫兩種身份驗證

    本文目錄一覽: 1、MySQL數據庫兩張表,一張是身份證號,另一張是四位號和對應的籍貫信息,根據身份證號前四位查詢籍貫信息 2、excel連接MySQL數據庫時顯示無法使用提供的憑…

    編程 2024-12-26
  • c語言身份證信息提取,c語言身份證號提取生日

    本文目錄一覽: 1、用C語言求:寫一個函數,從給定的身份證號中提取出生年月信息,並按日期格式輸出。 2、C語言設計身份證號信息提取器:輸入一身份證號後輸出此人的出生年、月、日。 3…

    編程 2024-12-24
  • java從身份證過期出生年月,java身份證獲取出生日期

    本文目錄一覽: 1、怎樣在JAVA判斷出生日期 和 身份證中的出生日期 相等! 2、JAVA編程–錄入用戶的18位身份證號碼,從中提取用戶的生日, 3、JAVA寫一個程…

    編程 2024-12-22

發表回復

登錄後才能評論