генерировать случайный и уникальный ключ из ровно 10 символов на основе более длинной входной строки - PullRequest
0 голосов
/ 07 ноября 2019

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

В общем, я ищу способ последовательно преобразовать более длинную строку в строку из 10 символов.

Что-токак хэш md5, но должен выводить только 10 символов.

Спасибо.

Примечание: В качестве одного из комментариев спросите, что я пробовал. По сути, я не нашел правильного решения и провел много исследований по нему. Единственное решение, которое я могу придумать, - это сохранить хэш md5 и ключ из 10 символов в БД, который я смогу найти в следующий раз. Может быть сгенерирован пользовательский ключ из 10 символов, который не будет иметь никакого отношения к хешу md5 как таковому, кроме этого отображения db.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

То, что вы просите сделать, невозможно. Название вопроса гласит: «генерировать случайный и уникальный ключ из ровно 10 символов на основе более длинной входной строки».

По принципу Pigeonhole вы не можете этого сделать. Поскольку строк длиной более 10 символов больше, чем строк длиной ровно 10 символов, любая функция хеширования, которую вы создадите, будет генерировать дубликаты. Несколько длинных строк будут отображаться в одну и ту же строку из 10 символов.

Вы не можете гарантировать уникальность.

0 голосов
/ 07 ноября 2019

Преобразование строки в массив символов, chsr в int и умножение последнего и первого символа, второго и второго на последний, пока у вас не будет 10-значного числа.

...