如何在Perl中使用哈希生成唯一ID?

时间:2010-03-18 06:52:48

标签: perl uniqueidentifier

我正在多个客户端和服务器之间编写邮件传输程序。

我想为每条消息生成一个唯一的消息ID。它应该由服务器生成并返回给客户端。

对于邮件传输,我使用哈希数据结构,例如:

{
api => POST,
username => sganesh,
pass => "pass",
message => "hai",
time => "current_time",
}

我想使用此哈希生成唯一ID。

我尝试了几种方法,MD5和冻结,但这些方法提供了不可读的ID。我想要一些有意义或可读的唯一ID。

我原以为我们可以用微秒来区分ID,但问题是多个客户端。

在任何情况下,ID都应该是唯一的。

任何人都可以帮我解决这个问题吗?

提前致谢。

2 个答案:

答案 0 :(得分:7)

我怀疑你不想做你所要求的,但你可以做到。

  • 获取哈希键/值并将它们展平为数组@foo = (%foo)

  • MD5数组获取ID代码 - 如果您希望它为7位(人类可读),请使用md5_base64(@foo)

  • 请记住,哈希不是有序的,因此如果您想让它重复,则需要sort @foo数组。

在代码中,例如:

use Digest::MD5 qw(md5_base64);

my $foo = {
    api => POST,
    username => sganesh,
    pass => "pass",
    message => "hai",
    time => "current_time",
};

my $id = md5_base64(sort %$foo); # in my case eRR9QzGN1n+nIl1TDmclEA

老实说,我认为你最好生成一个独特的随机ID(一个令牌)并将它交给客户返回给你,但是从你的问题来看,我不知道你的动机。

答案 1 :(得分:6)

这听起来像是Data::UUID的工作。

此外,唯一ID适用于计算机。无论如何,你可以抽象出你喜欢的人类。 :)