我想生成随机唯一ID,如(使用Perl);
XYZ2345672
,ABC0098321
,LMN_G8732415
模式是
<prefix><[0-9]{7}>
我有5个这样的前缀。 ID应该在数据库中传递唯一约束。我怎么能这样做? 感谢
答案 0 :(得分:1)
E.g。
use 5.010;
sub new_id_for_prefix {
my $prefix = shift;
state $seen = {};
my $id;
do { $id = $prefix . int rand(1E7) } while exists $seen->{$id};
$seen->{$id} = undef;
return $id;
}
say new_id_for_prefix("foo") for 1..5;
示例输出:
foo2533460
foo1633946
foo6099891
foo8084746
foo4358492
如果你想要UID / GUID,那么你应该使用相应的模块。
答案 1 :(得分:1)
试试这个,
{
my %uniq;
sub get_random_id {
my ($prefix, $digits) = @_;
my $ret;
do {
$ret = $prefix . join "", map { int rand(10) } 1 .. $digits;
}
while $uniq{$ret}++;
return $ret;
}}
print get_random_id("ABC", 7), "\n";
答案 2 :(得分:0)
当然有(至少)一个CPAN模块可以做到这一点。 String::Random
允许您根据模式生成随机字符串,还允许您定义自己的自定义模式。下面的示例为自定义P
模式定义了五个可能的字符串数组。 n
是预定义的,并被随机数字替换:
use String::Random;
my $rand = String::Random->new;
$rand->{P} = ["prefixA","prefixB","prefixC","prefixD","prefixE"];
print $rand->randpattern("Pnnnnnnn"), "\n";