Graceful Java Programming 우아 한 Java 프로 그래 밍 의 신분증 인 코딩 검사

자신 이 만 든 공구 류 를 남 겨 두 고 동시에 모두 에 게 공유 하 다.

	/**
	 *    15      ,  18 ,
	 *               
	 *    18 ,      
	 * @param orgIDCardNo
	 * @return
	 * @throws ParseException        
	 */
	public static String converse15DigitTo18Digit(String orgIDCardNo) throws ParseException{
		if(orgIDCardNo == null){
			throw new IllegalArgumentException("     null");
		}
		String buffer = orgIDCardNo.trim();
		int numberLength = buffer.length();
		
		//       ,    15  18 ,   “IllgalArgumentException       ”  
		if(numberLength != 15 && numberLength != 18){
			throw new ParseException("        " , 0);
		}
		
		//          
		if(numberLength == 15){
			//  15         
			String birthDateStr = buffer.substring(6 , 12);
			try {
				new SimpleDateFormat("yyMMdd").parse(birthDateStr);
			} catch (ParseException e) {
				e.printStackTrace();
				throw new ParseException("        " , 7);
			}
			// 15      18      
			buffer = buffer.substring(0,6) + "19" + buffer.substring(6 , 15);
			
		}else{			
			//  18         
			String birthDateStr = buffer.substring(6 , 14);
			try {
				new SimpleDateFormat("yyyyMMdd").parse(birthDateStr);
			} catch (ParseException e) {
				e.printStackTrace();
				throw new ParseException("        " , 7);
			}
			//   17 , 18            
			buffer = buffer.substring(0,17);
		}
		
		//  18      	
		char[] charArray = buffer.toCharArray();
		int factor = 0;
		for(int i = 18 ; i>=2 ; i--){
			if(charArray[18 - i] < '0' || charArray[18 - i] > '9'){
				throw new ParseException("        " , 18-i);
			}
			factor += (((int)Math.pow(2, (i-1))) % 11) *((charArray[18 - i] & 0xff) - 48);
		}
		factor %= 11;
		switch(factor){
		case 0 :
			buffer += "1";
			break;
		case 1 :
			buffer += "0";
			break;
		case 2 :
			buffer += "X";
			break;
		case 3 :
			buffer += "9";
			break;
		case 4 :
			buffer += "8";
			break;
		case 5 :
			buffer += "7";
			break;
		case 6 :
			buffer += "6";
			break;
		case 7 :
			buffer += "5";
			break;
		case 8 :
			buffer += "4";
			break;
		case 9 :
			buffer += "3";
			break;
		case 10 :
			buffer += "2";
			break;
		}
		
		//   18     ,             
		if(numberLength == 18 
				&& !buffer.equals(orgIDCardNo.trim())){
			throw new ParseException("        " , 18);
		}
		
		return buffer;		
	}

좋은 웹페이지 즐겨찾기