Как создать уникальный идентификатор в C#?

Уникальные идентификаторы используются довольно при разработке программного обеспечения. Например, в URL различных сервисов, для индексирования каких-либо данных и так далее. При этом, практически каждый программист использует свой собственный подход к созданию идентификатора в зависимости от того, какие цели преследуются. Например, идентификатор может содержать какие-либо полезные данные (дата создания элемента, другие идентификаторы и т.д.). Здесь я рассмотрю несколько вариантов создания уникальных идентификаторов с использованием C#.

Как в C# сгенерировать уникальный идентификатор?

Создание идентификатора с использованием GUID

GUID (Globally Unique Identifier) — статистически уникальный 128-битный идентификатор. Его главная особенность — уникальность, которая позволяет создавать расширяемые сервисы и приложения без опасения конфликтов, вызванных совпадением идентификаторов.

Это, по-видимому, самый простой и первый приходящий на ум способ сгенерировать уникальный идентификатор в C#. Реализация способа также довольно простая:

Guid.NewGuid().ToString()

Сгенерирует идентификатор следующего вида: 646f7719-74a5-47af-a2b9-3e99665e0000

также можно применить к строке идентификатора формат, например,

Guid.NewGuid().ToString("N")

в результате чего сформируется уникальный идентификатор вида: 6fcede5dfacf4ec2aa49ee9d3f0976d9

Создание идентификатора с использованием DateTime.Tiks

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

Суть использования этого способа — посчитать число тактов от какого-либо события. Например, код:

DateTime centuryBegin = new DateTime(2021, 4, 29); //событие от которого рассчитывается количество тактов
DateTime currentDate = DateTime.Now;
long elapsedTicks = currentDate.Ticks - centuryBegin.Ticks;
MessageBox.Show(elapsedTicks.ToString());

сгенерирует числовой идентификатор вида: 656710825752 

Можно также придумать различные вариации этого способа, например, рассчитывать не количество тактов, а количество секунда, наносекунд и т.д.

Использование возможностей LINQ для создания уникального идентификатора

Представленный ниже код генерирует уникальный идентификатор по типу идентификаторов YouTube:

StringBuilder builder = new StringBuilder();
Enumerable
   .Range(65, 26)
    .Select(e => ((char)e).ToString())
    .Concat(Enumerable.Range(97, 26).Select(e => ((char)e).ToString()))
    .Concat(Enumerable.Range(0, 10).Select(e => e.ToString()))
    .OrderBy(e => Guid.NewGuid())
    .Take(12)
    .ToList().ForEach(e => builder.Append(e));
string id = builder.ToString();

Этот код сгенерирует уникальный 12-тизначный идентификатор вида: UcBKmq2XE5aА. Количество символов можно отрегулировать, изменив значение параметра Take(). По утверждению автора этого кода создается 0,001% дубликатов на 100 миллионов вызовов.

Итого

Сегодня мы рассмотрели несколько вариантов того, как в C# создать уникальный идентификатор — с использованием структуры Guid, свойства DateTime.Tiks и способа, использующего Linq. Используя приведенные выше способы, Вы можете создавать свои уникальные идентификаторы, добавляя в них какую-либо необходимую вам информацию.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии