Генерация UNID

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
232
@savl
Не хочется Java дёргать или тащить монструозные либы)
 

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
Как обеспечить уникальность 32-х значного ключа без проверок на уникальность?
Так сделайте псевдо-форму в базе с SaveOptions=0 и по http к ней стучитесь form?create. Аяксом забирайте. И в ней всегда будет 32 уникального юнида.
 
Последнее редактирование:

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
232
encryptPassword переписана (причины там, в комментарии).
Теперь всё работает чётко и быстро. На нашем железе переданное содержимое файла 362 kb обрабатывается 0,22 секунды.

Ещё один хак для очень больших данных:

Visual Basic:
%REM
    Function getContentShort
    Description: возвращает "краткое содержимое" переданной строки, получая символы из позиций, рассчитанных по пропорции
    lenRes - количество символов содержимого, которые будут возвращены из файла (больше - точнее, но медленнее)
    Если sHash:
        - "", функция вернёт "";
        - меньше lenRes+3 символов - просто вернёт первые lenRes символов содержимого
%END REM
Public Function getContentShort(sHash As String, lenRes As Integer) As String
    If lenRes <= 0 Then Exit Function
    Dim lenHash As Long
    lenHash = Len(sHash)
    Select Case lenHash
        Case 0:
            Exit Function
        Case 1 To lenRes:
            getContentShort = sHash
        Case Is < lenRes + 3:        'для скорости; вычислять смысла нет при одинаковом-то результате
            getContentShort = Mid$(sHash, 1, lenRes)
        Case Else:
            Dim nMax As Integer, i As Integer, pos As Long
            nMax = lenRes + 1
            For i = 1 To lenRes
                pos = Fix((i / nMax) * lenHash)
                getContentShort = getContentShort + Mid$(sHash, pos, 1)
            Next
    End Select
End Function

Если передать lenRes = 32, то результат как UNID в случае, если была передана строка с Base64, использовать будет невозможно, т.к. там есть спецсимволы. Проще от результата взять тот же хеш, вызвав encryptPassword. Но всё равно для UNID использовать этот хеш стрёмно. Мы используем для защиты от повторных вызовов наших web-сервисов с аналогичными параметрами запроса.

То же содержимое файла 362 kb с lenRes = 32 обрабатывается 0,02 секунды.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!