Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: уникальный индитификатор Добавлено: 14.01.06 17:56  

Автор вопроса:  bas | Web-сайт: www.klyaksa.net
Программа создает файлы, в файл нужно зашить уникальный! индитификатор. Вот как его лучше генерить?

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 14.01.06 18:10
GUID генерь.

Private Declare Sub CoCreateGuid Lib "ole32.dll" (ByRef pguid As GUID)

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 14.01.06 19:45
серийники железа...

Ответить

Номер ответа: 3
Автор ответа:
 bas



Вопросов: 16
Ответов: 30
 Web-сайт: www.klyaksa.net
 Профиль | | #3
Добавлено: 14.01.06 19:49
причем здесь серийники железа...
Прога создает много файлов и каждый файл должен содержать свой ID

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 14.01.06 22:14
в вопросе не указано относительно чего нужна уникальность, если задача - фонарёвый ID, тогда

Randomize Timer
ID = int (rnd * 9999999999)

open file$ for output as #1
Print #1, ID
Close #1

Ответить

Номер ответа: 5
Автор ответа:
 AlexF



Вопросов: 20
Ответов: 113
 Профиль | | #5 Добавлено: 14.01.06 23:15
Уникальный идентефикатор - можно использовать дату ж формате YYYYMMDDHHNNSS. Соответственно, преобразоват'. Например такими функциями:


Function Date2Num(strDate As String) As Long
    On Error GoTo err_hndl
    Dim lngResult As Long

    lngResult = CDate(strDate) - 29220
    MinMaxLong lngResult, -(2 ^ 15 - 2), 2 ^ 15 - 1
    ;Date2Num = lngResult

    Exit Function
err_hndl:
    ;Date2Num = 0
End Function

Public Function Hour2Num(H1 as string) as long
    On Error GoTo err_hndl
    'Do Not Modify These 2 Lines!!!
    
    Dim a, Hr&, mn&, H&
    a = InStr(H1$, ":";)
    If a Then
        Hr& = Abs(Val(H1$))
    End If
    mn& = Val(Mid$(H1$, a + 1))
    H& = 60& * Hr& + mn&
    If InStr(H1$, "-";) Then
        H& = -H&
    End If
    Hour2Num& = H&
    Exit Function
err_hndl:
    Hour2Num=0
End Function

Function Num2Date(lngCurDat) As String
    On Error GoTo err_hndl
    Num2Date$ = Format(lngCurDat + 29220, "dd/MM/yyyy";)
    
    Exit Function
err_hndl:
    Num2Date = ""
End Function

Public Function Num2Hour(N1 as long) as string
    On Error GoTo err_hndl
    
    Dim N&, S$, x$, Hr&, mn&
    
    N& = N1&
    
    If N& = 0 Then
        Num2Hour$ = "__:__"
        Exit Function
    End If
    
    If N& < 0 Then
        N& = -N&
        S$ = "-"
    End If
    
    Hr& = N& \ 60&
    mn& = Abs(N&;) Mod 60&
    x$ = S$ + Trim$(cstr(Hr&;)) + ":" +  Right$("0" & CStr(mn&;), 2)
    If Len(x$) < 5 Then
        x$ = "0" + x$
    End If
    Num2Hour$ = x$
    
    Exit Function
    
err_hndl:
   Num2Hour=""
End Function

Ответить

Номер ответа: 6
Автор ответа:
 bas



Вопросов: 16
Ответов: 30
 Web-сайт: www.klyaksa.net
 Профиль | | #6
Добавлено: 15.01.06 01:46
Ага, ясно, GUID вроде лучше всего...
Во по нему пример нашел:

Private Declare Function CoCreateGuid Lib _
"ole32.dll" (buffer As Byte) As Long

Private Declare Function StringFromGUID2 Lib _
"ole32.dll" (buffer As Byte, ByVal lpsz As Long, _
ByVal cbMax As Long) As Long

Private Function getGUID() As String
Dim buffer(0 To 15) As Byte
Dim s As String
Dim ret As Long
s = String$(128, 0)
' получает численный код
ret = CoCreateGuid(buffer(0))
' преобразуем его в текст,
' используя недокументированную функцию StrPtr
ret = StringFromGUID2(buffer(0), StrPtr(s), 128)
getGUID = Left$(s, ret - 1) ' отсекаем "хвост"
End Function

Ответить

Номер ответа: 7
Автор ответа:
 BUG(O)R



ICQ: 827887 

Вопросов: 13
Ответов: 142
 Web-сайт: hunger.ru
 Профиль | | #7
Добавлено: 15.01.06 09:26
Зачем всё так усложнять, писать какие-то функции?:)
Ты же не пишешь движок для нового криптоалгоритма, где на ГСЧ тратят тонны кода, имхо в данном случае должно быть достатосным что-то типа:

Randomize
num = (Int(Rnd * &H9999999) + 1 * GetTickCount()) / (Second(Time) + 1)

Ответить

Номер ответа: 8
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #8 Добавлено: 15.01.06 09:57
Зачем всё так усложнять, писать какие-то функции?:)

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

Ответить

Номер ответа: 9
Автор ответа:
 BUG(O)R



ICQ: 827887 

Вопросов: 13
Ответов: 142
 Web-сайт: hunger.ru
 Профиль | | #9
Добавлено: 15.01.06 10:50
А ты считаешь вероятность получения одного и того же числа с помощью функции, которую привёл я, практически больше вероятности получения одного и того же ID с помощью функции CoCreateGuid?

Причём если t - частота вызова функции - больше 1 сек., то такая вероятность на практике стремится к нулю и ею можно пренебречь, если же t < 1 сек., то достаточно ввести ещё один случайный фактор(например координаты мыши) или же заменить Second(time) и тогда уж точно можно говорить о нулевой практической вероятности совпадения чисел.

Во-первых всё зависит от поставленной задачи и некоторых аспектов её применения, а во-втоорых я написал "имхо", это субъективное мнение.

Ответить

Номер ответа: 10
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #10
Добавлено: 15.01.06 11:06
А я думаю идея имя создавать по времени вполне сойдет.
Она реализована в цифровиках, некоторых моделей

Ответить

Номер ответа: 11
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #11
Добавлено: 15.01.06 11:08
2BUG(O)R:
         Нет я с твоим вариантом не спорю!
         И правильно, поставленная задача, будет основным решающим
         фактором в решении вопроса!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам