java에서 KSC5601 규격에 해당하는 문자만 허용하는 유효성검사 코드

By | 11월 20, 2015

* 실제로 이렇게 사용하는 것이 괜찮은가 하는 것은 잘 모르겠으나, 일단 한 번 구현해 보았다.
 

public static final Charset CHARSET_EUC_KR = Charset.forName("EUC-KR");
public static final String KSC5601_START_HEX = "A1A1"; //EUC-KR 코드페이지 내에서 KSC5601의 시작코드
public static final String KSC5601_END_HEX = "FEFE"; //EUC-KR 코드페이지 내에서 KSC5601의 종료코드
public static final int KSC5601_START_INT = Integer.parseInt(KSC5601_START_HEX, 16);
public static final int KSC5601_END_INT = Integer.parseInt(KSC5601_END_HEX, 16);
/**
 * 매개변수로 받은 바이트배열을 EUC-KR 문자열로 변환한 문자열의 문자(char)가 모두 KSC5601 코드페이지 범위에 속하면 true, 한 글자라도 속하지 않는 것이 있으면 false를 리턴한다.
 */
public static boolean isKSC5601String(byte[] srcBytes){
	if(LOG.isDebugEnabled()){
		LOG.debug("isKSC5601String(byte[]) > 매개변수로 받은 srcBytes(16진수 변환): "+Hex.encodeHexString(srcBytes).toUpperCase());
	}
	String srcString = null;
	try{
		srcString = new String(srcBytes, CHARSET_EUC_KR);
	}catch(UnsupportedEncodingException e){
		LOG.error("isKSC5601String(byte[]) > " + Hex.encodeHexString(srcBytes).toUpperCase() +"를 EUC-KR 로 변환 중 오류 발생", e);
	}
	return isKSC5601String(srcString);
}
/**
 * 매개변수로 받은 문자열의 문자(char)가 모두 KSC5601 코드페이지 범위에 속하면 true, 한 글자라도 속하지 않는 것이 있으면 false를 리턴한다.
 */
public static boolean isKSC5601String(String srcString){
	if(LOG.isDebugEnabled(){
		LOG.debug("======== KSC5601 범위:["+KSC5601_START_HEX+"("+KSC5601_START_INT+")~"+KSC5601_END_HEX+"("+KSC5601_END_INT+")]========")
	}
	boolean isAllValid = true; //전체 문자열 중 KSC5601에 적합하지 않은 문자가 존재하면 false
	for(int i=0; i<srcString.length(); i++){
		if(! isKSC5601String(srcString.charAt(i))){
			isAllValid = false;
			break;
		}
	}
	if(LOG.isDebugEnabled()){
		LOG.debug("## 문자열("+srcString+")의 KSC5601 적합 여부: "+isAllValid);
	}
	return isAllValid;
}
/**
 * 매개변수로 받은 char가 KSC5601 코드페이지 범위에 속하는 문자이면 true를, 아니면 false를 리턴한다.
 */
public static boolean isKSC5601Char(char c){
	String eachCharString = String.valueOf(c);
	String hex = null;
	try{
		hex = Hex.encodeHexString(eachCharString.getBytes(CHARSET_EUC_KR);
	}catch(UnsupportedEncodingException e){
		LOG.error("isKSC5601Char() > "+c+" 를 16진수로 변환 중 오류 발생", e);
	}
	int decimal = Integer.parseInt(hex, 16);
	boolean isValid = decimal >= KSC5601_START_INT && decimal <= KSC5601_END_INT;
	if(LOG.isDebugEnabled()){
		LOG.debug("변환된 문자:["+eachCharString+", 16진수:"+hex.toUpperCase()+", 10진수:"+decimal+"],\tKSC5601 적합 여부:"+isValid);
	}
	return isValid;
}

 
 
 
* 참고 링크
한글 완성형 코드 KSC5601 문자표 (풀버전)
KS X 1001 (구 KSC5601) 위키백과
조합형/완성형/유니코드의 모든 것
 
 
 

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments