151 lines
5.9 KiB
C++
151 lines
5.9 KiB
C++
|
|
#pragma once
|
|
|
|
#include <hash_map>
|
|
|
|
// http://www.unicode.org/charts/
|
|
#define UNICODE_TYPE_ALL_START 0x0080 // 문자영역 전체
|
|
#define UNICODE_TYPE_ALL_END 0xFFFF
|
|
#define UNICODE_TYPE_NUM_START 0x0030 // 숫자
|
|
#define UNICODE_TYPE_NUM_END 0x0039
|
|
#define UNICODE_TYPE_ENG_BIG_START 0x0041 // 대문자
|
|
#define UNICODE_TYPE_ENG_BIG_END 0x005A
|
|
#define UNICODE_TYPE_ENG_SMALL_START 0x0061 // 소문자
|
|
#define UNICODE_TYPE_ENG_SMALL_END 0x007A
|
|
#define UNICODE_TYPE_HAN_SYLLABLES_START 0xAC00 // 가 ~ 힣
|
|
#define UNICODE_TYPE_HAN_SYLLABLES_END 0xD7A3
|
|
#define UNICODE_TYPE_SPECIAL_START 0x2100 // 특수문자
|
|
#define UNICODE_TYPE_SPECIAL_END 0x2AFF
|
|
#define UNICODE_TYPE_JPN_HIRAGANA_START 0x3040 // 히라가나
|
|
#define UNICODE_TYPE_JPN_HIRAGANA_END 0x309F
|
|
#define UNICODE_TYPE_JPN_KATAKANA_START 0x30A0 // 가타카나
|
|
#define UNICODE_TYPE_JPN_KATAKANA_END 0x30FF
|
|
#define UNICODE_TYPE_CJK_UNIFIED_START 0x4E00 // 한중일 통합 한자
|
|
#define UNICODE_TYPE_CJK_UNIFIED_END 0x9FBF
|
|
#define UNICODE_TYPE_CJK_COMP_START 0xF900 // 한중일 호환 한자
|
|
#define UNICODE_TYPE_CJK_COMP_END 0xFAFF
|
|
#define UNICODE_TYPE_SG_SPECIAL_A_START 0x002D // 싱가폴용 특별 허용문자
|
|
#define UNICODE_TYPE_SG_SPECIAL_A_END 0x002E
|
|
#define UNICODE_TYPE_SG_SPECIAL_B_START 0x0040 // 골뱅이 '@'
|
|
#define UNICODE_TYPE_SG_SPECIAL_B_END 0x0040
|
|
#define UNICODE_TYPE_SG_SPECIAL_C_START 0x005F // 언더바 '_'
|
|
#define UNICODE_TYPE_SG_SPECIAL_C_END 0x005F
|
|
#define UNICODE_TYPE_SG_SPECIAL_PASS_START 0x0021
|
|
#define UNICODE_TYPE_SG_SPECIAL_PASS_END 0x007F
|
|
#define UNICODE_TYPE_TH_START 0x0E01 // 태국어
|
|
#define UNICODE_TYPE_TH_THAI_END 0x0E5B
|
|
#define UNICODE_TYPE_TH_SPECIAL_A_START 0x0020 // 태국용 특별 허용문자
|
|
#define UNICODE_TYPE_TH_SPECIAL_A_END 0x0021
|
|
#define UNICODE_TYPE_TH_SPECIAL_B_START 0x0023
|
|
#define UNICODE_TYPE_TH_SPECIAL_B_END 0x0026
|
|
#define UNICODE_TYPE_TH_SPECIAL_C_START 0x0028
|
|
#define UNICODE_TYPE_TH_SPECIAL_C_END 0x002A
|
|
#define UNICODE_TYPE_TH_SPECIAL_D_START 0x002D
|
|
#define UNICODE_TYPE_TH_SPECIAL_D_END 0x002D
|
|
#define UNICODE_TYPE_TH_SPECIAL_E_START 0x0040
|
|
#define UNICODE_TYPE_TH_SPECIAL_E_END 0x0040
|
|
#define UNICODE_TYPE_TH_SPECIAL_F_START 0x005B
|
|
#define UNICODE_TYPE_TH_SPECIAL_F_END 0x005B
|
|
#define UNICODE_TYPE_TH_SPECIAL_G_START 0x005D
|
|
#define UNICODE_TYPE_TH_SPECIAL_G_END 0x005D
|
|
#define UNICODE_TYPE_TH_SPECIAL_H_START 0x005E
|
|
#define UNICODE_TYPE_TH_SPECIAL_H_END 0x005F
|
|
#define UNICODE_TYPE_RU_CYRILLIC_START 0x0400
|
|
#define UNICODE_TYPE_RU_CYRILLIC_END 0x04FF
|
|
#define UNICODE_TYPE_EU_SPECIAL_A_START 0x005F // 언더바 '_'
|
|
#define UNICODE_TYPE_EU_SPECIAL_A_END 0x005F
|
|
#define UNICODE_TYPE_EU_SPECIAL_B_START 0x002D // 대쉬 '-'
|
|
#define UNICODE_TYPE_EU_SPECIAL_B_END 0x002D
|
|
#define UNICODE_TYPE_EU_SPECIAL_C_START 0x0040 // 골뱅이 '@'
|
|
#define UNICODE_TYPE_EU_SPECIAL_C_END 0x0040
|
|
#define UNICODE_TYPE_EU_SPECIAL_D_START 0x002E // 골뱅이 '.'
|
|
#define UNICODE_TYPE_EU_SPECIAL_D_END 0x002E
|
|
|
|
#define IS_IN_RANGE(nMin,nMax,nValue) (nMin <= nValue && nMax >= nValue)
|
|
|
|
enum STRING_CHECK_TYPE
|
|
{
|
|
CHECK_TYPE_ALL = 1,
|
|
CHECK_TYPE_NUMBER = (1<<1),
|
|
CHECK_TYPE_ENG = (1<<2),
|
|
CHECK_TYPE_HAN = (1<<3),
|
|
CHECK_TYPE_SPECIAL = (1<<4),
|
|
CHECK_TYPE_JPN = (1<<5),
|
|
CHECK_TYPE_CJK_UNIFIED = (1<<6),
|
|
CHECK_TYPE_CJK_COMP = (1<<7),
|
|
CHECK_TYPE_SG_SPECIAL = (1<<8),
|
|
CHECK_TYPE_SG_PASS_SPECIAL = (1<<9),
|
|
CHECK_TYPE_TH = (1<<10),
|
|
CHECK_TYPE_TH_SPECIAL = (1<<11),
|
|
CHECK_TYPE_RU = (1<<12),
|
|
CHECK_TYPE_EU = (1<<13),
|
|
};
|
|
|
|
#define ALLOW_STRING_DEFAULT_ENG CHECK_TYPE_ENG | CHECK_TYPE_NUMBER
|
|
#define ALLOW_STRING_DEFAULT_KO ALLOW_STRING_DEFAULT_ENG | CHECK_TYPE_HAN
|
|
#define ALLOW_STRING_DEFAULT_JP ALLOW_STRING_DEFAULT_ENG | CHECK_TYPE_SPECIAL | CHECK_TYPE_JPN | CHECK_TYPE_CJK_UNIFIED
|
|
#define ALLOW_STRING_CHARACTERNAME_ENG CHECK_TYPE_ENG
|
|
#define ALLOW_STRING_DEFAULT_CH ALLOW_STRING_DEFAULT_ENG | CHECK_TYPE_ALL
|
|
#define ALLOW_STRING_DEFAULT_TW ALLOW_STRING_DEFAULT_ENG | CHECK_TYPE_CJK_UNIFIED
|
|
#define ALLOW_STRING_LOGIN_SG ALLOW_STRING_DEFAULT_ENG | CHECK_TYPE_SG_SPECIAL
|
|
#define ALLOW_STRING_PASS_SG ALLOW_STRING_DEFAULT_ENG | CHECK_TYPE_SPECIAL | CHECK_TYPE_SG_PASS_SPECIAL
|
|
#define ALLOW_STRING_DEFAULT_SG ALLOW_STRING_DEFAULT_ENG
|
|
#define ALLOW_STRING_DEFAULT_TH ALLOW_STRING_DEFAULT_ENG | CHECK_TYPE_TH
|
|
#define ALLOW_STRING_LOGIN_TH ALLOW_STRING_DEFAULT_ENG | CHECK_TYPE_TH | CHECK_TYPE_TH_SPECIAL
|
|
#define ALLOW_STRING_DEFAULT_RU CHECK_TYPE_NUMBER | CHECK_TYPE_RU
|
|
#define ALLOW_STRING_DEFAULT_EU ALLOW_STRING_DEFAULT_ENG | CHECK_TYPE_EU
|
|
|
|
#if defined(_KR) || defined(_KRAZ)
|
|
#define ALLOW_STRING_DEFAULT ALLOW_STRING_DEFAULT_KO
|
|
#elif defined(_US)
|
|
#define ALLOW_STRING_DEFAULT ALLOW_STRING_DEFAULT_ENG
|
|
#elif defined(_JP)
|
|
#define ALLOW_STRING_DEFAULT ALLOW_STRING_DEFAULT_JP
|
|
#elif defined(_CH)
|
|
#define ALLOW_STRING_DEFAULT ALLOW_STRING_DEFAULT_CH
|
|
#elif defined(_TW)
|
|
//rlkt 2016
|
|
#define ALLOW_STRING_DEFAULT ALLOW_STRING_DEFAULT_TW//ALLOW_STRING_DEFAULT_TW
|
|
#elif defined(_SG)
|
|
#define ALLOW_STRING_DEFAULT ALLOW_STRING_DEFAULT_SG
|
|
#elif defined(_TH)
|
|
#define ALLOW_STRING_DEFAULT ALLOW_STRING_DEFAULT_TH
|
|
#elif defined(_ID)
|
|
#define ALLOW_STRING_DEFAULT ALLOW_STRING_DEFAULT_ENG
|
|
#elif defined(_RU)
|
|
#define ALLOW_STRING_DEFAULT ALLOW_STRING_DEFAULT_RU
|
|
#elif defined(_EU)
|
|
#define ALLOW_STRING_DEFAULT ALLOW_STRING_DEFAULT_EU
|
|
#else
|
|
#define ALLOW_STRING_DEFAULT ALLOW_STRING_DEFAULT_KO
|
|
#endif // _KO, _US, _JP, _CH, _TW
|
|
|
|
|
|
typedef struct MIN_MAX
|
|
{
|
|
wchar_t nMin, nMax;
|
|
MIN_MAX(wchar_t min, wchar_t max) : nMin(min), nMax(max) {};
|
|
MIN_MAX() : nMin(0), nMax(0) {};
|
|
|
|
}MIN_MAX;
|
|
|
|
typedef stdext::hash_multimap<STRING_CHECK_TYPE, MIN_MAX> HASH_MAP_ALLOW_STRING;
|
|
typedef stdext::hash_multimap<STRING_CHECK_TYPE, MIN_MAX>::const_iterator HASH_MAP_ALLOW_STRING_I;
|
|
|
|
class CDNCountryUnicodeSet
|
|
{
|
|
|
|
private:
|
|
HASH_MAP_ALLOW_STRING m_mapAllowString;
|
|
|
|
public:
|
|
CDNCountryUnicodeSet();
|
|
~CDNCountryUnicodeSet();
|
|
|
|
bool Check(const wchar_t* pChr, DWORD dwCheckType = ALLOW_STRING_DEFAULT);
|
|
|
|
private:
|
|
bool IsExist(wchar_t pChr, STRING_CHECK_TYPE eType);
|
|
};
|
|
|
|
extern CDNCountryUnicodeSet g_CountryUnicodeSet;
|