2010년 6월 18일 금요일

주민번호 / 사업자번호 체크

Public Function  RegNoCheck(sID As String) As Boolean

    Dim Weight  As String '1~12자리까지 가중치
    Dim Total   As Integer
    Dim Chk     As Integer
    Dim Rmn     As Integer
    Dim i       As Integer
    Dim dt      As Integer
    Dim wt      As Integer
   
    RegNoCheck= False
   
    sID = Trim$(sID)
    If sID = "" Then Exit Function '공백인지 확인합니다.   

    If Mid$(sID, 7, 1) = "-" Then sID = Left$(sID, 6) & Mid$(sID, 8)
    If Len(sID) <> 13 Then Exit Function '13자리인지 확인합니다.

   
    Chk = Val(Right$(sID, 1))

    Weight = "234567892345" '가중치 값 대입


    Total = 0
    For i = 1 To 12
        dt = Val(Mid$(sID, i, 1)) '주민등록번호

        wt = Val(Mid$(Weight, i, 1)) '가중치

        Total = Total + (dt * wt)
    Next i

    Rmn = 11 - (Total Mod 11)
   
    If Rmn > 9 Then Rmn = Rmn Mod 10
   
    RegNoCheck = IIf(Rmn = Chk, True, False)
End Function

 

 

Public Function TaxNoCheck(ByVal strNo As String) As Boolean


Const COMPNO_LEN           As Byte = 10 '  사업자번호의 길이
Dim blnRet                              As Boolean   '  결과값
Dim aryNo(COMPNO_LEN) As Byte      '  문자열 배열
Dim bytCntNo                          As Byte      '  루프변수
Dim intMod                               As Integer   '  나머지숫자
Dim intInt                                   As Integer   '  소수점이하 절사값
Dim intSub                                As Integer   '  계산결과

 

If (Len(Trim(strNo)) = COMPNO_LEN) Then          '  사업자번호의 길이가 10자리라면
       For bytCntNo = 1 To COMPNO_LEN                 '  루프를 돌면서 바이트배열을 만든다
               aryNo(bytCntNo) = Val(Mid(strNo, bytCntNo, 1))
       Next bytCntNo
       intMod = ((aryNo(1) * 1) + _

                        (aryNo(2) * 3) + _

                        (aryNo(3) * 7) + _

                        (aryNo(4) * 1) + _

                        (aryNo(5) * 3) + _

                        (aryNo(6) * 7) + _

                        (aryNo(7) * 1) + _

                        (aryNo(8) * 3)) Mod COMPNO_LEN    '   나머지 숫자를 구한다
      intInt = Int(aryNo(9) * 5 / COMPNO_LEN)             '   소숫점이하를 절사하여 구한다
      intSub = (aryNo(9) * 5) - (intInt * 10)                      '   계산결과를 구한다
      intSub = (intMod + intInt + intSub) Mod 10
      intSub = IIf((intSub = 0), 10, intSub)                      '  체크섬을 확인하여 진위를 판별한다
      blnRet = (aryNo(COMPNO_LEN) = (COMPNO_LEN - intSub))

Else
      blnRet = False
End If

 

TaxNoCheck= blnRet                                                      '  결과를 대입한다
End Function

댓글 없음:

댓글 쓰기