Я работаю над системой, которая широко использует псевдонимы, чтобы сделать критически важные для конфиденциальности данные доступными для исследователей. Эти псевдонимы должны обладать следующими свойствами:
Моей первой идеей было использовать UUID4. Они неплохо справляются с (1) и (2), но не так хороши по (3).
Другой вариант - кодировать UUID с помощью более широкого алфавита, что приводит к более коротким строкам (см., Например, Shortuuid). Но я не уверен, действительно ли это улучшает читаемость.
Другой подход, который я сейчас рассматриваю, - это статья 2005 года под названием «Оптимальный код для идентификаторов пациентов», которая направлена именно на решение моей проблемы. Описанный здесь алгоритм создает 8-значные псевдонимы с 30 битами энтропии. Однако я бы предпочел использовать более широко проверенный стандарт.
Также существует подход git: отображать только первые несколько символов настоящего псевдонима. Но это означало бы, что псевдоним через какое-то время может потерять свою уникальность.
Итак, мой вопрос: существует ли какой-либо широко используемый стандарт для удобочитаемых уникальных идентификаторов?





Не знаю ни одного широко используемого стандарта для этого. Вот один из широко не используемых:
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, которые являются шекспировскими и грамматически правильными предложениями