PHP эквивалент uniqid () в C # - PullRequest
2 голосов
/ 22 августа 2009

пытается дублировать некоторый код PHP в C #. Код PHP использует функцию uniqid с параметром more entropy, установленным в true. Любая идея о том, как лучше всего повторить это в C #?

http://us2.php.net/uniqid

Ответы [ 2 ]

8 голосов
/ 22 августа 2009

что-то вроде:

string uniqid(string prefix, bool more_entropy) {
    if(string.IsNullOrEmpty(prefix)) 
      prefix = string.Empty;

    if (!more_entropy) {
      return (prefix + System.Guid.NewGuid().ToString()).Left(13);
    } else {
      return (prefix + System.Guid.NewGuid().ToString() + System.Guid.NewGuid().ToString()).Left(23);
    }
 }

Редактировать: отразить комментарии

Это очень простое решение моей головы , и я бы предложил, чтобы для более строгого решения вы исследовали правильное генерирование «случайных» чисел, например через System.Math пространство имен напрямую. Пожалуйста, посмотрите эти ТАК вопросы и ответы о генерации случайных чисел .

System.Guid.NewGuid (). ToString ()

Даст вам уникальную строку.

7 голосов
/ 07 февраля 2015

После некоторого поиска в Google я нашел, как работает uniqid в PHP, и реализовал его в c #:

private string GetUniqID()
{
    var ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0));
    double t = ts.TotalMilliseconds / 1000;

    int a = (int)Math.Floor(t);
    int b = (int)((t - Math.Floor(t)) * 1000000);

    return a.ToString("x8") + b.ToString("x5");
}

Этот код дает точно такой же результат, единственное отличие состоит в том, что дополнительные параметры uniqid () не реализованы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...