Как я могу сгенерировать уникальный идентификатор, используя хэш в Perl? - PullRequest
4 голосов
/ 18 марта 2010

Я пишу программу передачи сообщений между несколькими клиентами и сервером.

Я хочу создать уникальный идентификатор сообщения для каждого сообщения. Он должен быть сгенерирован сервером и возвращен клиенту.

Для передачи сообщений я использую хеш-структуру данных, например:

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

Я хочу создать уникальный идентификатор, используя этот хэш.

Я пробовал несколько подходов, MD5 и заморозка, но они дают нечитаемые идентификаторы. Я хочу несколько значимых или читаемых уникальных идентификаторов.

Я думал, что мы можем использовать микросекунды для различения идентификаторов, но здесь проблема в нескольких клиентах.

В любой ситуации идентификаторы должны быть уникальными.

Может кто-нибудь помочь мне выйти из этой проблемы?

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 18 марта 2010

Я подозреваю, что вы не хотите делать то, что вы просите, но вы можете сделать это.

  • Возьмите хеш-ключ / значения и сведите их в массив @foo = (%foo).

  • MD5 массив для получения кода ID - используйте md5_base64(@foo), если хотите, чтобы он был 7-битным (читаемым человеком).

  • Помните, что хэши не упорядочены, поэтому вам нужен 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

Если честно, я думаю, что вам лучше сгенерировать уникальный случайный идентификатор (токен) и дать его клиенту, чтобы он вернулся к вам, но, исходя из вашего вопроса, я не знаю вашей мотивации.

6 голосов
/ 18 марта 2010

Это звучит как работа для Data :: UUID .

Кроме того, уникальный идентификатор предназначен для компьютера. В любом случае вы можете абстрагироваться от того, что вам нравится людям. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...