perl如何产生唯一ID???

wildhorse01 2002-05-20 10:36:26
以下是我改来改去也不成功的代码,现在很乱!

#!c:/perl/perl.exe
use strict;
use Digest::MD5;
use Digest::SHA1;

#my $remote=$ENV{REMOTE_ADDR}.$ENV{REMOTE_PORT};
#srand(time.$$);
#my $srcid=rand(time.$$).$$;
#my $md5=new Digest::MD5();
#my $md5id=$md5->md5_base64(time,$$,$srcid);
#
#my $sha1=new Digest::SHA1();
#my $sha1id=$sha1->sha1_base64(time,$$,$srcid);
#$sha1id=$md5id.$sha1id;
#
#$sha1id=~tr|+/=|-_.|;
open(FH,">>c:\\cgi.txt");
my $srcid;
my $md5=new Digest::MD5();
my $sha1=new Digest::SHA1();
my $md5id;
my $sha1id;
my $cn;
$cn=0;
while($cn<10000)
{
srand(time.$$);
$srcid=rand(time.$$).$$;
$md5id=$md5->md5_base64(time,$$,$srcid);
$sha1id=$sha1->sha1_base64(time,$$,$srcid);
$sha1id=$md5id.$sha1id;

$sha1id=~tr|+/=|-_.|;
#sleep(0.0001);
print FH $sha1id."\r\n";
$cn++;
}
close(FH);
exit 1;
...全文
136 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wildhorse01 2002-10-10
  • 打赏
  • 举报
回复
我还是没搞完全明白,给分吧!
wildhorse01 2002-06-02
  • 打赏
  • 举报
回复
呵呵,不会有这么麻烦吧?
还是没有简单的方法搞定!
hoowa 2002-05-30
  • 打赏
  • 举报
回复
呵呵,你这孩子!你有没有测试过代码啊?

产生相同的key到是有可能的,但是他与机器速度快没有关系。

如果你怕不放心你可以加上判断在最下级别操作。发现重复重新计算。

如何你注意观察,所有的网上程序都采用了session机智,包括所有的社区,所有的论坛,所有的邮件系统。

怎么也没出现那么大问题啊
wildhorse01 2002-05-29
  • 打赏
  • 举报
回复
你分析一下,现在计算机运算速度这么快,同一时间产生的随机数可能相同,所以CRYPT加密处理的$keyword$time也可能是相同的,所以返回值也可能是相同的!
所以,用SRAND,time,crypt都是无效的!
hoowa 2002-05-28
  • 打赏
  • 举报
回复
我刚才测试了,我的代码没有任何错误。

是你的程序前部分问题
wildhorse01 2002-05-27
  • 打赏
  • 举报
回复
#也是错误的呀!

#!c:/perl/perl.exe
#唯一ID产生错误
use strict;

my $cn;
open(FH,">c:\\cgi.txt");
$cn=0;
my %OUT;

while($cn<10000)
{
print FH RandKey()."\n";
$cn++;
}
close(FH);
exit 1;

sub RandKey
{
my (@code,$keyword,$time,$i,$session,$self)=undef;

$time=time();
srand;
@code=split(/ */, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");

for ($i=0;$i<5 ;$i++) {
$keyword .="$code[int(rand(62))]$code[int(rand(62))]";
}

$session=crypt($self,"$keyword$time");

return("$session");
}
wildhorse01 2002-05-27
  • 打赏
  • 举报
回复
在同一个文件中生成的KEY ,有许多是重复的!
beckheng 2002-05-26
  • 打赏
  • 举报
回复
>COOKIE有的浏览器不支持!
這句倒是願聞其詳!

事情總會有解決的方法的啊!
hoowa 2002-05-26
  • 打赏
  • 举报
回复
sub RandKey
{
my (@code,$keyword,$time,$i,$session,$self)=undef;

$time=time();
srand;
@code=split(/ */, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");

for ($i=0;$i<5 ;$i++) {
$keyword .="$code[int(rand(62))]$code[int(rand(62))]";
}

$session=&crypt($self,"$keyword$time");

return("$session");
}


看看这个代码行不行?有几个哥们也是用这个代码的,我想应该可以~

另外,你要把获得的代码用MD5加密一下。就是MD5模块在我程序里就是&crypt

这样获得的Key就可以了
lucong 2002-05-25
  • 打赏
  • 举报
回复
试试
use Sys::UniqueID;
wildhorse01 2002-05-25
  • 打赏
  • 举报
回复
不一定是CGI呀,也可以是其他的程序需要,比如,数据库程序等(不要给我说自动编号ID)。
COOKIE有的浏览器不支持!
ifairyhan 2002-05-24
  • 打赏
  • 举报
回复
我晕倒
你要他唯一,当然还要做一下措施拉
防止之一,就是利用cookie

你可以先判断是否有这个cookie阿

所有的session只采用两种方法继承
1,就是cookie
2,url传树传递

还有不要在帖子中说"有没有真正会的呀???"
以后我看到这样提问的人,我会的,都绝对不回答

世界上,难得问题多的是,但是每个问题都是有答案和知道的人的


wildhorse01 2002-05-23
  • 打赏
  • 举报
回复
有没有真正会的呀???
wildhorse01 2002-05-22
  • 打赏
  • 举报
回复
微软的GUID是如何产生的???
wildhorse01 2002-05-22
  • 打赏
  • 举报
回复
好像不行吧?
如果是在一个进程中,在一个时间片可以产生个ID
#!c:/perl/perl.exe
#唯一ID
use strict;

my $cn;
open(FH,">c:\\cgi.txt");
$cn=0;
my %OUT;
while($cn<10000)
{
if (!$OUT{'session'})
{
srand($$|time);
$OUT{'session'} = int(rand(600000000000));
$OUT{'session'}=unpack("H*", pack("Nnn", time, $$, $OUT{'session'}));
print FH $OUT{'session'}."\r\n";
}
$cn++;
}
close(FH);
exit 1;
ifairyhan 2002-05-21
  • 打赏
  • 举报
回复
不用这个复杂把

if (!$OUT{'session'}){
srand($$|time);
$OUT{'session'} = int(rand(600000000000));
$OUT{'session'}=unpack("H*", pack("Nnn", time, $$, $OUT{'session'}));
}

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