diff --git a/pom.xml b/pom.xml
index 36b657c..429daf3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,6 +49,13 @@
xit-docs
23.04.01-SNAPSHOT
+
+
+
+ com.ibm.icu
+ icu4j
+ 75.1
+
diff --git a/src/main/java/cokr/xit/applib/AppCmmnUtil.java b/src/main/java/cokr/xit/applib/AppCmmnUtil.java
index ab2e62f..88e6b3e 100644
--- a/src/main/java/cokr/xit/applib/AppCmmnUtil.java
+++ b/src/main/java/cokr/xit/applib/AppCmmnUtil.java
@@ -5,6 +5,56 @@ import java.util.regex.Pattern;
public class AppCmmnUtil {
+ /**
+ * 전화번호(유선,무선) 형식인지 체크한다.
+ * @param 문자열
+ * @return boolean
+ */
+ public static boolean isTelno(String str) {
+
+ //01X
+ String REGEXP_PHONE = "^(01)\\d{8,9}$";
+ if(Pattern.matches(REGEXP_PHONE, str)) {
+ return true;
+ }
+
+ //서울
+ String REGEXP_TEL = "^(02)\\d{7,8}$";
+ if(Pattern.matches(REGEXP_TEL, str)) {
+ return true;
+ }
+
+ //지방
+ REGEXP_TEL = "^(0)(3|4|5|6)\\d{8,9}$";
+ if(Pattern.matches(REGEXP_TEL, str)) {
+ return true;
+ }
+
+ //070
+ REGEXP_TEL = "^(070)\\d{7,8}$";
+ if(Pattern.matches(REGEXP_TEL, str)) {
+ return true;
+ }
+
+ //전국대표번호(0000-0000)
+ REGEXP_TEL = "^\\d{8}$";
+ if(Pattern.matches(REGEXP_TEL, str)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * 문자수신 가능한 휴대폰번호인지 체크한다.
+ * @param 문자열
+ * @return boolean
+ */
+ public static boolean isReceivePhone(String str) {
+ String REGEXP_PHONE = "^(01)\\d{8,9}$";
+ return Pattern.matches(REGEXP_PHONE, str);
+ }
+
/**
* 문자열이 차량번호인지 체크한다.
* @param 문자열
@@ -35,4 +85,72 @@ public class AppCmmnUtil {
return false;
}
}
+
+ /**
+ * 문자열에서 차량번호를 추출한다.
+ * @param 문자열
+ * @return String 차량번호
+ */
+ public static String extractCarNumber(String carNum){
+
+ try{
+ String regex = "[서울|부산|대구|인천|대전|광주|울산|제주|경기|강원|충남|전남|전북|경남|경북|세종]{2}\\d{2}[가|나|다|라|마|거|너|더|러|머|버|서|어|저|고|노|도|로|모|보|소|오|조|구|누|두|루|무|부|수|우|주|바|사|아|자|허|배|호|하\\x20]\\d{4}";
+ Pattern p = Pattern.compile(regex);
+ Matcher m = p.matcher(carNum);
+ if (m.find()) {
+ return m.group();
+ }
+
+
+ regex = "\\d{3}[가|나|다|라|마|거|너|더|러|머|버|서|어|저|고|노|도|로|모|보|소|오|조|구|누|두|루|무|부|수|우|주|바|사|아|자|허|배|호|하\\x20]\\d{4}";
+ p = Pattern.compile(regex);
+ m = p.matcher(carNum);
+ if (m.find()) {
+ return m.group();
+ }
+
+ regex = "\\d{2}[가|나|다|라|마|거|너|더|러|머|버|서|어|저|고|노|도|로|모|보|소|오|조|구|누|두|루|무|부|수|우|주|바|사|아|자|허|배|호|하\\x20]\\d{4}";
+ p = Pattern.compile(regex);
+ m = p.matcher(carNum);
+ if (m.find()) {
+ return m.group();
+ }
+
+ return "";
+
+ }catch(Exception e){
+ return "";
+ }
+ }
+
+ /**
+ * "연-월-일 시:분:초" 형식 여부를 체크한다.
+ * @param 문자열
+ * @return boolean
+ */
+ public static boolean isDateTimePattern(String str){
+ String DATETIME_PATTERN = "(19|20)\\d{2}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]";
+ Pattern datetimePattern = Pattern.compile(DATETIME_PATTERN);
+
+ if(datetimePattern.matcher(str).matches()) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * "연월일시분초" 14자리 형식 여부를 체크한다.
+ * @param 문자열
+ * @return boolean
+ */
+ public static boolean isDateTimeDigitPattern(String str){
+ String DATETIME_PATTERN = "^\\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])([0-1][0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$";
+ if(Pattern.matches(DATETIME_PATTERN, str)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
}
diff --git a/src/main/java/cokr/xit/applib/Hangul.java b/src/main/java/cokr/xit/applib/Hangul.java
new file mode 100644
index 0000000..d1fcc4b
--- /dev/null
+++ b/src/main/java/cokr/xit/applib/Hangul.java
@@ -0,0 +1,222 @@
+package cokr.xit.applib;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import org.apache.commons.io.IOUtils;
+
+import com.ibm.icu.text.CharsetDetector;
+import com.ibm.icu.text.CharsetMatch;
+
+public class Hangul {
+ public Hangul(int hangulIsNByte){
+ this.hangulIsNByte = hangulIsNByte;
+ }
+
+ private int hangulIsNByte;
+
+ public int is() {
+ return this.hangulIsNByte;
+ }
+
+ /**
+ * 문자열의 바이트 수 구하기
+ *
+ * @param str
+ * @return
+ */
+ public int getByteLength(String str) {
+ if(str == null) {
+ return 0;
+ }
+ int byteLen = 0;
+
+ for(int i=0;i 127) || (ch < 0)) {
+ byteLen += this.is();
+ } else {
+ byteLen += 1;
+ }
+ }
+
+ return byteLen;
+ }
+
+ /**
+ * 문자열을 바이트 단위로 패딩
+ *
+ * @param str
+ * @param byteLen
+ * @param ch
+ * @return
+ */
+ public String lpadByte(String str, int byteLen, String ch) {
+ String result = str;
+
+ int strLen = this.getByteLength(str);
+
+ for(int i=0; i < byteLen - strLen ; i++) {
+ result = ch + result;
+ }
+
+ return result;
+ }
+
+ /**
+ * 문자열을 바이트 단위로 패딩
+ *
+ * @param str
+ * @param byteLen
+ * @param ch
+ * @return
+ */
+ public String rpadByte(String str, int byteLen, String ch) {
+ String result = str;
+
+ int strLen = this.getByteLength(str);
+
+ for(int i=0; i < byteLen - strLen ; i++) {
+ result += ch;
+ }
+
+ return result;
+ }
+
+ /**
+ * 문자열을 바이트 단위로 substring하기
+ *
+ * @param str
+ * @param beginBytes
+ * @param endBytes
+ * @return
+ */
+ public String substringByBytes(String str, int beginBytes, int endBytes) {
+ if (str == null || str.length() == 0) {
+ return "";
+ }
+
+ if (beginBytes < 0) {
+ beginBytes = 0;
+ }
+
+ if (endBytes < 1) {
+ return "";
+ }
+
+ int len = str.length();
+
+ int beginIndex = -1;
+ int endIndex = 0;
+
+ int curBytes = 0;
+ String ch = null;
+ for (int i = 0; i < len; i++) {
+ ch = str.substring(i, i + 1);
+ curBytes += this.getByteLength(ch);
+
+
+ if (beginIndex == -1 && curBytes >= beginBytes) {
+ beginIndex = i;
+ }
+
+ if (curBytes > endBytes) {
+ break;
+ } else {
+ endIndex = i + 1;
+ }
+ }
+
+ return str.substring(beginIndex, endIndex);
+ }
+
+ /**
+ * 문자열을 바이트 단위로 substring하기
+ *
+ * @param str
+ * @param beginBytes
+ * @return
+ */
+ public String substringByBytes(String str, int beginBytes) {
+ if (str == null || str.length() == 0) {
+ return "";
+ }
+
+ if (beginBytes < 0) {
+ beginBytes = 0;
+ }
+
+ int len = str.length();
+
+ int beginIndex = -1;
+
+ int curBytes = 0;
+ String ch = null;
+ for (int i = 0; i < len; i++) {
+ ch = str.substring(i, i + 1);
+ curBytes += this.getByteLength(ch);
+
+
+ if (beginIndex == -1 && curBytes >= beginBytes) {
+ beginIndex = i;
+ }
+
+ }
+
+ return str.substring(beginIndex);
+ }
+
+ /**
+ * 텍스트파일 인코딩 확인
+ *
+ * @param path 파일경로
+ * @return 캐릭터셋
+ */
+ public String encodingDetect(String path) throws IOException {
+ File f = new File(path);
+
+ return encodingDetect(f);
+ }
+
+ /**
+ * 텍스트파일 인코딩 확인
+ *
+ * @param file 파일
+ * @return 캐릭터셋
+ */
+ public String encodingDetect(File file) throws IOException {
+ CharsetDetector detector;
+ CharsetMatch match;
+
+ FileInputStream fis = null;
+ try {
+ String result = "";
+
+ fis = new FileInputStream(file);
+
+ byte[] byteData = new byte[(int) file.length()];
+
+ fis.read(byteData);
+ fis.close();
+ detector = new CharsetDetector();
+
+ detector.setText(byteData);
+ match = detector.detect();
+
+ System.out.println("encoding is \"" + match.getName() + "\"");
+
+ if(match.getName().equals("UTF-8") || match.getName().equals("EUC-KR")) {
+ result = match.getName();
+ } else {
+ result = "EUC-KR";
+ }
+
+ return result;
+ }
+ finally {
+ IOUtils.closeQuietly(fis);
+ }
+ }
+}