괴발개발 성장기

사이드 프로젝트/오픈소스

[golang] 주민등록번호 유효성 모듈 Update - 태어나지 않은 사람은 통과되지 않는다.

지니유 2024. 2. 20. 09:38
반응형

 

 

 


# 배경

1993년생이 실수로 7번째자리 수를 3으로 했다. 그리고 나머지 수를 아무거나하니까 통과했다.

 

 

# 문제가 되는 등록번호

930905-3111111

 

# 원인

3,4인 경우 생년월이 20년 10월보다는 커야하고 현재 년,월보다는 작아야한다.

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

seventhDigit := regNum[6:7] == "3" || regNum[6:7] == "4"

if regNum[0:4] >= "2010" && regNum[0:4] <= nowDate && (seventhDigit) {
		return true
}

 

 

93이고 3이니까 2093년생으로 인식되어 통과가 되었다. 

휴먼에러는 고려하지 못했다.  

 

태어나지 않은 사람이 통과가 되는 오류를 범했다.

 

 

# 코드 수정

"20"+regNum[0:2] <= nowYear

 

이 조건을 추가했다.  생년월일연도가 현재 연도보다 작아야한다.

예를 들으면 2093 <= 2024 이니까 false이다.

 

 

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

seventhDigit := regNum[6:7] == "3" || regNum[6:7] == "4"

if regNum[0:4] >= "2010" && regNum[0:4] <= nowDate && "20"+regNum[0:2] <= nowYear && (seventhDigit) {
			return true
	}
if regNum[0:2] >= nowYear && (seventhDigit) {
			return false
	}

 

7번째 자리수가 3,4인데 태어난연도보다 현재연도가 작으면 태어나지 않은 사람이다. 그래서 false를 보내준다.

 

 

# 참조

https://github.com/YooGenie/validate-registration-number/issues/9

 

태어나지 않은 사람은 통과되지 않는다 · Issue #9 · YooGenie/validate-registration-number

 

github.com

 

 


 

반응형