Module:GenerateID
From TANGOWIKI-TITAF
Documentation for this module may be created at Module:GenerateID/doc
-- Module:GenerateID
-- This module generates the next available TITAF-P-xxxxxxx ID for Person pages
-- and a random unused TITAF-G-xxxxxxx ID for Musical Groups
local p = {}
local digits = 7
function p.personID()
return p._generateSequentialIDFromFixed("TITAF-P-", 9958673)
end
function p.groupID()
return p._generateRandomID("TITAF-G-", "[[Category:MusicalGroups]]", "TITAF%-G%-(%d+)")
end
function p._generateSequentialIDFromFixed(prefix, lastUsedId)
local newId = lastUsedId + 1
return prefix .. string.format("%0" .. digits .. "d", newId)
end
function p._generateRandomID(prefix, category, pattern)
math.randomseed(os.time())
local usedIds = {}
local allPages = mw.smw.ask {
category,
"?=page",
"limit=5000"
}
if allPages then
for _, result in ipairs(allPages) do
local title = result["page"] or ""
local idNum = title:match(pattern)
if idNum then
usedIds[idNum] = true
end
end
end
local attempts = 0
while attempts < 1000 do
local randomNum = math.random(1, 9999999)
local formatted = string.format("%0" .. digits .. "d", randomNum)
if not usedIds[formatted] then
return prefix .. formatted
end
attempts = attempts + 1
end
return prefix .. "ERROR"
end
return p