我正在用Dancer編寫一個非常小的URL縮短器。它使用REST插件在數據庫中存儲發佈的URL,其中包含六個字符的字符串,用戶可以使用該字符串來訪問被縮短的URL。生成獨特的隨機字符串
現在我有點不確定我的隨機字符串生成方法。
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;
}
這會生成一個六個字符串,並且如果生成的字符串已經在數據庫中,則會遞歸地調用該函數。我知道有63^6個可能的字符串,但如果數據庫收集更多條目,這將需要一些時間。也許它會成爲一個近乎無限的遞歸,我想阻止它。
是否有方法可以生成唯一的隨機字符串,從而防止遞歸?
在此先感謝
我沒有遞歸的答案,但我確實有一個關於無限猴子的提示,最終輸入的URL會讓修女變得微弱:'some.eg/CuNwha' - 你可以拉元音或去十六進制以防止這個。 – Ashley