[ASP] 포맷 및 유효성 체크 함수

Classic ASP 데이터형 포맷 및 유효성 체크 함수




'***************************************************************
'* Function Name	   : fn_IsValidDate
'* Function 기능 	   : 날짜 유효성 체크
'* parameter 설명	   : 날짜 문자열(yyyymmdd)
'* return값 설명	   : 유효한날짜 여부(true/false)
'***************************************************************
FUNCTION fn_IsValidDate(sDate)
    dim sYy
    dim sMm
    dim sDd

    sYy 			= mid(sDate,1,4)
    sMm 			= mid(sDate,5,2)
    sDd 			= mid(sDate,7)
    
    sDate 			= sYy & "-" & sMm & "-" & sDd
    if isDate(sDate) then
        fn_IsValidDate = true
    else
        fn_IsValidDate = false
    end if
END FUNCTION

'***************************************************************
'* Function Name	   : fn_IsValidHHMM
'* Function 기능 	   : 시간 유효성 체크
'* parameter 설명	   : 시간 문자열(hhmm)
'* return값 설명	   : 유효한시간 여부(true/false)
'***************************************************************
FUNCTION fn_IsValidHHMM(sTime)
    dim sHh
    dim sMm

    sHh 			= mid(sTime,1,2)
    sMm 			= mid(sTime,3,2)
    
    If (isNumeric(sHh) And (CInt(sHh) >= 0) And (CInt(sHh) <= 23)) And _
       (isNumeric(sMm) And (CInt(sMm) >= 0) And (CInt(sMm) <= 59)) Then
        fn_IsValidHHMM = true
    else
        fn_IsValidHHMM = false
    End If   
END FUNCTION

'***************************************************************
'* Function Name	   : fn_IsValidHHMMSS
'* Function 기능 	   : 시간 유효성 체크
'* parameter 설명	   : 시간 문자열(hhmmss)
'* return값 설명	   : 유효한시간 여부(true/false)
'***************************************************************
FUNCTION fn_IsValidHHMMSS(sTime)
    dim sHh
    dim sMm

    sHh 			= mid(sTime,1,2)
    sMm 			= mid(sTime,3,2)
    sSs 			= mid(sTime,5,2)
    
    If (isNumeric(sHh) And (CInt(sHh) >= 0) And (CInt(sHh) <= 23)) And _
       (isNumeric(sMm) And (CInt(sMm) >= 0) And (CInt(sMm) <= 59)) And _
       (isNumeric(sSs) And (CInt(sSs) >= 0) And (CInt(sSs) <= 59)) Then
        fn_IsValidHHMMSS = true
    else
        fn_IsValidHHMMSS = false
    End If   
END FUNCTION

'***************************************************************
'* Function Name	   : fn_UrlEncode
'* Function 기능 	   : 문자열 encoding
'* parameter 설명	   : 문자열
'* return값 설명	   : 인코딩된 문자열
'***************************************************************
FUNCTION fn_UrlEncode(sStr)
    fn_UrlEncode	= Server.URLEncode(sStr)
END FUNCTION

'***************************************************************
'* Function Name	   : fn_URLDecode
'* Function 기능 	   : 문자열 decoding
'* parameter 설명	   : 문자열
'* return값 설명	   : 디코딩된 문자열
'***************************************************************
FUNCTION fn_UrlDecode(sStr)
    Dim sRet, sTemp, i, ReX, sChar
    
    ' 정규 표현식, %00 ~ %FF 까지 걸러냄
    Set ReX = New RegExp
    ReX.IgnoreCase = True
    ReX.Pattern = "^%[0-9a-f][0-9a-f]$"
    
    ' 변수 초기화
    sStr = Replace(sStr, "+", " ") ' URLDecode는 공백을 더하기 기호로 바꿈
    sRet = ""
    
    For i = 1 To Len(sStr)
        sChar = Mid(sStr, i, 3) ' 세 글자씩 끊어 와서
        If ReX.Test(sChar) Then ' %00 ~ %FF 형태일 때
            If CInt("&H" & Mid(sStr, i + 1, 2)) < 128 Then
                ' 아스키문자인 경우, 즉 기호 등 한글이 아닌 경우
                sRet = sRet & Chr(CInt("&H" & Mid(sStr, i + 1, 2)))
                i = i + 2 ' 잘라낸 만큼 뒤로 이동
            Else
                ' 한글인 경우 뒤의 세글자를 더 잘라 옴
                sRet = sRet & Chr(CInt("&H" & Mid(sStr, i + 1, 2) & Mid(sstr, i + 4, 2)))
                i = i + 5 ' 잘라낸 만큼 뒤로 이동
            End If
        Else
            ' 인코딩 되지 않은 경우. 대개 영문자나 숫자
            sRet = sRet & Mid(sStr, i, 1)
        End If
    Next
    
    fn_UrlDecode = sRet

END FUNCTION
    
'***************************************************************
'* Function Name	   : fn_Len
'* Function 기능 	   : 한글 포함하는 문자열의 길이
'* parameter 설명	   : sStr :문자열
'* return값 설명	   : 길이
'***************************************************************
Function fn_Len(sStr)
    dim nLen, nResult
    
    nLen						= Len(sStr)
    nResult						= 0
    
    for i = 1 to nLen
        charAt = Mid(sStr, i, 1) 
        if Asc(charAt) > 0 and Asc(charAt) < 255 then 
            nResult 			= nResult + 1 
        else 
            nResult 			= nResult + 2 
        end if 
    next

    fn_Len						= nResult	
End Function

'***************************************************************
'* Function Name	   : fn_StrCut
'* Function 기능 	   : 문자열 자르기
'* parameter 설명	   : sStr  : 문자열    nLength:길이한도
'*                       sTrail:자른후 뒤에 붙일 문자열
'*                       bUse  :trail 사용여부(bool)
'* return값 설명	   : 없음
'***************************************************************
FUNCTION fn_StrCut(sStr,      nLength,    sTrail,    bUse)
    if len(sStr) < nLength then
        fn_StrCut = sStr
        exit FUNCTION
    end if
    
    sStr = fn_Substr(sStr, 1, nLength)
    if bUse 		= true then
        sStr 			= sStr & sTrail
    end if
    fn_StrCut = sStr
END FUNCTION

'***************************************************************
'* Function Name	   : fn_Substr
'* Function 기능 	   : 한글 포함하는 문자열의 길이
'* parameter 설명	   : sStr :문자열
'* return값 설명	   : 길이
'***************************************************************
Function fn_Substr(sStr, nFrom, nTo)
    dim nLen, nResult, nPos, nStartPos, nEndPos
    nLen						= fn_Len(sStr)
    nPos						= 0
    nStartPos					= 0
    nEndPos						= 0

    if nFrom > nLen then
        sResult					= ""
    else	
        if nFrom >= 1 Then
            for i = 1 to nFrom
                if nFrom <> 0 and (Asc(Mid(sStr, i, 1)) > 255 or Asc(Mid(sStr, i, 1)) < 0) then
                    nPos				= nPos + 1
                end if
            next	
        End If
        
        nStartPos					= nFrom - nPos

        if nStartPos = 0 Then
            nStartPos	= 1
        End If	
    
        nPos						= 0
        if nTo > nLen then
            nEndPos					= Len(sStr)
        else
            for i = 1 to nTo
                if nFrom <> 0 and (Asc(Mid(sStr, i, 1)) > 255 or Asc(Mid(sStr, i, 1)) < 0) then
                    nTo					= nTo - 2
                Else
                    nTo					= nTo - 1
                end if
                
                nPos				= nPos + 1

                if nTo <= 0 Then 
                    exit for
                End If	
            next	
        
            nEndPos					= nPos
        end if	

        nEndPos						= nEndPos - nStartPos
        sResult						= Mid(sStr, CInt(nStartPos), CInt(nEndPos))
    end if
    
    fn_Substr					= sResult
End Function

 
'***************************************************************
'* Function Name	   : fn_GetLong
'* Function 기능 	   : 정수형 금액숫자의 ',' 포맷 생성
'* parameter 설명	   : sLongValue :정수형 금액숫자
'* return값 설명	   : 123,456,789 형태의 문자열
'***************************************************************
Function fn_GetLong(nLongValue)
        dim sResult

        If isNull(nLongValue) Then
            nLongValue	= 0
        End If

        sResult					= FormatNumber(CDbl(nLongValue), 0)
        
        fn_GetLong				= sResult
End Function

'***************************************************************
'* Function Name	   : fn_GetDouble
'* Function 기능 	   : 실수형 금액숫자의 ',' 포맷 생성
'* parameter 설명	   : nDoubleValue :실수형 금액숫자, nFrac : 소수점 이하 자리수
'* return값 설명	   : 123,456,789.00 형태의 문자열
'***************************************************************
Function fn_GetDouble(nDoubleValue, nFrac)
        dim sResult
        
        If isNull(nDoubleValue) Then
            nDoubleValue	= 0
        End If
        
        sResult					= FormatNumber(CDbl(nDoubleValue), nFrac)
        
        fn_GetDouble			= sResult
End Function

