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