java——15位身份證號碼升級到18位
題目
完整程式碼:
package IDCard;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
* 身份證升位規則:
第一代身份證十五位數升為第二代身份證十八位數的一般規則是:
第一步,在原十五位數身份證的第六位數後面插入19 ,這樣身份證號碼即為十七位數;
第二步,按照國家規定的統一公式計算出第十八位數,作為校驗碼放在第二代身份證的尾號。
驗碼計算方法:將身份證前十七位數分別乘以不同係數,
從第一至十七位的係數分別為7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2,
將這十七位數字和係數相乘的結果相加,用加出來的和除以11,看看餘數是多少。
餘數只可能有0、1、2、3、4、5、6、7、8、9、10這十一個數字,
其分別對應的最後一位身份證的號碼為1、0、X、9、8、7、6、5、4、3、2,
這樣就得出了第二代身份證第十八位數的校驗碼。
*/
public class Ic {
// 主要計算方法,identifyCard是傳入的15位身份證號
public static String get18Ic(String identifyCard) {
String retId = "";
String id17 = "";
int sum = 0;
int y = 0;
// 定義陣列加權因子
int[] wf = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
// 定義陣列存放校驗碼
String[] cc = { "1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2" };
// 在原15位數身份證的第六位數後面插入19
id17 = identifyCard.substring(0, 6) + "19" + identifyCard.substring(6);
// 17位數字和係數相乘,結果相加
for (int i = 0; i < 17; i++) {
sum = sum + Integer.valueOf(id17.substring(i, i + 1)) * wf[i];
}
// 計算餘數
y = sum % 11;
// 通過模獲得對應的校驗碼cc[yy];
retId = id17 + cc[y];
return retId;
}
// 讀取檔案,引數fileName為傳入的要讀取檔案的路徑及檔名
public static void readFileByLines(String fileName) {
File file = new File(fileName);
BufferedReader reader = null;
try {
reader=new BufferedReader(new FileReader(file));
String tempString=null;
int line=1;
//一次讀取一行
while((tempString=reader.readLine())!=null){
//新的身份證號碼
String returnId=get18Ic(tempString);
//寫入到檔案中
WriterFile(returnId);
line++;
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}
//存入檔案的名稱
static String file=null;
//引數returnID為返回的18位身份證號,是要寫入檔案的內容
public static void WriterFile(String returnID){
FileWriter fw = null ;
//如果檔案不存在,建立檔案
try {
File f=new File(file);
fw=new FileWriter(f,true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
PrintWriter pw=new PrintWriter(fw);
pw.println(returnID+"\n");
pw.flush();
try {
fw.flush();
pw.close();
fw.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
//以日期作為輸出檔案的檔名
public static String FileName(){
SimpleDateFormat simpleDateFormat;
simpleDateFormat =new SimpleDateFormat("yyyyMMddHHmmss");
Date date=new Date();
String filenametxt=simpleDateFormat.format(date);
return filenametxt;
}
public static void main(String[] args) {
file="C:\\Users\\李強\\Desktop\\IDCardNo("+FileName()+").txt";//寫入檔案的名稱,及路徑
System.out.println("正在讀取檔案,轉換中");
readFileByLines("C:\\Users\\李強\\Desktop\\15.txt");//讀取檔案的路徑,及檔名
System.out.println("轉換完成!");
}
}
相關文章
- 藍橋杯 -- 演算法提高 身份證號碼升級演算法
- PHP 驗證身份證號碼PHP
- javascript身份證號碼校驗JavaScript
- excel身份證號提取年齡公式 身份證號碼提取精確年齡的公式Excel公式
- 華為帳號服務升級,助力應用快速驗證使用者身份
- 匹配身份證號碼正規表示式
- C++身份證號驗證C++
- js正則驗證身份證號JS
- 中國身份證號驗證庫
- iOS身份證號識別iOS
- swift 郵箱、密碼、手機號、身份證驗證正則Swift密碼
- java正規表示式替換手機號,身份證號處理 星號Java
- 增強版實名認證介面-Java身份證實名認證介面程式碼-身份認證Java
- Java格式化手機號和身份證號,中間使用星號*隱藏Java
- 提供一箇中國身份證號碼判斷的類
- ng 姓名,手機,身份證號碼 脫敏處理
- PostgreSQL版的身份證號碼15位轉18位SQL
- 阿里健康 “碼上放心”平臺:升級打造臨床新藥研發 “電子身份證”阿里
- 編寫正則:匹配郵箱 手機號 密碼以及身份證號密碼
- 身份證號碼的正規表示式及驗證詳解(JavaScript,Regex)JavaScript
- excel身份證號計算年齡Excel
- C++身份核驗介面程式碼、身份證OCR、身份證實名認證APIC++API
- Javascript使用正則驗證身份證號(簡單)JavaScript
- 手機、電話號碼、郵箱、域名、身份證號的測試用例
- 本地測試Http升級到Https(證書信任)HTTP
- 驗證身份證號碼格式並且得到出生年月和性別
- 7-4 身份證號碼最後一位 (100分)
- 華為帳號服務升級,提供通用簡訊驗證碼讀取能力
- js檢查身份證號是否正確JS
- 應用身份服務IDaaS重磅升級
- JS驗證18位身份證號的正確性JS
- Java身份證實名認證、身份證識別介面讓您認證任性的“懶”Java
- 升級到Java 17沒這麼簡單Java
- 通過身份證號碼獲取人的年齡和性別
- JS校驗身份證號的合法性JS
- oracle 10 rac 升級 10.2.0.1升級到10.2.0.5Oracle
- ccproject升級到1135Project
- mongodb單機從3.2升級到4.0.4升級MongoDB