Удобочитаемая альтернатива UUID

Я работаю над системой, которая широко использует псевдонимы, чтобы сделать критически важные для конфиденциальности данные доступными для исследователей. Эти псевдонимы должны обладать следующими свойствами:

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

Моей первой идеей было использовать UUID4. Они неплохо справляются с (1) и (2), но не так хороши по (3).

Другой вариант - кодировать UUID с помощью более широкого алфавита, что приводит к более коротким строкам (см., Например, Shortuuid). Но я не уверен, действительно ли это улучшает читаемость.

Другой подход, который я сейчас рассматриваю, - это статья 2005 года под названием «Оптимальный код для идентификаторов пациентов», которая направлена ​​именно на решение моей проблемы. Описанный здесь алгоритм создает 8-значные псевдонимы с 30 битами энтропии. Однако я бы предпочел использовать более широко проверенный стандарт.

Также существует подход git: отображать только первые несколько символов настоящего псевдонима. Но это означало бы, что псевдоним через какое-то время может потерять свою уникальность.

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

Смотрите также: stackoverflow.com/questions/1926206/human-readable-guid
dreftymac 19.06.2020 20:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
15
1
9 278
3

Ответы 3

Не знаю ни одного широко используемого стандарта для этого. Вот один из широко не используемых:

Proquints

https://arxiv.org/html/0901.4016

https://github.com/dsw/proquint

UUID4 (128 бит) будет преобразован в 8 проквинтов. Если это слишком много, вы можете взять последние 64 бита UUID4 (= просто взять 64 случайных бита). Это не заставляет его волшебным образом терять уникальность; только увеличивает вероятность коллизий, которое изначально было ненулевым и которое вы можете оценить математически, чтобы решить, подходит ли он для ваших целей.

эта статья предлагает использовать первые несколько символов из хэша SHA-256, аналогично тому, что делает git. UUID обычно основаны на SHA-1, так что это не так уж и много. Компромисс между свойством (2) и (3) заключается в количестве символов.

Если d представляет собой количество цифр, вы получите идентификаторы 2 ** (4 * d) в целом, но ожидается, что первая коллизия произойдет после 2 ** (2 * d).

На самом деле большой вопрос не в том, какой идентификатор вы используете, а в том, как вы справляетесь с коллизиями.

Вот так UUID читаемый

Создавайте легко запоминающиеся, читаемые UUID, которые являются шекспировскими и грамматически правильными предложениями

Другие вопросы по теме