for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
  

Что такое GUID и для чего он бывает необходим?
Simple777
Автор

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

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


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

Re: Что такое GUID и для чего он бывает необходим?
Владимир Максимов

Сообщений: 13911
Откуда: Москва
Дата: 17.09.21 01:12:56
Гм... Как-то ты странно прочитал. Выборочно...

Цитата:
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
Автор

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

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

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

Сообщений: 31645
Дата: 17.09.21 07:47:15
Вот тут нашёл более или менее подробное описание GUID

infostart.ru

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

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



Исправлено: Simple777, 17.09.21 07:48
Ratings: 0 negative/0 positive

Re: Что такое GUID и для чего он бывает необходим?
PaulWist

Сообщений: 13795
Дата: 17.09.21 07:58:27
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 и для чего он бывает необходим?
Равиль

Сообщений: 6401
Откуда: Уфа
Дата: 17.09.21 09:15:21
Вещь очень нужная для обмена - где-то тут взял - работает уже много лет :

  
  ? 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

Сообщений: 21729
Откуда: Н.Новгород
Дата: 17.09.21 09:18:57
> 128-битовую последлвательность

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

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

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

Re: Что такое GUID и для чего он бывает необходим?
Crispy

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

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


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive

Re: Что такое GUID и для чего он бывает необходим?
Равиль

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

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


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive

Re: Что такое GUID и для чего он бывает необходим?
of63

Сообщений: 21729
Откуда: Н.Новгород
Дата: 17.09.21 09:56:06
128-битного случайного числа "хватит всем" на все, никто их не запоминает...
Ratings: 0 negative/0 positive

Re: Что такое GUID и для чего он бывает необходим?
AngelOKES

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

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

Re: Что такое GUID и для чего он бывает необходим?
Crispy

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

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


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive

Re: Что такое GUID и для чего он бывает необходим?
Crispy

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

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


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive

Re: Что такое GUID и для чего он бывает необходим?
of63

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

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

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

Re: Что такое GUID и для чего он бывает необходим?
Равиль

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

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

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


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive

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

Сообщений: 31645
Дата: 17.09.21 11:20:08
Тут вот хохмите, панимаиш. \m/

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

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

Re: Что такое GUID и для чего он бывает необходим?
PaulWist

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

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

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


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive

Re: Что такое GUID и для чего он бывает необходим?
of63

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

Re: Что такое GUID и для чего он бывает необходим?
Ydin

Сообщений: 7169
Откуда: Киев
Дата: 17.09.21 13:37:02
Симпл, у нас есть приложения, в кот. БД общая для многих предприятий.
Там без 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

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



Исправлено: Ydin, 17.09.21 13:38
Ratings: 0 negative/0 positive



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

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

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