:: Visual Foxpro, Foxpro for DOS
Что такое GUID и для чего он бывает необходим?
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Прочитал в Вики про этот самый GUID, представляющий из себя 128-битовую последлвательность, разделяемую дефисами на 4 группы. Обычно записывается в 16-ричном формате.

Однако не очень понял, когда и для чего применяют этот GUID для софта или для файлов данных


Может быть, у кого-то есть опыт формирования и использования этого самого GUID?
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Гм... Как-то ты странно прочитал. Выборочно...

Цитата:
GUID (Globally Unique Identifier) — статистически уникальный 128-битный идентификатор.

Его главная особенность — уникальность, которая позволяет создавать расширяемые сервисы и приложения без опасения конфликтов, вызванных совпадением идентификаторов.

В тексте GUID записывается в виде строки из тридцати двух шестнадцатеричных цифр, разбитой на группы дефисами и опционально окружённой фигурными скобками:

{6F9619FF-8B86-D011-B42D-00CF4FC964FF}

Это идентификатор. Его цель - идентификация чего-либо. Причем "в мировом масштабе" Т.е. можно быть уверенным, что полученный GUID будет уникален и не пересечется с каким-либо другим GUID, полученным где-то еще.

Например, если ты в качестве Primary Key используешь автоинкремент, то, очевидно, что в другой копии твоего же приложения идентификаторы будут повторяться. И если встанет вопрос объединить документы из разных систем, то придется делать перекодировщик кодов. А с GUID можешь быть уверен, что коды из разных систем гарантированно будут отличаться

Т.е. в рамках одного приложения GUID не особо нужен. Но если стоит задача интеграции с другим приложением, то GUID - простейший способ обеспечения уникальности идентификаторов в разных приложениях. Нет необходимости создавать какую-то систему, которая будет контролировать эту самую уникальность между разными приложениями

Физически GUID - это просто 128 бит. И никаким дефисами они не разделяются. Но для человека биты тяжело воспринимаются, поэтому отображается как последовательность 16-ричных чисел разбитая на группы. Просто для удобства восприятия
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Владимир Максимов
в рамках одного приложения GUID не особо нужен. Но если стоит задача интеграции с другим приложением, то GUID - простейший способ обеспечения уникальности идентификаторов в разных приложениях.

Допустим, приложения обмениваются файлами данных (файлы имеют оговоренную структуру, разумеется). Насколько понимаю, такой файл может иметь уникальный GUID с тем, чтобы этот самый файл с уникальным GUID не мог бы случайно сгенерироваться ещё "где-то"? Если это так, то тогда вот какой вопрос. А при помощи какого софта генерируется уникальный GUID? И за счёт чего достигается уникальность GUID? Есть ли какая-то спецификация по формированию GUID?
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Вот тут нашёл более или менее подробное описание GUID

infostart.ru

Если я правильно понял, то после того, как база данных или там отдельный файл подготовлен для "передачи на сторону", следует запросить уникальный GUID у специального сервиса (бесплатно чи шо?). После получения GUID этот самый GUID записывается в передаваемый файл.

Так примерно?



Исправлено 1 раз(а). Последнее : Simple777, 17.09.21 07:48
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
PaulWist

Сообщений: 14625
Дата регистрации: 01.04.2004
Simple777
Вот тут нашёл более или менее подробное описание GUID
infostart.ru

Если я правильно понял, то после того, как база данных или там отдельный файл подготовлен для "передачи на сторону", следует запросить уникальный GUID у специального сервиса (бесплатно чи шо?). После получения GUID этот самый GUID записывается в передаваемый файл.

Так примерно?

Тут для 1С толково расписано, спецификация тоже infostart.ru

PS Поставь какой-нибудь MSSQL Express и получай из него GUID

DECLARE @UNI UNIQUEIDENTIFIER;
SET @UNI = NEWID();
SELECT @UNI;


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
Равиль

Сообщений: 6555
Откуда: Уфа
Дата регистрации: 01.08.2003
Вещь очень нужная для обмена - где-то тут взял - работает уже много лет :

