개요
테스트를 짜는데 그럴듯하고 중복이 덜한 랜덤 한국 이름(세자리)와 랜덤 주민등록번호 생성 매번 생각해내는게 여간 번거로운일이 아니다. 그래서... 작성한코드. 스탠다드 라이브러리인 Random
에 붙어서 더 있어보인다.
본 코드
/**
* 한국어 이름을 생성하기 위해 무작위의 한국어 세글자 생성한다.
*
* 예시: 쩤죁걤, 덨뽭햰, 퐀눧흌, 긥쩨푤 등
*
* @receiver [Random] 무작위 숫자를 생성하기 위한 인스턴스
* @return 세글자로 이루어진 무작위 한국어 이름
*/
fun Random.koreanName(): String {
// 한글 음절 범위 내에서 무작위 문자를 생성
return buildString {
repeat(3) {
append(Random.nextInt(0xAC00, 0xD7A3).toChar())
}
}
}
/**
* 무작위로 유효한 한국 주민등록번호를 생성한다.
*
* @receiver [Random] 무작위 숫자를 생성하기 위한 인스턴스
* @return 유효한 주민등록번호
*/
fun Random.koreanRrn(): String {
// Birthdate from 1960-01-01 to 2000-12-31
val birthdate = LocalDate.ofEpochDay(
this.nextInt(
LocalDate.of(1960, 1, 1).toEpochDay().toInt(),
LocalDate.of(2000, 12, 31).toEpochDay().toInt() + 1 // "+ 1" to make the end date inclusive
).toLong()
)
val genderCenturyDigit = if (birthdate.year < 2000) 1 else 2 // 1 for 1900s male, 2 for 1900s female
val firstSix = birthdate.format(DateTimeFormatter.ofPattern("yyMMdd"))
val lastSeven = "${genderCenturyDigit}${(100_000..999999).random()}"
return firstSix + lastSeven
}
'Test' 카테고리의 다른 글
레거시 코드 마스터하기 #5 거대한 클래스에 단위 테스트 적용 기법 (Java 예제 포함) (2) | 2023.12.11 |
---|