6자리 랜덤 OTP 번호를 생성하는 스크립트를 작성했습니다. 더 적은 코드 줄로 6자리 OTP 번호를 쉽게 얻을 수 있는 방법이 있나요?
내 코드:
#!/bin/bash
dynamic_array=()
for (( i =1 ; i<=5 ; i++))
{
store_digit=$(shuf -i0-9 -n1) ; dynamic_array+=("$store_digit")
}
str_array_value="${dynamic_array[*]}" ; echo "Output : ${str_array_value// /}"
답변1
생성하고 싶다면실제확인할 수 없는 임의의 6자리 문자열이 아닌 공유 비밀에서 생성된 OTP 토큰을 사용할 수 있습니다.oathtool
.
그렇지 않으면 steeldriver의 의견으로 충분합니다 printf '%06d\n' "$(shuf -i0-999999 -n1)"
.
답변2
6자리 십진수에는 15자리보다 큰 임의의 숫자가 필요합니다. 여기서는 30자리 임의의 숫자를 사용하겠습니다.
((RND=RANDOM<<15|RANDOM)) ; echo ${RND: -6}
편집: 관점에 대한 몇 가지 테스트입니다...
~# time for i in {0..2000} ;do printf '%06d\n' "$(shuf -i0-999999 -n1)" >/dev/null ;done
real 0m13.814s
user 0m9.573s
sys 0m4.302s
~# time for i in {0..2000} ;do ((RND=RANDOM<<15|RANDOM)) ; echo ${RND: -6} >/dev/null ;done
real 0m0.120s
user 0m0.101s
sys 0m0.019s
답변3
문제는 다음과 같이 재구성될 수 있습니다. "UTF-8 하위 집합: {0,1,2,3,5,6,7,8,9}의 문자를 포함하는 임의의 6자 문자열을 출력합니다."
그 결과는 다음과 같습니다.
cat /dev/urandom | tr -dc 0-9 | head -c 6