217 lines
6.2 KiB
Java
217 lines
6.2 KiB
Java
/**
|
|
* @Class Name : EgovNumberUtil.java
|
|
* @Description : 숫자 데이터 처리 관련 유틸리티
|
|
* @Modification Information
|
|
*
|
|
* 수정일 수정자 수정내용
|
|
* ------- -------- ---------------------------
|
|
* 2009.02.13 이삼섭 최초 생성
|
|
*
|
|
* @author 공통 서비스 개발팀 이삼섭
|
|
* @since 2009. 02. 13
|
|
* @version 1.0
|
|
* @see
|
|
*
|
|
*/
|
|
|
|
package egovframework.com.cmm.util;
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|