sud*_*03r 2 perl uniqueidentifier
我正在创建一个面向文件的数据库,其中包含各种用户执行的一些测试结果.为此,我需要为数据库中的每个条目生成唯一的id.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" ;
Run Code Online (Sandbox Code Playgroud)
这有时会导致各种组合的相同结果,即未观察到唯一性.他们是否有其他方法可以实现这一目标?改变种子价值有助于实现独特性.
每个用户有超过256个用户和/或超过65536个测试用例吗?如果没有,你可以只从0 ... 255索引用户并测试0到65535的情况,并将其编码为十六进制数字字符串,这样六个字符就可以了.
如果你有更多的用户或测试用例,我会再次索引用户和测试用例,然后将它们组合成一个32位整数,实际上只需要4个字节,实现起来很简单但对人类来说稍微困难一些.
无论如何,我假设您获得了用户名和测试用例信息.只需保留两个并列哈希值:%users并将%cases用户和测试用例映射到其索引号.