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

sga*_*esh 3 perl uniqueidentifier

我正在多个客户端和服务器之间编写一个消息传输程序.

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

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

{
api => POST,
username => sganesh,
pass => "pass",
message => "hai",
time => "current_time",
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

提前致谢.

Gav*_*ock 7

我怀疑你不想做你想要的,但你可以做到.

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

  • MD5数组获取ID代码 - md5_base64(@foo)如果你想要它是7bit(人类可读)使用.

  • 请记住,哈希不是有序的,因此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
Run Code Online (Sandbox Code Playgroud)

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

  • 这有一个问题,尽管它可能对应用程序无关紧要.恰好碰巧拥有相同数据的另一个哈希可以为您提供相同的MD5,即使它是一个完全独立的记录. (2认同)

bri*_*foy 6

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

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