vb6.0/vba [vb6.0/vba] 생 년, 월, 일, 입력하고 주민번호 뒷 자리 입력받아 검증까지...
페이지 정보
본문
주민번호 관련 해서 만들어 보았습니다.
지식인 http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=147839337 답변을 하고 나니 심심도 하고...
좀더 수정해서 올려 봅니다.
Sub 주민번호입력받아검증까지()
'// 아래는 배열형 변수
Dim lenH As Variant '// 년, 월, 일 의 최고 글자수
Dim dateH As Variant '// 년, 월, 일 의 Max
Dim lenL As Variant '// 년, 월, 일 의 최소 글자수
Dim dateL As Variant '// 년, 월, 일 의 Min
Dim codeCK As Variant '// 주민번호 체크용
Dim dateVal As Variant '// 입력받을 날자를 넣을 변수
'// 아래는 문자형 변수
Dim myDate As String '// 입력받을 날자
Dim myCode As String '// 입력받을 주민번호 뒷자리
Dim msg As String '// 메세지 출력에 사용
'// 아래는 숫자형 변수
Dim n As Long '// 순환문에 사용
Dim i As Long '// 주번 계산에 사용
'// 아래는 각 배열에 값을 넣어 줌
lenH = Split("4,2,2", ",") '// 날자의 최고 글자수
lenL = Split("4,1,1", ",") '// 날자의 최소 글자수
dateH = Split("2012,12,31", ",") '// 날자가 이보다 클수는 없다
dateL = Split("1900,1,1", ",") '// 날자가 이보다 작을 순 없다
codeCK = Split("2,3,4,5,6,7,8,9,2,3,4,5", ",") '// 주민번호 검증용 ....
'On Error Resume Next
reDate: '// 날자 입력 오류시 이곳으로 분기 함
'// 아래는 날자를 입력 받습니다. 날자 입력 형태는
'// 2012/1/1 또는 2012/01/01 이런 식으로 입력 받음
myDate = Application.InputBox("생년월일을 입력해 수세요...", "주번앞자리", Format(Date, "yyyy") & "/" & Format(Date, "mm") & "/" & Format(Date, "dd"), , , , , 2)
If myDate = "False" Then Exit Sub '// 취소를 누를경우 프로시져 종료
dateVal = Split(myDate, "/") '// 입력 받은 날자를 / 기준으로 잘라서 배열에 넣음
For n = 0 To 2 '// 날자는 년, 월, 일 이므로 배열이 0부터 시작하므로 0~2 즉 3번 순환
'// 아래는 각 배열(년, 월, 일)의 글자 수, 날자 값을 검증 하여 아닐경우 다시 입력 받음
If (Len(dateVal(n)) <> lenH(n) Or Len(dateVal(n)) <> lenL(n)) And (Val(dateVal(n)) > Val(dateH(n)) Or Val(dateVal(n)) < Val(dateL(n))) Then
msg = "날자 형태가 잘못 되었습니다." '// 출력할 메세지를 넣음
msg = msg & vbCr & " 다시 입력 하시겠습니까?" '// 출력할 메세지를 추가함
If MsgBox(msg, 64 + vbYesNo, "날자 오류!") = vbYes Then GoTo reDate '// 메세지를 출력하고 확인을 누르면 reDate로 분기
Exit Sub '// 취소를 누를 경우 프로시져 종료
Else
dateVal(n) = Format(Val(dateVal(n)), "00") '// 각 배열(년, 월, 일)이 정상이면 숫자를 2자리로 만들어 넣음
End If
Next '// 3회 순환 할때까지 배열 순환
myDate = Right(Join(dateVal, ""), 6) '// 입력받은 배열을 다시 합치고 오른쪽 6글자를 넣음
msg = "주민등록번호 앞자리는 " & myDate & " 입니다." '// 출력할 메세지 넣음
MsgBox msg '// 메세지 출력
reCode: '// 주민번호 뒷자리 7자리가 안될경우 분기할 곳
i = 0
myCode = Application.InputBox("주민번호를 입력해 수세요...", "주번뒷자리", "") '// 주민번호 입력 받음
If myCode = "False" Then Exit Sub '// 취소를 누를경우 프로시져 종료
If Len(myCode) <> 7 Then '// 7자가 아니면
MsgBox "다시 입력해 주세요" & vbCr & vbCr & "주민번호는 7자리 입니다." '// 메세지 출력
GoTo reCode '// 다시 입력 받음
End If
'// 7자 일경우
myCode = myDate & myCode '// 날자와 주민번호 합침
'// 아래는 입력받은 숫자 갯수보다 1개 작게 순환 즉 주민번호 12자 까지 순환
'// Len(myCode) - 1를 12로 바꾸어 주어도 됨
For n = 1 To Len(myCode) - 1
i = i + Mid(myCode, n, 1) * codeCK(n - 1) '// i에 각 숫자와 체크용 각 배열의 숫자를 곱해서 기존값에 추가함
Next
If Right(myCode, 1) = 11 - (i Mod 11) Then '// 주민번호 마지막 번호 검증하여 정상이면
MsgBox "정상적인 주민 번호로..." & vbCr & vbCr & Left(myCode, 6) & "-" & Right(myCode, 7) & "입니다." '// 완성된 주민번호 메세지 출력
Else '// 주민번호 검증에 실패 하면
msg = "주민번호 검증에 실패 하였습니다." '// 출력할 메세지를 넣음
msg = msg & vbCr & "주민번호 끝자리가 " & 11 - (i Mod 11) & "와 일치하지 않습니다." '// 출력할 메세지를 추가함
msg = msg & vbCr & "대한민국 사람이 아니거나 태어날 수 없는 사람 입니다." '// 출력할 메세지를 추가함
msg = msg & vbCr & vbCr & "다시 입력 하겠습니까?" '// 출력할 메세지를 추가함
If MsgBox(msg, 64 + vbYesNo, "검증 오류!") = vbYes Then GoTo reCode '// 메세지를 출력하고 홛인 단추를 누르면 reCode로 분기
End If
End Sub
첨부파일
-
생년,생월,생일주민번호_뒷_자리_입력받아_검증까지.xls (42.5K)
1회 다운로드 | DATE : 2020-01-30 00:23:56
- 이전글[vb6.0/vba/vb.net] 네이버 지도 API를 이용한 IP로 주소 검색 20.02.01
- 다음글[vb6.0/vba] 자막파일에서 텍스트 추출하기 20.01.15
댓글목록
등록된 댓글이 없습니다.