私はDancerで非常に小さなURL短縮サービスを書いています。これは、RESTプラグインを使用して、投稿されたURLを、ユーザーが短縮されたURLにアクセスするために使用する6文字の文字列とともにデータベースに保存します。
今、私は自分のランダムな文字列の生成方法について少し確信が持てません。
sub generate_random_string{
my $length_of_randomstring = shift; # the length of
# the random string to generate
my @chars=('a'..'z','A'..'Z','0'..'9','_');
my $random_string;
for(1..$length_of_randomstring){
# rand @chars will generate a random
# number between 0 and scalar @chars
$random_string.=$chars[rand @chars];
}
# Start over if the string is already in the Database
generate_random_string(6) if database->quick_select('urls', { shortcut => $random_string });
return $random_string;
}
これにより、6文字の文字列が生成され、生成された文字列がすでにDBにある場合は、関数が再帰的に呼び出されます。63 ^ 6の可能な文字列があることは知っていますが、データベースがより多くのエントリを収集する場合、これには時間がかかります。そして多分それはほぼ無限の再帰になるでしょう、それは私が防ぎたいです。
再帰を防ぐ一意のランダムな文字列を生成する方法はありますか?
前もって感謝します