Создание уникального идентификатора по определенному шаблону, например digitStringDigit в C#.

Ранее я создавал уникальные идентификаторы, используя метод Math.Rando или иногда метод GUID.NewGUID. На этот раз я пытаюсь сгенерировать уникальные числа, основанные на определенном шаблоне.

например 123ABC123 - длина номера всегда будет равна 9, и он будет содержать 3 цифры, за которыми следуют три символа, а затем еще три цифры.


person Sandhurst    schedule 02.10.2010    source источник
comment
Должны ли они быть уникальными для нескольких приложений? Уникальный только в вашем приложении? Могут ли эти идентификаторы быть сгенерированы из одной точки (например, статического метода GetId() класса IdGenerator?)   -  person Rohith    schedule 02.10.2010
comment
Это должно быть уникальным в приложениях, и да, они могут быть сгенерированы из одной точки.   -  person Sandhurst    schedule 02.10.2010
comment
должен быть уникальным в приложениях, это очень запутанно; вы говорите о более чем одном приложении? Они работают одновременно? На разных машинах?   -  person Dour High Arch    schedule 04.10.2010


Ответы (1)


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

 TimeSpan uniqueID = DateTime.Now.ticks;

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

person Michael Eakins    schedule 02.10.2010
comment
что, если кто-то повернет время вспять? - person kofucii; 02.10.2010
comment
datetime.now.ticks использует внутренние часы CMOS ПК. Если ваши пользователи не собираются вносить серьезные физические изменения в ПК, это должен быть очень безопасный метод создания уникального идентификатора. - person Michael Eakins; 02.10.2010
comment
Эти часы все те же, что установлены пользователем. - person Tergiver; 02.10.2010
comment
Вы не понимаете. Datetime.now.ticks не основан на часах, которые вы видите на панели задач. Datetime.now.ticks выводится из внутренних часов ЦП. - person Michael Eakins; 02.10.2010
comment
Я не знаю, откуда вы берете информацию. Посмотрите исходный код DateTime.Ticks.get. Он возвращает InternalTicks.get, который возвращает то же поле, что и все остальные части времени. Это поле представляет собой количество миллисекунд, прошедших с... какая бы ни была дата, я не могу вспомнить. Это значение исходит от часов реального времени на материнской плате. - person Tergiver; 02.10.2010
comment
ТОЧНО! С материнской платы (ЦП) часы. - person Michael Eakins; 02.10.2010
comment
Да, но эти часы устанавливаются либо в пользовательском интерфейсе BIOS, либо в диалоговом окне «Настройки часов» в Windows. Он устанавливается пользователем. Если батарея CMOS разрядится, ваши часы сбрасываются. Это те же часы, что и на панели задач. - person Tergiver; 03.10.2010
comment
Вы не можете изменить часы Bios через интерфейс Windows. - person Michael Eakins; 03.10.2010
comment
Просмотрите эти ссылки, они объясняют, как изменить часы в BIOS, но в них никогда не упоминается простое использование настройки часов Windows (1) computing.net/answers/windows-xp/change-bios-clock-time/ (2) blogs.msdn.com/b/oldnewthing/archive/2004/09/02/224672. aspx (3) pcbuyerbeware.co.uk/BIOS.htm В Ссылка на факт (2) гласит, что вы не могли управлять часами Bios через Windows с версии 3.0 или около того. - person Michael Eakins; 03.10.2010