Модуль:Hash
Предоставляет доступ к функции хеширования Scribunto. Используется, например, в {{sfn}}.
Использование
{{#invoke:Hash|main|строка|алгоритм хеширования}}
Серым показаны необязательные параметры.
алгоритм хеширования
по умолчанию — fnv164
(подробнее).
Список доступных алгоритмов хеширования на ноябрь 2017 года (это те же алгоритмы, что доступны в функции hash() PHP 5.4; их список возвращает функция hash_algos()):
<strong class="error"><span class="scribunto-error" id="mw-scribunto-error-0">Ошибка скрипта: Функции «list» не существует.</span></strong>
Примеры
{{#invoke:Hash|main|Строка}}
→ 5e4befd0eef9b1c6{{#invoke:Hash|main|Другая строка}}
→ 28c485cd54fe4ae3{{#invoke:Hash|main|Строка|crc32}}
→ 6c7ee3f8{{#invoke:Hash|main|Строка|crc32b}}
→ b446d853{{#invoke:Hash|main|Строка|md5}}
→ 68a645142f2a51d88ff468bba38aecb3{{#invoke:Hash|main|Строка|unknown_algorithm}}
→ Алгоритм хеширования unknown_algorithm не поддерживается, или вы неточно указали его имя. Используйте функцию mw.hash.listAlgorithms() для получения списка доступных алгоритмов.{{#invoke:Hash|main}}
→ Не указана строка для хеширования.
Технические детали
Алгоритм fnv164
выбран в качестве алгоритма по умолчанию из соображений быстродействия (см. en:Fowler–Noll–Vo hash function), 64-битная функция используется для уменьшения вероятности коллизий до пренебрежимо малой величины. Возможно, есть лучшая опция — проверяйте.
local getArgs = require('Module:Arguments').getArgs
local p = {}
local function inTable(table, value)
for k, v in pairs(table) do
if v == value then
return true
end
end
return false
end
function p.main(frame)
local args = getArgs(frame, { frameOnly = true })
local algorithm
if not args[1] then
return '<span class="error">Не указана строка для хеширования.</span>'
end
if args[2] then
if not inTable(mw.hash.listAlgorithms(), args[2]) then
return '<span class="error">Алгоритм хеширования ' .. args[2] .. ' не поддерживается, или вы неточно указали его имя. Используйте функцию <kbd>mw.hash.listAlgorithms()</kbd> для получения списка доступных алгоритмов.</span>'
end
algorithm = args[2]
else
-- Алгоритм выбран из соображений быстродействия (см. [[:en:Fowler–Noll–Vo hash function]]),
-- 64-битная функция используется для уменьшения вероятности коллизий до пренебрежимо малой
-- величины. Возможно, есть лучшая опция — проверяйте.
algorithm = 'fnv164'
end
return mw.hash.hashValue(algorithm, args[1])
end
return p