我正在使用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;
}
该函数生成一个6个字符的字符串,如果生成的字符串已经存在于数据库中,则递归调用该函数。我知道总共有63^6种可能的字符串,但是如果数据库中的条目增多,这将需要一些时间。而且,这可能会变成几乎无限递归,我想要避免这种情况。
有没有办法生成唯一的随机字符串,并避免递归?
提前感谢您的帮助。
some.eg/CuNwha
-- 你可以去掉元音或者使用十六进制来避免这种情况。 - Ashley