iT邦幫忙

0

請教Java身分證字號驗證程式碼問題

  • 分享至 

  • xImage

最近參照Java參考書後,有寫出下面的身分證字號驗證程式碼,
請問如果想在最後檢核失敗後,請使用者重新輸入,再進行一次驗證,
迴圈要加在哪裡比較好,再麻煩大神賜教 謝謝。

	public static void main(String[] args) throws IOException {	
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String str; // 紀錄使用者輸入資料
		Boolean isID;// 使用者輸入的格式是否正確

		do {
			isID = true;
			System.out.println("請輸入身份證字號:");
			str = br.readLine();

			if (!str.matches("[a-zA-Z]\\d{9}")) { 
				System.out.println("身份證字號應該是1個英文字母接著9個數字!");
				isID = false;
			}
			
		} while (!isID); 

		
		//陣列放身分証英文字母對應值
		int[] letterNums = {10,11,12,13,14,15,16,17,34,18,19,20,21,22,35,23,24,25,26,27,28,29,32,30,31,33};
		
		str = str.toUpperCase(); //先將第一個英文字母轉為大寫
		char letter = str.charAt(0); //取出第一個字母
		str = letterNums[letter - 'A'] + str.substring(1); 

		
		int total = str.charAt(0)-'0';
		for(int i=1; i<10 ; i++) {
			total += (str.charAt(i)-'0') * (10-i); //依序加總
		}
		//以10減去加總值之個位數後取個位數
		int checkNum = (10 - total % 10) % 10;
		
		//計算結果和最後一位數比較
		if(checkNum == (str.charAt(10)-'0')) {
			System.out.println("檢核通過");
		}else {
			System.out.println("檢核錯誤,請確實填寫");
		}
	}
}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
海綿寶寶
iT邦大神 1 級 ‧ 2021-12-30 19:50:56
最佳解答

1.把檢核身分證字號的部份包成一個 method
2.在主迴圈加上判斷

執行結果如下
https://ithelp.ithome.com.tw/upload/images/20211230/20001787q1WbKH7Prn.png
/images/emoticon/emoticon55.gif

我要發表回答

立即登入回答