[JS] 랜덤번호를 생성해보자

·2023년 1월 27일
0

토큰을 만들기 전에 필요한 메소드 들을 MDN에서 공부해보자.

  • Math.floor : 함수는 주어진 숫자와 같거나 작은 정수 중에서 가장 큰 수를 반환
  • Math.random : 0 이상 1 미만의 구간에서 근사적으로 균일한 부동소숫점 의사난수를 반환
  • padStart : 메서드는 현재 문자열의 시작을 다른 문자열로 채워, 주어진 길이를 만족하는 새로운 문자열을 반환
  • String() : 문자열로 변환

자 메소드를 보니까 어떻게 만들지 감이 잡히는가? 그럼 한번 만들어보자!

function getToken(num) {
	const randomNum = Math.floor(Math.random() * 10 ** num);
	cosnt result = String(randomNum).padStart(num,'0');
    
    return result;
}

getToken(4); // 4자리 랜덤번호 생성
getToken(8); // 8자리 랜덤번호 생성

풀이를 하나씩 해보자. 순서대로 어떤식으로 실행되는지 보자.

Math.random() * 10 ** num
  1. Math.random() 함수를 써서 랜덤 수를 만든다. (출력해보면 알겠지만 0.13038623459817078 이런식의 랜덤수가 나온다)

  2. Math.random() * 10 ** num 이 부분은 뭐냐면
    1번에서 생성된 번호를 가지고 자리수를 정하는건데 다음과 같다.

    1. *은 곱하기 연산자로 1번 값에 10을 곱하게 되면 1.3038623459817078 이런식으로 소숫점이 뒤로 이동한다. 이 원리를 이용해서 토큰의 자리수를 정할 수 있다!
    2. *은 거듭제곱이다. 가령 num이 4이면 10101010 이 된다. 그러면, 10000이 되는데, 이 값을 1번 값에 곱하면 1303.8623459817078 이 된다. 와! 토큰이 절반 만들어졌다.
    3. 참고로 연산자는 계산 순서가 있다. 거듭제곱이 곱하기 보다 먼저 계산된다. 우리 초등학교 수학시간에 배웠다. +보단 *먼저 계산하라고. 그거랑 같다.

Math.floor( Math.random() * 10 ** num )
  1. Math.floor()은 소숫점 아래자리를 버리는 함수다. 우리는 2번에서 소숫점이 있는 토큰을 생성했다. num이 4라고 가정하자.
    그렇다면 Math.floor(Math.random() * 10 ** num)를 하게되면 우리가 위에서 출력했던 1303.8623459817078에서 소숫점 아래자리가 다 버려진다.
    즉, 1303이 출력되게 되는 것이다!

const randomNum = Math.floor(Math.random() * 10 ** num);

String(randomNum).padStart(num,'0')
  1. padStart(num, '0')은 무엇이냐면, num의 자릿수를 충족할때까지 , 뒤에있는 문자열을 제일 앞에서 부터 추가해주는 것이다. 이걸 왜 쓰냐면, 제일 Math앞자리가 0인 경우 토큰에서 자동으로 0이 삭제된다. 봐봐라. Math.random()으로 숫자를 만들었다.
    값이 0.039507이라고 하자. 이 값에 num이 4라고 가정하고, * 10 **num을 하고 Math.floor()을 쓰게되면 0395가 되는데, 이 경우에는 0이 자동으로 탈락해서 395만 출력된다. 우리는 4자리 출력을 원했는데 0이 탈락됨으로써 3자리가 되면 안되지 않는가? 그래서 padStart를 통해서 앞자리를 0으로 채우는 것이다!

  2. 그렇다면 String()은 왜 썼는가? 이것은 4번의 padStart()와 관련이 깊다. 문서를 봐서 알겠지만 padStart 메소드는 문자열타입에만 쓸수있다. 우리가 Math.floor(Math.random() * 10 ** num) 만든 숫자는 타입이 Number다. padStart를 쓸 수 있는 조건이 성립이 되지 않는다. 그렇기에 우리는 String()메소드를 통해 타입을 변환시켜서 padStart를 쓸 수 있는 조건을 맞춰주게 되는 것이다.


자 이로써 함수는 만들어 졌고, 함수를 호출할때 인자값으로 원하는 숫자를 넣으면, 그 숫자만큼의 자릿수 인증번호 토큰이 생성되게 되는것이다.

profile
뉴비는 문서화를 습관화 해보자

0개의 댓글