Как сгенерировать неслучайный UUID на основе строки в ruby? - PullRequest
0 голосов
/ 14 декабря 2018

Поскольку у нас есть многопоточная среда в ruby, необходимо каждый раз генерировать один и тот же UUID, например 9f54c0ae-f9cf-46ba-985d-637e1dcc0e5d, на основе той же входной строки JOB_userId_jobId, как JOb_1_90.

Пример: "JOb_1_96"=>"412ce9ff-fb47-4b8e-94c9-4bd37481cb4b", "JOb_1_97"=>"7232e1d6-422e-4d49-a47f-f4628e4ffd57", "JOb_1_98"=>"de932dbd-76e4-4828-8bc1-cebd8254db61", "JOb_1_99"=>"ce1e91a3-8d5d-47f8-9dc6-58790cbb98e9",....

Любая помощь будет оценена. Спасибо

1 Ответ

0 голосов
/ 14 декабря 2018

Как я понимаю, UUID должны быть не случайными, а основанными на входной строке.Это известно как UUID версии 3 и версии 5.Эти версии отличаются используемой функцией хеширования: MD5 против SHA1.См. rfc4122, раздел 4.3 .

Если вы не против включить зависимость Activesupport в ваш проект (это довольно большой гем, но популярный и включенный в Rails), тогда вы можете использовать его uuid_v3 и uuid_v5 методы .

require "active_support/core_ext/digest/uuid"
puts Digest::UUID.uuid_v3("ae279f4c-6327-47c6-b53c-05a3f10dd0c6", "bar")
puts Digest::UUID.uuid_v5("ae279f4c-6327-47c6-b53c-05a3f10dd0c6", "bar")

Вывод (обратите внимание, что при каждом запуске он одинаков, в отличие от случайных UUID):

fab2e5c9-bf64-39d4-bc17-e72ccdb013aa
15c252d7-fd16-52de-aac2-223a58aa6ea9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...