сократить uuid дальше, чтобы сделать короткую строку

StackOverflow https://stackoverflow.com/questions/1302057

Вопрос

Мне нужно создать уникальный идентификатор записи для данной уникальной строки.

Я попробовал использовать формат uuid, который кажется хорошим.

Но мы считаем, что это надолго.

поэтому нам нужно сократить строку uuid 9f218a38-12cd-5942-b877-80adc0589315 до меньшего размера.Удалив «-», мы можем сэкономить 4 символа.Какую часть uuid безопаснее всего удалить?Нам не нужен универсальный уникальный идентификатор, но мы предпочитаем использовать uuid в качестве источника, но сокращаем строки.

Нам нужен уникальный идентификатор, специфичный для сайта/базы данных (службы данных SQL Server/ADO.NET).

Любая идея или образец с любого языка подходят.

заранее спасибо

Это было полезно?

Решение

Почему бы вместо этого просто не преобразовать его в строку с базой 64?Таким образом вы можете сократить его до 22 символов.

Сохранение UUID в виде строки base64

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

Если вы используете MS-SQL, вам, вероятно, следует просто использовать тип данных uniqueindentifier, он компактен (16 байт), и, поскольку механизм SQL знает о нем, он может оптимизировать индексы и запросы с его помощью.

UUID обеспечивает (почти) 128 бит уникальности.Вы можете сократить его до 16 двоичных байтов или до 22 символов в кодировке Base64.Я бы не рекомендовал удалять какую-либо часть UUID, иначе он просто потеряет смысл.UUID были разработаны таким образом, чтобы все 128 бит имели значение.Если вы хотите меньшего, вам следует использовать другую схему.

Например, если бы вы могли гарантировать, что используются только UUID версии 4, вы могли бы использовать только первые 32 бита или только последние 32 бита.Вы теряете уникальность, но у вас довольно случайные числа.Просто избегайте фиксированных битов (версия и вариант).

Но если вы не можете этого гарантировать, у вас возникнут настоящие проблемы.Для UUID версии 1 первые биты не будут уникальными для UUID, созданных в один и тот же день, а последние биты не будут уникальными для UUID, созданных в одной и той же системе.Даже если вы используете CRC UUID, не гарантируется, что у вас будет 16 или 32 бита уникальности.

В этом случае просто используйте какую-нибудь другую схему.Сгенерируйте 32-битное случайное число с помощью системного генератора случайных чисел и используйте его в качестве уникального идентификатора.Не полагайтесь на UUID, если вы собираетесь уменьшить его длину.

UUID составляет 128 бит или 16 байт.Без кодирования вы можете получить его размером всего в 16 байт.UUID обычно записываются в шестнадцатеричном формате, что делает их читаемыми строками длиной 32 байта.При использовании других кодировок вы получите другие результаты:

  1. base-64 преобразует 3 8-битных байта в 4 6-битных символа, поэтому длина 16 байтов данных становится длиной 22 символа.
  2. base-85 превращает 4 8-битных байта в 5 6,4-битных символов, поэтому 16 байтов данных становятся длиной 20 символов.

Все зависит от того, хотите ли вы читаемые строки и насколько стандартную/распространенную кодировку вы хотите использовать.

UUID имеет 128 бит.Вы рассматривали возможность проведения CRC?Это могло бы легко уменьшить его до 16 или 32 бит и использовать всю исходную информацию.Если CRC недостаточно хорош, вы всегда можете использовать первые несколько байтов правильного хеша (например, SHA256).

Если вы действительно хотите просто сократить UUID, его формат описан в RFC 4122.Из этого вы сможете выяснить, какие части вашей реализации не нужны.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top