괴발개발 성장기

Study/Go 언어

[Golang] 14세 미만 체크하는 코드

지니유 2023. 9. 11. 20:25
반응형

# 배경

기부금영수증을 신청할 때 14세 미만인 경우는 법적 대리인이 동의가 필요하다. 그래서 나이를 체크하는 코드를 만들었다.

 

# 코드 

func CheckUnderTheAgeOfFourteen(birthDate string, seventhDigit int64) bool {
	birthMonth := birthDate[2:4] // 생월(MM)
	birthDay := birthDate[4:6]   //생일
	birthYear, _ := strconv.Atoi(birthDate[:2])

	if seventhDigit == 1 || seventhDigit == 2 || seventhDigit == 5 || seventhDigit == 6 {
		birthYear = 1900 + birthYear
	}
	if seventhDigit == 3 || seventhDigit == 4 || seventhDigit == 7 || seventhDigit == 8 {
		birthYear = 2000 + birthYear
	}

	// 생년월일 문자열을 시간 형식으로 변환
	birthDateStr := fmt.Sprintf("%d%s%s", birthYear, birthMonth, birthDay)
	birthDate8, _ := time.Parse("20060102", birthDateStr)

	if birthDate8.Format("20060102") <= time.Now().Format("20060102") {
		// 현재 시간과 비교하여 14세 미만인지 확인
		ageLimit := time.Now().AddDate(-14, 0, 0) // 현재로부터 14년 전
		birthDate8.After(ageLimit)
		return birthDate8.After(ageLimit)
	} else {
		return false
	}
}

- CheckUnderTheAgeOfFourteen()에 생년월일 6자리(birthDate)와 주민등록번호 7번째자리 숫자(seventhDigit) 입력한다.

- 생년월일 6자리를 년, 월, 일로 나눈다.

- 7번째 자리를 보고 1900년대생인지 2000년대생인지 확인을 해서 연도를 4자리로 만들어 준다.

- 생년월일은 현재 문자열이니까 time 타입으로 변경한다.

- 생년월일이 오늘이거나 과거인지 체크 한다. 맞으면 14세미만인지 아닌지 체크 한다.

- 생년월일이 미래이면 false를 리턴한다.

- false : 14세 미만 아니다.

- true : 14세 미만이다.

 

# 이슈

https://github.com/YooGenie/go-study/issues/80

 

14세미만 검증하기 · Issue #80 · YooGenie/go-study

 

github.com

 

반응형