Modulo:CAS
local p = {}
local dump = {}
local function check_CAS(cas_string)
--Ritorna true se cas_string è un numero CAS valido.
--cas_string deve essere una stringa di 4-10 cifre senza spazi o altri separatori
if #cas_string<4 or #cas_string>10 then
return false
end
local somma = 0
local moltiplicatore = 0
local not_number = false
local reverse_cas = cas_string.reverse(cas_string)
for c in reverse_cas:gmatch('.') do
cifra = tonumber(c)
if cifra == nil then
not_number = true
else
somma = somma + moltiplicatore * cifra
end
moltiplicatore = moltiplicatore + 1
end
if not_number then return false end
if (somma % 10) == tonumber(cas_string:sub(-1)) then
return true
else
return false
end
end
function p.CAS(frame)
-- Se chiamata mediante #invoke, usa gli argomenti passati al template invocante.
-- Altrimenti a scopo di test assume che gli argomenti siano passati direttamente
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame.args
end
local args = {}
-- unisco i parametri ordinali se più di uno
for _, sub_cas in ipairs(origArgs) do
args[#args+1] = mw.text.trim(sub_cas)
end
cas_string = table.concat(args)
--pulisco da eventuali trattini
cas_string = string.gsub(cas_string, '-', '')
--controllo se è un CAS valido
local check_result = check_CAS(cas_string)
--compongo la stringa di risposta
CAS_formattato = cas_string
error_string = ''
if check_result then
CAS_formattato = cas_string:sub(1, -4) .. '-' .. cas_string:sub(-3, -2) .. '-' .. cas_string:sub(-1)
else
error_string = ' <strong class="error">numero CAS non valido</strong>'
end
reply = '<span class="reflink plainlinksneverexpand"><span class="noarchive">[' ..
tostring(mw.uri.fullUrl('toollabs:magnustools/cas.php',
{['cas']=CAS_formattato, ['language']='it'})) .. ' ' ..
CAS_formattato .. ']</span></span>' .. error_string
return reply
end
return p