LINUX.ORG.RU

Формат uuid

 ,


0

1

SoGo - сервер групповой работы. Написан на загадочном для меня objective-c.

Контакты хранит в mysql таблице.

Уникальные идентификаторы генерируются по неизвестному мне алгоритму. Вид имеют примерно такой:

485A-5D974E80-3-4F38F580
E3BD-5E05AD00-55-4844B800
E48-5DFA1E00-D-71F36500

Мне нужно добавлять в эту таблицу свои контакты скриптом на python. Не знаю, как их генерировать. На обычный uuid не похоже.

Скачал исходники, парсил на предмет «INSERT INTO» и генерации uuid, ничего вразумительного не нашел.

Возможно, кто-нибудь из адептов objective-c подскажет, что это за формат?

★★★★

Исходники не качал, 10 секунд потыкал в файлы на на гитхабе.

https://github.com/inverse-inc/sogo/blob/master/SoObjects/SOGo/SOGoObject.m#L88

+ (NSString *) globallyUniqueObjectId
{
  /*
    4C08AE1A-A808-11D8-AC5A-000393BBAFF6
    SOGo-Web-28273-18283-288182
    printf( "%x", *(int *) &f);
  */
  static int pid = 0;
  static int sequence = 0;
  static float rndm = 0;
  float f;

  if (pid == 0)
    {
      pid = getpid();
      rndm = random();
    }
  sequence++;
  f = [[NSDate date] timeIntervalSince1970];

  return [NSString stringWithFormat:@"%0X-%0X-%0X-%0X",
		   pid, (int) f, sequence++, (int) rndm];
}
fluorite ★★★★★
()
Ответ на: комментарий от fluorite

Благодарю!

Не могли бы еще пояснить, что в этом коде означает «sequence++»?

Если это инкремент, не могу понять, как из изначального ноля получаются на выходе разные значения?

afanasiy ★★★★
() автор топика
Ответ на: комментарий от afanasiy
static int pid = 0;
static int sequence = 0;
static float rndm = 0;

static в си-подобных языках означает, что переменная сохраняет свое значение между вызовами функции в которой объявлена.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от anonymous

Прозреваю, дело было так: некто с хакерством головного мозга написал

return КУЧАВСЕГО sequence++ КУЧАВСЕГО;

Позже некто слепошарый смотрел код, не увидел ++, и дописал свой

sequence++;
legolegs ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.