'***************************************************************
'* Function Name	   : fn_GetDate
'* Function 기능 	   : 날짜 포맷 생성
'* parameter 설명	   : sDate :날짜 문자열
'* return값 설명	   : 0000/00/00 형태의 문자열
'***************************************************************
Function fn_GetDate(sDate)
        dim sTempValue, sResult, nLen, sSeparate

        if isNull(sDate) or Trim(sDate) = "" then
            sResult					= ""
        else
            sSeparate				= "-"	
            sTempValue				= Trim(sDate)
            sTempValue				= Replace(Replace(sTempValue, "-", ""), "/", "")

            nLen					= Len(sTempValue)
        
            '                                   1234567890
            sTempValue			= sTempValue & "          "
        
            sResult				= Mid(sTempValue, 1, 4) & sSeparate & Mid(sTempValue, 5, 2) & sSeparate & Mid(sTempValue, 7, 2)
            sResult				= Trim(sResult)
        end if
        
        fn_GetDate				= sResult
End Function

'***************************************************************
'* Function Name	   : fn_GetHhmm
'* Function 기능 	   : 시간 포맷 생성
'* parameter 설명	   : sTime :날짜 문자열
'* return값 설명	   : 12:25 형태의 문자열
'***************************************************************
Function fn_GetHhmm(sTime)
        dim sTempValue, sResult, nLen
        
        sTempValue				= Trim(sTime)
        nLen					= Len(sTempValue)
        
        if (sTempValue = "" or nLen = 0) then
            sResult				= ""
        else
            '                                   1234
            sTempValue			= sTempValue & "    "
        
            sResult				= Mid(sTempValue, 1, 2) & ":" & Mid(sTempValue, 3, 2)
            sResult				= Trim(sResult)
        end if
        
        fn_GetHhmm				= sResult
End Function

'***************************************************************
'* Function Name	   : fn_GetHhmmss
'* Function 기능 	   : 시간 포맷 생성
'* parameter 설명	   : sTime :날짜 문자열
'* return값 설명	   : 12:25:12 형태의 문자열
'***************************************************************
Function fn_GetHhmmss(sTime)
        dim sTempValue, sResult, nLen
        
        sTempValue				= Trim(sTime)
        nLen					= Len(sTempValue)
        
        if (sTempValue = "" or nLen = 0) then
            sResult				= ""
        else
            '                                   123456
            sTempValue			= sTempValue & "      "
        
            sResult				= Mid(sTempValue, 1, 2) & ":" & Mid(sTempValue, 3, 2) & ":" & Mid(sTempValue, 5, 2)
            sResult				= Trim(sResult)
        end if
        
        fn_GetHhmmss			= sResult
End Function

'***************************************************************
'* Function Name	   : fn_GetSdNo
'* Function 기능 	   : 사업자등록번호 포맷 생성
'* parameter 설명	   : sTime 사업자등록번호 문자열
'* return값 설명	   : 600-00-00000 형태의 문자열
'***************************************************************
Function fn_GetSdNo(sStr)
        dim sTempValue, sResult, nLen
        
        sTempValue				= Trim(sStr)
        nLen					= Len(sTempValue)
        
        if (sTempValue = "" or nLen = 0) then
            sResult				= ""
        else
            '                                   1234567890
            sTempValue			= sTempValue & "          "
        
            sResult				= Mid(sTempValue, 1, 3) & "-" & Mid(sTempValue, 4, 2) & "-" & Mid(sTempValue, 6, 5)
            sResult				= Trim(sResult)
        end if
        
        fn_GetSdNo					= sResult
End Function

'***************************************************************
'* Function Name	   : fn_GetIdNo
'* Function 기능 	   : 주민등록번호 포맷 생성
'* parameter 설명	   : sTime 주민등록번호 문자열
'* return값 설명	   : 123456-1234567 형태의 문자열
'***************************************************************
Function fn_GetIdNo(sStr)
        dim sTempValue, sResult, nLen
        
        sTempValue				= Trim(sStr)
        nLen					= Len(sTempValue)
        
        if (sTempValue = "" or nLen = 0) then
            sResult				= ""
        elseif (Mid(sTempValue, 1, 1) = "F") then  '외국인은 포맷 설정 안함
            sResult				= sStr
        else
            '                                   1234567890123
            sTempValue			= sTempValue & "             "
        
            sResult				= Mid(sTempValue, 1, 6) & "-" & Mid(sTempValue, 7, 7)
            sResult				= Trim(sResult)
        end if
        
        fn_GetIdNo					= sResult
End Function

 
  
'/***********************************************************************
'*  Function Name : fn_RemoveChar
'*  Function 기능 : 문자열에서 특정 문자 삭제
'*  parameter 설명: sStr : 문자열, sChr :제거할 문자
'*  return값 설명 : 특정문자를 제거한 문자열값
'************************************************************************/

Function fn_RemoveChar(sStr, sChr) 
    dim nlen 	
    dim sTemp	
    nlen  = Len(sStr)
    sTemp = ""
    
    For i=1 to nlen 
        If Mid(sStr,i , 1) <> sChr Then
            sTemp = sTemp & Mid(sStr, i, 1)
        End If
    Next
    
    fn_RemoveChar = sTemp
