【发布时间】:2009-06-30 12:24:22
【问题描述】:
我正在为不同用户执行的一些测试结果创建一个面向文件的数据库。为此,我需要为数据库中的每个条目生成唯一 ID。 id 必须满足以下要求:
- ID 应该相当小(最多 6 个字符)
- 对于每个测试用例和用户组合,每次都应生成相同的 ID
我尝试的是一个简单的 BKDR 哈希函数,种子值为 31,并使用了如下的 ord() 函数:
@chars = split(//,$hash_var);
$hash = 0;
$seed = 31;
foreach $char ( @chars ) {
if( $char !~ m/\d/ ) {
$hash = ( $seed * $hash ) + ord( $char );
}
else {
$hash = ( $seed * $hash ) + $char ;
}
}
$hash = ( $hash & 0x7FFFFFFF ) % 1000;
$hash = "$chars[0]$chars[$#chars]$hash" ;
这有时会导致各种组合的结果相同,即没有观察到唯一性。他们还有其他方法可以做到这一点吗?改变种子值是否有助于实现独特性。
【问题讨论】:
标签: perl uniqueidentifier