Модуль:Hash

З Вікіпедыі, свабоднай энцыклапедыі

Дакументацыю да гэтага модуля можна стварыць у Модуль:Hash/Дакументацыя

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.list(frame)
	return table.concat(mw.hash.listAlgorithms(), '; ')
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