? Chrtran(GuidToIdx(NewGuid()),[{}],[]) && Возвращает "очищенный" GUID с дефисами
Function NewGuid() As String @
******************************
Local cGuid As String
Declare Integer CoCreateGuid In ole32.Dll String @
cGuid = Space(16)
CoCreateGuid(@cGuid)
Do While Asc(Left(cGuid,1))=0
CoCreateGuid(@cGuid)
Enddo
Clear Dlls "CoCreateGuid"
Return cGuid
Endfunc
Function GuidToIdx(cGuid As String) As String
*****************************************
Local cGuidString As String
Declare Integer StringFromGUID2 In ole32.Dll String, String @, Integer
cGuidString = Space(38*2)
StringFromGuid2(cGuid, @cGuidString, Len(cGuidString))
cGuidString = Strconv(cGuidString, 6)
Clear Dlls "StringFromGUID2"
Return cGuidString
Endfunc


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> 128-битовую последлвательность

Вызови 4 раза фоксовый рандомный генератор 32-битного числа - вот и 128-битный рандом...
В ГУИД только надо первый HEX-символ в 3-ей группе указать правильный, этот символ говорит о типе ГУИД-а. Вроде "4" означает "рандомный":
0593EC0E-5B78-4674-A0DC-39CFBC958324
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Не. Чета странно это. Как я понял, эти коды GUID генерирует некий инет-сервис. И при этом этот сервис ведет учет ранее сгенерированных и выданных GUID. Поэтому непонятно, как так можно самому формировать какой-то "якобы уникальный" GUID.
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Simple777
Не. Чета странно это. Как я понял, эти коды GUID генерирует некий инет-сервис. И при этом этот сервис ведет учет ранее сгенерированных и выданных GUID. Поэтому непонятно, как так можно самому формировать какой-то "якобы уникальный" GUID.

В винде помнится есть для этого средство, когда-то встречалось, как можно вызывать. [sm128]


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
Равиль

Сообщений: 6555
Откуда: Уфа
Дата регистрации: 01.08.2003
Simple777
Не. Чета странно это. Как я понял, эти коды GUID генерирует некий инет-сервис. И при этом этот сервис ведет учет ранее сгенерированных и выданных GUID. Поэтому непонятно, как так можно самому формировать какой-то "якобы уникальный" GUID.

Ого, похоже я и уверен что многие другие уже мильон гуидов нигде не учтенных забрали - как бы не пришлось их сдавать обратно ...


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
128-битного случайного числа "хватит всем" на все, никто их не запоминает...
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
AngelOKES

Сообщений: 828
Дата регистрации: 08.02.2012
of63
128-битного случайного числа "хватит всем" на все, никто их не запоминает...

Если их не запоминать, то рэндум штука такая, рано или поздно может повторится и тогда смысла от этого GUID сводится в нулю
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Равиль
Ого, похоже я и уверен что многие другие уже мильон гуидов нигде не учтенных забрали - как бы не пришлось их сдавать обратно ...

Со скидкой возьмут.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
of63
128-битного случайного числа "хватит всем" на все, никто их не запоминает...

Винда просто сканирует имеющиеся и добавляет. При желании даже фоксом моно просканировать. Хотя проще ж использовать возможности ее самой.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
AngelOKES
of63
128-битного случайного числа "хватит всем" на все, никто их не запоминает...

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

Да, все рандомы конечной длины повторяются. В этом смысле смысл от GUID-а не 100% очевиден
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
Равиль

Сообщений: 6555
Откуда: Уфа
Дата регистрации: 01.08.2003
Crispy
Равиль
Ого, похоже я и уверен что многие другие уже мильон гуидов нигде не учтенных забрали - как бы не пришлось их сдавать обратно ...

Со скидкой возьмут.

Предлагаю в складчину забрать их как можно больше - появится дефицит, а потом глядишь и с наценкой сможем вернуть


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Тут вот хохмите, панимаиш. \m/

А файлы мало ли куда могут передаваться. Где шуток не понимают.

Лучше бы по-простому рассказали, куда вставляется этот GUID в файле. Наверное, где-то в начале или в конце файла? Или обычно оговаривается, что "со сдвигом N позиций должен находиться GUID", и штоб не паленый!.. :uxm:
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
PaulWist

