침실3_EXCEL

[EXCEL] 주민등록 번호 함수 만들기

다식군! 2025. 6. 1. 10:51
반응형

주민등록 번호 함수 만들기

주민번호 마스킹/나이/성별/고향의 정보로 표시하는 함수 생성

Function 주민번호(대상셀 As Range, Optional 모드 As Integer = -1) As Variant
    Dim 번호 As String
    Dim 생년 As Integer, 생월 As Integer, 생일 As Integer
    Dim 성별코드 As Integer, 지역코드 As Integer
    Dim 현재 As Date, 생일날짜 As Date
    Dim 나이 As Integer
    Dim 성별 As String, 지역 As String

    On Error GoTo 오류처리

    번호 = Replace(Trim(CStr(대상셀.Value)), "-", "")

    If Len(번호) <> 13 Or Not IsNumeric(번호) Then
        주민번호 = "잘못된 형식"
        Exit Function
    End If

    ' 생년월일 및 코드 추출
    생년 = Val(Left(번호, 2))
    생월 = Val(Mid(번호, 3, 2))
    생일 = Val(Mid(번호, 5, 2))
    성별코드 = Val(Mid(번호, 7, 1))
    지역코드 = Val(Mid(번호, 8, 2))

    ' 연도 보정
    Select Case 성별코드
        Case 1, 2, 5, 6: 생년 = 1900 + 생년
        Case 3, 4, 7, 8: 생년 = 2000 + 생년
        Case Else
            주민번호 = "잘못된 성별코드"
            Exit Function
    End Select

    ' 생일 유효성 검사
    If Not IsDate(DateSerial(생년, 생월, 생일)) Then
        주민번호 = "잘못된 생년월일"
        Exit Function
    End If
    생일날짜 = DateSerial(생년, 생월, 생일)
    현재 = Date

    ' 만나이 계산
    나이 = Year(현재) - Year(생일날짜)
    If Month(현재) < Month(생일날짜) Or (Month(현재) = Month(생일날짜) And Day(현재) < Day(생일날짜)) Then
        나이 = 나이 - 1
    End If

    ' 성별
    Select Case 성별코드
        Case 1, 3, 5, 7: 성별 = "남"
        Case 2, 4, 6, 8: 성별 = "여"
        Case Else: 성별 = "알수없음"
    End Select

    ' 지역 추정
    Select Case 지역코드
        Case 0 To 8: 지역 = "서울"
        Case 9 To 12: 지역 = "부산"
        Case 13 To 15: 지역 = "인천"
        Case 16 To 25: 지역 = "경기"
        Case 26 To 34: 지역 = "강원"
        Case 35 To 39: 지역 = "충북"
        Case 40 To 41: 지역 = "대전"
        Case 42 To 47: 지역 = "충남"
        Case 48 To 54: 지역 = "전북"
        Case 55 To 66: 지역 = "전남"
        Case 67 To 69: 지역 = "대구"
        Case 70 To 81: 지역 = "경북"
        Case 82 To 84: 지역 = "경남"
        Case 85: 지역 = "울산"
        Case 86 To 91: 지역 = "경남"
        Case 92 To 95: 지역 = "제주"
        Case 96: 지역 = "세종"
        Case 97 To 99: 지역 = "불명"
        Case Else: 지역 = "알수없음"
    End Select

    ' 출력 모드별 결과 반환
    Select Case 모드
        Case 0
            주민번호 = Left(번호, 6) & "-" & Mid(번호, 7, 1) & "******"
        Case 1
            주민번호 = 나이
        Case 2
            주민번호 = 성별
        Case 3
            주민번호 = 지역
        Case Else
            주민번호 = 나이 & "세/" & 성별 & "/" & 지역
    End Select
    Exit Function

오류처리:
    주민번호 = "유효하지 않은 번호"
End Function

Tip. 2020년 10월 이후는 고향 정보가 삭제 됨

 

입력값 (000101-1010000) 출 력 값
=주민번호(셀,0) 000101-1******
=주민번호(셀,1) 125
=주민번호(셀,2)
=주민번호(셀,3) 서울

 

함수로 만들려면,

   
0 =IF(LEN(SUBSTITUTE(A1,"-",""))=13, LEFT(SUBSTITUTE(A1,"-",""),6) & "-" & MID(SUBSTITUTE(A1,"-",""),7,1) & "******", "형식오류")
1 =IF(LEN(SUBSTITUTE(A1,"-",""))=13,
    LET(
        ssn, SUBSTITUTE(A1,"-",""),
        yy, MID(ssn,1,2),
        mm, MID(ssn,3,2),
        dd, MID(ssn,5,2),
        gender, MID(ssn,7,1),
        yearPrefix, IF(gender=1,"19", IF(gender=2,"19", IF(gender=3,"20", IF(gender=4,"20", "19")))),
        birthYear, yearPrefix & yy,
        birthDate, DATE(birthYear, mm, dd),
        today, TODAY(),
        age, YEAR(today) - YEAR(birthDate) - IF(TODAY()<DATE(YEAR(today), MONTH(birthDate), DAY(birthDate)), 1, 0),
        age
    ),
"형식오류")
2 =IF(LEN(SUBSTITUTE(A1,"-",""))=13,
   IF(ISNUMBER(FIND(MID(SUBSTITUTE(A1,"-",""),7,1),"1357")),"남","여"),
"형식오류")
3  

 

반응형