Загрузка данных


-- Генерирует UUID v5-подобную строку из входной строки (без внешних библиотек)
function stringToUUID(str)
    -- Вспомогательная функция: 32-битный хеш без битовых операций
    local function hash32(s, seed, mul)
        local h = seed % 4294967296
        for i = 1, #s do
            h = (h * mul + string.byte(s, i)) % 4294967296
        end
        -- Добавляем длину строки для улучшения распределения
        h = (h * mul + #s) % 4294967296
        return h
    end

    -- Четыре разных набора параметров для получения 128 бит
    local h1 = hash32(str, 0x811c9dc5, 16777619)  -- FNV-1a подобный
    local h2 = hash32(str, 0x12345678, 33)
    local h3 = hash32(str, 0x9e3779b9, 65599)
    local h4 = hash32(str, 0x85ebca6b, 31)

    -- Собираем 32 hex символа (big-endian порядок)
    local hex = string.format("%08x%08x%08x%08x", h1, h2, h3, h4)

    -- Вставляем дефисы: 8-4-4-4-12
    local uuid = string.sub(hex, 1, 8) .. "-" ..
                 string.sub(hex, 9, 12) .. "-" ..
                 string.sub(hex, 13, 16) .. "-" ..
                 string.sub(hex, 17, 20) .. "-" ..
                 string.sub(hex, 21, 32)

    -- Устанавливаем версию (5) в третьем блоке (индекс 15 в строке с дефисами)
    -- и вариант RFC 4122 (8) в четвёртом блоке (индекс 20)
    local function setCharAt(s, pos, ch)
        return s:sub(1, pos - 1) .. ch .. s:sub(pos + 1)
    end

    uuid = setCharAt(uuid, 15, '5')  -- версия 5
    uuid = setCharAt(uuid, 20, '8')  -- вариант RFC 4122 (8,9,A,B)

    return uuid
end

-- Пример использования:
print(stringToUUID("DP_SHLAK_GRNL_UST"))
print(stringToUUID("DP_SHLAK_GRNL_UST"))
print(stringToUUID("DP_SHLAK_GRNL_UST"))