Сообщений: 14625
Дата регистрации: 01.04.2004
Simple777
Тут вот хохмите, панимаиш. \m/
А файлы мало ли куда могут передаваться. Где шуток не понимают.

Лучше бы по-простому рассказали, куда вставляется этот GUID в файле. Наверное, где-то в начале или в конце файла? Или обычно оговаривается, что "со сдвигом N позиций должен находиться GUID", и штоб не паленый!.. :uxm:

Дык, в имя файла пропиши.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Можно этими ГУИД-ами (в HEX-виде) именовать файлы, чтобы они не перезатирали друг друга, когда валятся в какую-то файлопомойку (некоторые гос-конторы заставляют так именовать входящие файлы) Можно вместо автоинкрементного поля использовать для связи в табличках... Куда сам придумаешь. Это просто 128-битное случайное число, никакого сакрального значения не имеет.
Ratings: 0 negative/0 positive
Re: Что такое GUID и для чего он бывает необходим?
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Симпл, у нас есть приложения, в кот. БД общая для многих предприятий.
Там без GUID было бы ненадежно.
Много лет пользуем
*
*+ Guid - 24-х разрядне
*
FUNCTION Guid
LOCAL lcGUID, lcRES, lnByte, lnIdx, lnPnt, lnResult, lnSymbol, lnSymbolLeft, lnSymbolRight
m.lcGUID=SPACE(24)
DECLARE INTEGER CoCreateGuid IN ole32.DLL STRING @lcGUID

m.lnResult=CoCreateGuid(@m.lcGUID)
m.lcRES=""

FOR m.lnIdx=1 TO 16
DO CASE
* 4 3 2 1
CASE m.lnIdx < 5
lnByte=5-m.lnIdx
* 6 5
CASE m.lnIdx >= 5 AND m.lnIdx < 7
IF m.lnIdx == 5
m.lcRES=m.lcRES+'-'
ENDIF
lnByte=11-m.lnIdx
* 8 7
CASE m.lnIdx >= 7 AND m.lnIdx < 9
IF m.lnIdx == 7
m.lcRES=m.lcRES+'-'
ENDIF
lnByte=15-m.lnIdx
* 9 10
CASE m.lnIdx >= 9 AND m.lnIdx < 11
IF m.lnIdx == 9
m.lcRES=m.lcRES+'-'
ENDIF
lnByte=m.lnIdx
* 11 12 13 14 15 16
OTHERWISE
IF m.lnIdx == 11
m.lcRES=m.lcRES+'-'
ENDIF
lnByte=m.lnIdx
ENDCASE

m.lnSymbol=ASC(SUBSTR(m.lcGUID,lnByte,1))

m.lnSymbolLeft=m.lnSymbol/16
IF m.lnSymbolLeft < 10
m.lnSymbolLeft=m.lnSymbolLeft+ASC('0')
ELSE
m.lnSymbolLeft=m.lnSymbolLeft-10+ASC('A')
ENDIF

m.lnSymbolRight=MOD(m.lnSymbol,16)
IF m.lnSymbolRight < 10
m.lnSymbolRight=m.lnSymbolRight+ASC('0')
ELSE
m.lnSymbolRight=m.lnSymbolRight-10+ASC('A')
ENDIF

m.lcRES=m.lcRES+CHR(m.lnSymbolLeft)+CHR(m.lnSymbolRight)
ENDFOR
m.lnPnt=0

DECLARE INTEGER StringFromCLSID IN ole32.DLL STRING @lcGUID, INTEGER @lnPnt

m.lcRES=SPACE(64)
m.lnResult=StringFromCLSID(@m.lcGUID,@m.lnPnt)
m.lcRES=SYS(2600,m.lnPnt,76)
m.lcRES=STRCONV(STRCONV(m.lcRES,6,1033),2,1033)
m.lcRES=SUBSTR(m.lcRES,2,LEN(m.lcRES)-2)

RETURN m.lcRES

Писал не я, но проблем у нас не было



Исправлено 1 раз(а). Последнее : Ydin, 17.09.21 13:38
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 30 (Гостей: 30)

© 2000-2024 Fox Club 
Яндекс.Метрика