content: /**
   * @Class Name  : EgovNumberUtil.java
   * @Description : 숫자 데이터 처리 관련 유틸리티
   * @Modification Information
   *
   *     수정일         수정자                   수정내용
   *     -------          --------        ---------------------------
   *   2009.02.13       이삼섭                  최초 생성
   *
   * @author 공통 서비스 개발팀 이삼섭
   * @since 2009. 02. 13
   * @version 1.0
   * @see
   *
   */
  
  package egovframework.com.utl.fcc.service;
  
  import java.security.SecureRandom;
  import java.text.ParseException;
  import java.text.SimpleDateFormat;
  import java.util.Date;
  import java.util.Locale;
  
  public class EgovNumberUtil {
  
  	/**
  	 * 특정숫자 집합에서 랜덤 숫자를 구하는 기능 시작숫자와 종료숫자 사이에서 구한 랜덤 숫자를 반환한다
  	 *
  	 * @param startNum - 시작숫자
  	 * @param endNum - 종료숫자
  	 * @return 랜덤숫자
  	 * @see
  	 */
  	public static int getRandomNum(int startNum, int endNum) {
  		int randomNum = 0;
  
  		// 랜덤 객체 생성
  		SecureRandom rnd = new SecureRandom();
  
  		do {
  			// 종료숫자내에서 랜덤 숫자를 발생시킨다.
  			randomNum = rnd.nextInt(endNum + 1);
  		} while (randomNum < startNum); // 랜덤 숫자가 시작숫자보다 작을경우 다시 랜덤숫자를 발생시킨다.
  
  		return randomNum;
  	}
  
  	/**
  	 * 특정 숫자 집합에서 특정 숫자가 있는지 체크하는 기능 12345678에서 7이 있는지 없는지 체크하는 기능을 제공함
  	 *
  	 * @param sourceInt - 특정숫자집합
  	 * @param searchInt - 검색숫자
  	 * @return 존재여부
  	 * @see
  	 */
  	public static Boolean getNumSearchCheck(int sourceInt, int searchInt) {
  		String sourceStr = String.valueOf(sourceInt);
  		String searchStr = String.valueOf(searchInt);
  
  		// 특정숫자가 존재하는지 하여 위치값을 리턴한다. 없을 시 -1
  		if (sourceStr.indexOf(searchStr) == -1) {
  			return false;
  		} else {
  			return true;
  		}
  	}
  
  	/**
  	 * 숫자타입을 문자열로 변환하는 기능 숫자 20081212를 문자열 '20081212'로 변환하는 기능
  	 *
  	 * @param srcNumber - 숫자
  	 * @return 문자열
  	 * @see
  	 */
  	public static String getNumToStrCnvr(int srcNumber) {
  		String rtnStr = null;
  
  		rtnStr = String.valueOf(srcNumber);
  
  		return rtnStr;
  	}
  
  	/**
  	 * 숫자타입을 데이트 타입으로 변환하는 기능
  	 * 숫자 20081212를 데이트타입  '2008-12-12'로 변환하는 기능
  	 * @param srcNumber - 숫자
  	 * @return String
  	 * @see
  	 */
  	public static String getNumToDateCnvr(int srcNumber) {
  
  		String pattern = null;
  		String cnvrStr = null;
  
  		String srcStr = String.valueOf(srcNumber);
  
  		// Date 형태인 8자리 및 14자리만 정상처리
  		if (srcStr.length() != 8 && srcStr.length() != 14) {
  			throw new IllegalArgumentException("Invalid Number: " + srcStr + " Length=" + srcStr.trim().length());
  		}
  
  		if (srcStr.length() == 8) {
  			pattern = "yyyyMMdd";
  		} else if (srcStr.length() == 14) {
  			pattern = "yyyyMMddhhmmss";
  		}
  
  		SimpleDateFormat dateFormatter = new SimpleDateFormat(pattern, Locale.KOREA);
  
  		Date cnvrDate = null;
  
  		try {
  			cnvrDate = dateFormatter.parse(srcStr);
  		} catch (ParseException e) {
  			throw new RuntimeException(e);
  		}
  
  		cnvrStr = String.format("%1$tY-%1$tm-%1$td", cnvrDate);
  
  		return cnvrStr;
  
  	}
  
  	/**
  	 * 체크할 숫자 중에서 숫자인지 아닌지 체크하는 기능
  	 * 숫자이면 True, 아니면 False를 반환한다
  	 * @param checkStr - 체크문자열
  	 * @return 숫자여부
  	 * @see
  	 */
  	public static Boolean getNumberValidCheck(String checkStr) {
  
  		int i;
  		//String sourceStr = String.valueOf(sourceInt);
  
  		int checkStrLt = checkStr.length();
  
  		for (i = 0; i < checkStrLt; i++) {
  
  			// 아스키코드값( '0'-> 48, '9' -> 57)
  			if (checkStr.charAt(i) > 47 && checkStr.charAt(i) < 58) {
  				continue;
  			} else {
  				return false;
  			}
  		}
  
  		return true;
  	}
  
  	/**
  	 * 특정숫자를 다른 숫자로 치환하는 기능 숫자 12345678에서 123를 999로 변환하는 기능을 제공(99945678)
  	 *
  	 * @param srcNumber - 숫자집합
  	 * @param cnvrSrcNumber - 원래숫자
  	 * @param cnvrTrgtNumber - 치환숫자
  	 * @return 치환숫자
  	 * @see
  	 */
  	public static int getNumberCnvr(int srcNumber, int cnvrSrcNumber, int cnvrTrgtNumber) {
  
  		// 입력받은 숫자를 문자열로 변환
  		String source = String.valueOf(srcNumber);
  		String subject = String.valueOf(cnvrSrcNumber);
  		String object = String.valueOf(cnvrTrgtNumber);
  
  		StringBuffer rtnStr = new StringBuffer();
  		String preStr = "";
  		String nextStr = source;
  
  		// 원본숫자에서 변환대상숫자의 위치를  찾는다.
  		while (source.indexOf(subject) >= 0) {
  			preStr = source.substring(0, source.indexOf(subject)); // 변환대상숫자 위치까지 숫자를 잘라낸다
  			nextStr = source.substring(source.indexOf(subject) + subject.length(), source.length());
  			source = nextStr;
  			rtnStr.append(preStr).append(object); // 변환대상위치 숫자에 변환할 숫자를 붙여준다.
  		}
  		rtnStr.append(nextStr); // 변환대상 숫자 이후 숫자를 붙여준다.
  
  		return Integer.parseInt(rtnStr.toString());
  	}
  
  	/**
  	 * 특정숫자가 실수인지, 정수인지, 음수인지 체크하는 기능 123이 실수인지, 정수인지, 음수인지 체크하는 기능을 제공함
  	 *
  	 * @param srcNumber - 숫자집합
  	 * @return -1(음수), 0(정수), 1(실수)
  	 * @see
  	 */
  	public static int checkRlnoInteger(double srcNumber) {
  
  		// byte 1바이트 		▶소수점이 없는 숫자로, 범위 -2^7 ~ 2^7 -1
  		// short 2바이트		▶소수점이 없는 숫자로, 범위 -2^15 ~ 2^15 -1
  		// int 4바이트 		▶소수점이 없는 숫자로, 범위 -2^31 ~ 2^31 - 1
  		// long 8바이트 		▶소수점이 없는 숫자로, 범위 -2^63 ~ 2^63-1
  
  		// float 4바이트		▶소수점이 있는 숫자로, 끝에 F 또는 f 가 붙는 숫자 (예:3.14f)
  		// double 8바이트	▶소수점이 있는 숫자로, 끝에 아무것도 붙지 않는 숫자 (예:3.14)
  		//							▶소수점이 있는 숫자로, 끝에 D 또는 d 가 붙는 숫자(예:3.14d)
  
  		String cnvrString = null;
  
  		if (srcNumber < 0) {
  			return -1;
  		} else {
  			cnvrString = String.valueOf(srcNumber);
  
  			if (cnvrString.indexOf(".") == -1) {
  				return 0;
  			} else {
  				return 1;
  			}
  		}
  	}
  }
  