ניתן ליצור תיעוד על היחידה הזאת בדף יחידה:קוד מזהה/תיעוד
function checkisbn( frame ) local isbn_str = frame.args[1] if nil ~= isbn_str:match("[^%s-0-9X]") then return false end -- fail if isbn_str contains anything but digits, hyphens, or the uppercase X isbn_str = isbn_str:gsub( "-", "" ):gsub( " ", "" ); -- remove hyphens and spaces local len = isbn_str:len(); if len ~= 10 and len ~= 13 then return false; end if len == 10 then if isbn_str:match( "^%d*X?$" ) == nil then return false end return is_valid_isbn(isbn_str, 10) else local temp = 0 if isbn_str:match( "^97[89]%d*$" ) == nil then return false end -- isbn13 begins with 978 or 979 isbn_str = { isbn_str:byte(1, len) } for i, v in ipairs( isbn_str ) do temp = temp + (3 - 2*(i % 2)) * tonumber( string.char(v) ) end return temp % 10 == 0 end end function is_valid_isbn (isxn_str, len) local temp = 0 isxn_str = { isxn_str:byte(1, len) } -- make a table of bytes len = len + 1; -- adjust to be a loop counter for i, v in ipairs( isxn_str ) do -- loop through all of the bytes and calculate the checksum if v == string.byte( "X" ) then -- if checkdigit is X temp = temp + 10*( len - i ) -- it represents 10 decimal else temp = temp + tonumber( string.char(v) ) * (len - i) end end return temp % 11 == 0 -- returns true if calculation result is zero end function pmid(frame) return check(frame.args[1], 30000000) end function rfc(frame) return check(frame.args[1], 10000) end function check(id, test_limit) if id:match("[^%d]") then -- if id has anything but digits return false else local id_num = tonumber(id) -- convert id to a number for range testing if 1 > id_num or test_limit < id_num then -- if id is outside test limit boundaries return false end end return true end -- The code taken from Module:Citation/CS1 and changed return {isbn = checkisbn, pmid = pmid, rfc = rfc}