
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
。
それ以外の場合は、スチールドライバーのコメントで十分ですprintf '%06d\n' "$(shuf -i0-999999 -n1)"
。
答え2
6桁の10進数には、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