반응형
# 배경
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
반응형
'사이드 프로젝트 > 오픈소스' 카테고리의 다른 글
[golang] 주민등록번호 유효성 모듈Update - 한글은 통과되지 않게 하기 (0) | 2024.02.19 |
---|---|
[golang] 주민등록번호와 외국인등록번호 유효성 검사 모듈 업데이트 (0) | 2022.09.24 |
[golang] 주민등록번호와 외국인등록번호 유효성 검사 패키지 (0) | 2022.01.20 |
[golang] 사업자번호 유효성 검사하는 패키지 배포 (0) | 2022.01.16 |