End Function


'/***********************************************************************
'*  Function Name : fn_RemoveChar
'*  Function 기능 : 문자열에서 특정 문자 삭제
'*  parameter 설명: sStr : 문자열, sChr :제거할 문자
'*  return값 설명 : 특정문자를 제거한 문자열값
'************************************************************************/
Function fn_ObjsRemoveChar(objs, sChr) 
    dim nlen 	
    dim sTemp	

    For j=1 to ubound(objs)
        nlen  = Len( objs(j) )
        sTemp = ""
        
        For i=1 to nlen 
            If Mid(sStr,i , 1) <> sChr Then
                sTemp = sTemp & Mid(sStr, i, 1)
            End If
        Next
        objs(j) = sTemp
    Next
End Function


 

'/***********************************************************************
'*  Function Name : fn_ArrayCmp
'*  Function 기능 : 배열의 값에서 문자열 찾기
'*  parameter 설명: sStr : 찾을문자열, aStr:문자열 배열
'*  return값 설명 : True : 있음, False :없음
'************************************************************************/
Function fn_ArrayCmp(sStr, aStr)
    Dim str

    For Each str In aStr
        If sStr 				= str Then
        	fn_ArrayCmp 		= True
            Exit Function
        End If
    Next
    fn_ArrayCmp 				= False
End Function 

'/***********************************************************************
'*  Function Name : fn_JuMinChk
'*  Function 기능 : 주민등록번호 체크
'*  parameter 설명: sNo : 검사할문자열
'*  return값 설명 : True : 정상,  False :오류
'************************************************************************/
Function fn_JuMinChk(sNo)
    Dim sResult, sStr, sChkdigit, nHap, nChk

    If Len( sNo ) <> 13 Then
        fn_JuMinChk = false
        Exit Function
    End If 

    sStr = Array("5", "6", "7", "8")
    If Mid(sNo, 1, 1) = "F" Then
        fn_JuMinChk 			= true
        Exit Function
    End If
    
    If fn_ArrayCmp(Mid(sNo, 7, 1), sStr ) Then
        sResult = True
        fn_JuMinChk 			= true
        Exit Function
    End If

    sChkDigit 					= "234567892345"
    nHap 						= 0
    
    For i = 1 to 12 
        If Mid(sNo, i, 1) > "9" or Mid(sNo, i, 1) < "0" Then
            sResult 			= False
            fn_JuMinChk 		= sResult
            Exit Function
        End if
        
        nChk 					= CInt(Mid(sChkDigit, i, 1)) * CInt(Mid(sNo, i, 1))
        nHap = nHap + nChk
    Next
    
    nHap 						= nHap MOD 11

    If nHap = 1 Then 
        nHap 					= 11
    End If
    If nHap 					= 0 Then 
        nHap = 10
    End If
    
    If CInt(Mid(sNo, 13, 1)) = (11 - nHap) Then
        sResult 				= True
    Else
        sResult 				= False
    End If    

    fn_JuMinChk 				= sResult
End Function

 

 
'***************************************************************
'* Function Name	   : fn_PadL
'* Function 기능 	   : 문자열을 우측정렬로 위치시키고 좌측의 여백은 특정 문자로 채운다.
'* parameter 설명	   : sString: 입력문자열, nNum :총 문자열수, sChar: 여백에 채울 문자
'* return값 설명	   : fn_PadL('ABCDE', 8, ' ') =>'   ABCDE'
'***************************************************************
Function fn_PadL(sString, nNum, sChar)
    Dim sResult,sStr, nDis
    sStr 						= sString
    If Len(sString) >= nNum Then
        sResult 				= Mid(sStr, 1, nNum) 
    else
        nDis 					= nNum - Len(sString)

        For i = 1 to nDis 
            sStr 				= sChar & sStr
        Next

        sResult 				= sStr      
    End If
    
    fn_PadL 					= sResult
End Function

 

'***************************************************************
'* Function Name	   : fn_PadR
'* Function 기능 	   : 문자열을 좌측정렬로 위치시키고 우측의 여백은 특정 문자로 채운다.
'* parameter 설명	   : sString: 입력문자열, nNum :총 문자열수, sChar: 여백에 채울 문자
'* return값 설명	   : fn_PadR('ABCDE', 8, ' ') =>'ABCDE   '
'***************************************************************
Function fn_PadR(sString, nNum, sChar)
    Dim sResult,sStr, nDis
    sStr 						= sString
    If Len(sString) >= nNum Then
        sResult 				= Mid(sStr, 1, nNum) 
    else
        nDis 					= nNum - Len(sString)
        For i = 1 to nDis 
            sStr 				= sStr & sChar
        Next
        sResult 				= sStr      
    End If
    
    fn_PadR 					= sResult
End Function

 

댓글 남기기