🐾   [golang] 주민등록번호와 외국인등록번호 유효성 검사 모듈 업데이트

registration-number

주민등록번호와 외국인번호 유효성 검사하는 모듈

설치방법

go get -u github.com/YooGenie/validate-registration-number

Description

주민등록번호 입력만 해서 유효성 검사(regNum 숫자 13자리 입력)

func ResidentRegistrationNumber(regNum string) bool {
return bool
}

배경

2020년 10월 이후 주민등록번호, 외국인등록번호의 규칙이 변경되었다. 뒤자리 6자리가 임의번호로 바뀌었다.

내용

  • 앞자리 2010 이후인 사람은 7번째자리수가 3,4,7,8만 가능하도록 했다.
  • 3 (한국남성), 4(한국여성), 7(외국인남성), 8(외국인여성)이다.
var arrCheckNum = []int{2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5}

nowDate := time.Now().Format("0601")

sum := 0
for i := 0; i < 12; i++ {
r, _ := strconv.Atoi(string(regNum[i]))
sum += r * arrCheckNum[i]
}

lastValue, _ := strconv.Atoi(string(regNum[12]))
verificationCode := 11 - (sum % 11)

if regNum[6:7] == "1" || regNum[6:7] == "2" || regNum[6:7] == "3" || regNum[6:7] == "4" {
seventhDigit := regNum[6:7] == "3" || regNum[6:7] == "4"
if regNum[0:4] >= "2010" && regNum[0:4] <= nowDate && (seventhDigit) {
return true
}
if verificationCode >= 10 && verificationCode <= 11 {
verificationCode = verificationCode - 10
}
if lastValue == verificationCode {
return true
}
}
return false

다양한 문제점

  • 2020년 10월 이후가 임의 숫자가 되면서 뚫리는 경우가 많았다. 그래서 아예 그냥 하나하나 제한을 뒀다.
  • 앞자리 4자리가 중요했다. 2010보다 크고 현재날짜보단 작으면 뒷자리 6개가 임의번호라서 통과할 수 있게 했다.
  • 7번째 자리도 1,2,3,4가 올 수 있도록 했다.
  • 2020년 10월 이후 뒷자리 6개가 한글인 경우도 뚫렸다. 그래서 추후 정규식을 통하여 숫자만 통과하도록 했다.

나의 생각

규칙이 없어지면서 고려해야할 점들이 더 많아졌다ㅠㅠ 그래서 테스트 코드를 다양하게 만들었다.

​ ​ ​