<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://www.gyimesilaszlo.hu/kemia/index.php?action=history&amp;feed=atom&amp;title=Modul%3ACheckISBN</id>
	<title>Modul:CheckISBN - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://www.gyimesilaszlo.hu/kemia/index.php?action=history&amp;feed=atom&amp;title=Modul%3ACheckISBN"/>
	<link rel="alternate" type="text/html" href="https://www.gyimesilaszlo.hu/kemia/index.php?title=Modul:CheckISBN&amp;action=history"/>
	<updated>2026-04-10T10:27:20Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://www.gyimesilaszlo.hu/kemia/index.php?title=Modul:CheckISBN&amp;diff=19&amp;oldid=prev</id>
		<title>Laci: Új oldal, tartalma: „require &#039;Modul:No globals&#039;  local args = {}  local ou = &#039;&#039; local function pop(...)  -- idézőjeles rész és bővítmények az ou számára 	-- Ha nem kell, ne zabálj…”</title>
		<link rel="alternate" type="text/html" href="https://www.gyimesilaszlo.hu/kemia/index.php?title=Modul:CheckISBN&amp;diff=19&amp;oldid=prev"/>
		<updated>2020-03-24T17:37:27Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „require &amp;#039;Modul:No globals&amp;#039;  local args = {}  local ou = &amp;#039;&amp;#039; local function pop(...)  -- idézőjeles rész és bővítmények az ou számára 	-- Ha nem kell, ne zabálj…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require &amp;#039;Modul:No globals&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local args = {}&lt;br /&gt;
&lt;br /&gt;
local ou = &amp;#039;&amp;#039;&lt;br /&gt;
local function pop(...)  -- idézőjeles rész és bővítmények az ou számára&lt;br /&gt;
	-- Ha nem kell, ne zabálja a memóriát&lt;br /&gt;
	do return end&lt;br /&gt;
	local mi = {...}&lt;br /&gt;
	for _, v in ipairs(mi) do&lt;br /&gt;
		ou = ou .. v .. &amp;#039;\n&amp;#039;&lt;br /&gt;
		mw.log(v)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local hibavan = false&lt;br /&gt;
local kategorizalas_van = false&lt;br /&gt;
&lt;br /&gt;
local function error(kategorizalas_kell, about)&lt;br /&gt;
	-- Enclose errorMsg with &amp;lt;span&amp;gt;&lt;br /&gt;
	-- Precondition:&lt;br /&gt;
	--     about  -- string&lt;br /&gt;
	hibavan = true&lt;br /&gt;
	if kategorizalas_kell then&lt;br /&gt;
		kategorizalas_van = true&lt;br /&gt;
	end  &lt;br /&gt;
	local r = about&lt;br /&gt;
	if type( about ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		if #about == 0 then&lt;br /&gt;
			r = &amp;#039;Lua-hiba&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		r = tostring( about )&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;&amp;#039; .. r .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isISBN10(str)&lt;br /&gt;
	local v, chsum, chnum, chd, i, j, chnumdo, eloirt_hossz&lt;br /&gt;
	v = str:gsub(&amp;#039;[^%d]&amp;#039;, &amp;#039;&amp;#039;) -- a decimális jegyeken kívül mindent figyelmen kívül hagyunk&lt;br /&gt;
	pop(&amp;#039;10&amp;#039;, v)&lt;br /&gt;
	chd = str:sub(-1, -1) -- check digit az utólsó&lt;br /&gt;
	pop(chd)&lt;br /&gt;
	if chd == &amp;#039;X&amp;#039; or chd == &amp;#039;x&amp;#039; or tonumber(chd) ~= nil then&lt;br /&gt;
		if chd == &amp;#039;X&amp;#039; or chd == &amp;#039;x&amp;#039; then&lt;br /&gt;
			chnum = 10&lt;br /&gt;
			eloirt_hossz = 9&lt;br /&gt;
		else&lt;br /&gt;
			chnum = string.byte(chd, 1) - string.byte(&amp;#039;0&amp;#039;, 1)&lt;br /&gt;
			eloirt_hossz = 10&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	pop(chd, chnum)&lt;br /&gt;
	&lt;br /&gt;
	if #v ~= eloirt_hossz then -- kötőjelek nélkül 10 karakter hosszúnak kell lennie&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	v = v:sub(1, 9)&lt;br /&gt;
	&lt;br /&gt;
	pop(v, chd)&lt;br /&gt;
	&lt;br /&gt;
	pop(chnum)&lt;br /&gt;
	chsum = 0&lt;br /&gt;
	for j = 10, 2, -1 do   &lt;br /&gt;
		local elsbyte = string.byte(v, (11 - j))&lt;br /&gt;
		chsum = chsum + (elsbyte - string.byte(&amp;#039;0&amp;#039;, 1)) * (11 - j)&lt;br /&gt;
	end&lt;br /&gt;
	pop(chsum)&lt;br /&gt;
	chnumdo = chsum % 11&lt;br /&gt;
	pop(chnumdo)&lt;br /&gt;
	if chnumdo == chnum then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isISBN13(str)&lt;br /&gt;
	local v, chsum, chnum, chd, i, j, chnumdo&lt;br /&gt;
	v = str:gsub(&amp;#039;[^%d]&amp;#039;, &amp;#039;&amp;#039;) -- a decimális jegyeken kívül mindent figyelmen kívül hagyunk&lt;br /&gt;
	pop(&amp;#039;v_1&amp;#039;, v)&lt;br /&gt;
	chd = str:sub(-1, -1) -- check digit az utolsó&lt;br /&gt;
	pop(&amp;#039;chd_2&amp;#039;, chd)&lt;br /&gt;
	if tonumber(chd) ~= nil then&lt;br /&gt;
		chnum = string.byte(chd, 1) - string.byte(&amp;#039;0&amp;#039;, 1)&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	pop(&amp;#039;chd_3, chnum_1&amp;#039;, chd, chnum)&lt;br /&gt;
	&lt;br /&gt;
	if #v ~= 13 then -- kötőjelek nélkül 13 karakter hosszúnak kell lennie&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	v = string.sub(v, 1, 12)&lt;br /&gt;
	&lt;br /&gt;
	pop(v, chd)&lt;br /&gt;
	&lt;br /&gt;
	local elsbyte&lt;br /&gt;
	chsum = 0&lt;br /&gt;
	for j = 1, 12 do   -- z_13 = (10 - Summa (i=1,12) (z_i*(3^((i+1)%2))%10) %10&lt;br /&gt;
		elsbyte = string.byte(v, j);&lt;br /&gt;
		--pop(elsbyte)&lt;br /&gt;
		chsum = chsum + (elsbyte - string.byte(&amp;#039;0&amp;#039;, 1)) * 3^((j+1)%2)&lt;br /&gt;
		--pop(3^((j+1)%2))&lt;br /&gt;
	end&lt;br /&gt;
	pop(chsum)&lt;br /&gt;
	chnumdo = (10 - chsum % 10) % 10&lt;br /&gt;
	pop(chnumdo)&lt;br /&gt;
	if chnumdo == chnum then&lt;br /&gt;
		pop(&amp;quot;true&amp;quot;)&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		pop(&amp;quot;true&amp;quot;)&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isI(str)&lt;br /&gt;
	local v, eloirt_hossz&lt;br /&gt;
	v = str:gsub(&amp;#039;[^%dXx]&amp;#039;, &amp;#039;&amp;#039;) -- a decimális jegyeken kívül mindent figyelmen kívül hagyunk&lt;br /&gt;
	pop(v)&lt;br /&gt;
	eloirt_hossz = 10&lt;br /&gt;
	pop(&amp;#039;előírt hossza&amp;#039;, eloirt_hossz)&lt;br /&gt;
	if #v == eloirt_hossz then&lt;br /&gt;
		pop(&amp;#039;tízes&amp;#039;)&lt;br /&gt;
		return isISBN10(str)&lt;br /&gt;
	elseif #v &amp;gt; eloirt_hossz then&lt;br /&gt;
		pop(&amp;#039;tizenhármas&amp;#039;)&lt;br /&gt;
		return isISBN13(str)&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isISBN(str, link, no_isbn)&lt;br /&gt;
	if type(str) ~= &amp;#039;string&amp;#039; then&lt;br /&gt;
		return error(false, &amp;#039;Nem string bemenet az isISBN függvénynek&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local vizsgalandok = {}&lt;br /&gt;
	str = str:gsub(&amp;#039;[^%d%,Xx -]&amp;#039;, &amp;#039;&amp;#039;) -- minden ki, ami nem számjegy, vessző, X/x, szóköz vagy kötőjel&lt;br /&gt;
	--[=[&lt;br /&gt;
	local elso_szelet, masodik_szelet&lt;br /&gt;
	elso_szelet = string.sub(str,1,-2)&lt;br /&gt;
	masodik_szelet = string.sub(str,-1,-1)&lt;br /&gt;
	pop(&amp;quot;elso_szelet, masodik_szelet&amp;quot;,elso_szelet,masodik_szelet)&lt;br /&gt;
	&lt;br /&gt;
	if masodik_szelet == &amp;#039;X&amp;#039; then &lt;br /&gt;
		elso_szelet=string.gsub(elso_szelet,&amp;#039;[%a&amp;lt;&amp;gt;%[%]%-%(%)%/%=%&amp;quot;]&amp;#039;,&amp;#039;&amp;#039;) -- (str,&amp;#039;[^%d%,X,x]&amp;#039;,&amp;#039;&amp;#039;)&lt;br /&gt;
		elso_szelet=string.gsub(elso_szelet,&amp;quot;ó&amp;quot;,&amp;#039;&amp;#039;)&lt;br /&gt;
		str = elso_szelet ..  masodik_szelet&lt;br /&gt;
	else &lt;br /&gt;
		str=string.gsub(str,&amp;#039;[%a&amp;lt;&amp;gt;%[%]%-%(%)%/%=%&amp;quot;]&amp;#039;,&amp;#039;&amp;#039;) -- (str,&amp;#039;[^%d%,X,x]&amp;#039;,&amp;#039;&amp;#039;)&lt;br /&gt;
		str=string.gsub(str,&amp;quot;ó&amp;quot;,&amp;#039;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	--]=]&lt;br /&gt;
	pop(&amp;#039;str a ballaszt nélkül&amp;#039;, str)&lt;br /&gt;
	for w in str:gmatch(&amp;#039;[^%,]+&amp;#039;) do&lt;br /&gt;
		w = mw.text.trim(w)&lt;br /&gt;
		pop(&amp;#039;w&amp;#039;, w .. &amp;#039;\n&amp;#039;)  &lt;br /&gt;
		if w ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			table.insert(vizsgalandok, w)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local s = {}&lt;br /&gt;
	local s_nyers = {}&lt;br /&gt;
	local h = {}&lt;br /&gt;
	local h_nyers = {}&lt;br /&gt;
	local helyes = true&lt;br /&gt;
	local formatstring&lt;br /&gt;
	if link and no_isbn then&lt;br /&gt;
		formatstring = &amp;#039;[[Speciális:Könyvforrások/%s|%s]]&amp;#039;&lt;br /&gt;
	elseif link then&lt;br /&gt;
		formatstring = &amp;#039;[[Speciális:Könyvforrások/%s|ISBN&amp;amp;nbsp;%s]]&amp;#039;&lt;br /&gt;
	elseif no_isbn then&lt;br /&gt;
		formatstring = &amp;#039;%s&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		formatstring = &amp;#039;ISBN %s&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	for _, vi in ipairs(vizsgalandok) do&lt;br /&gt;
		if isI(vi) then&lt;br /&gt;
			table.insert(s, string.format(formatstring, vi:gsub(&amp;#039;[ -]&amp;#039;, &amp;#039;&amp;#039;), vi:gsub(&amp;#039; &amp;#039;, &amp;#039;&amp;amp;nbsp;&amp;#039;)))&lt;br /&gt;
			table.insert(s_nyers, vi)&lt;br /&gt;
			pop(&amp;#039;helyes előrehaladása&amp;#039;, table.concat(s, &amp;#039;, &amp;#039;))&lt;br /&gt;
		else&lt;br /&gt;
			helyes = false&lt;br /&gt;
			table.insert(h, error(true, &amp;#039;helytelen ISBN kód&amp;#039;) .. &amp;#039;: &amp;#039; .. vi)&lt;br /&gt;
			table.insert(h_nyers, vi)&lt;br /&gt;
			pop(&amp;#039;hibás előrehaladása&amp;#039;, table.concat(h, &amp;#039;, &amp;#039;))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	s = table.concat(s, &amp;#039;, &amp;#039;)&lt;br /&gt;
	h = table.concat(h, &amp;#039;, &amp;#039;)&lt;br /&gt;
    return helyes, s, h, s_nyers, h_nyers&lt;br /&gt;
end -- isISBN   &lt;br /&gt;
&lt;br /&gt;
local function _checkISBN(args)&lt;br /&gt;
	local jo_lista, mind&lt;br /&gt;
	local alkategoriak = {}&lt;br /&gt;
	local isbn = args[1]&lt;br /&gt;
	local link = (args.link ~= nil)&lt;br /&gt;
	local no_isbn = (args[&amp;#039;isbn szöveg nélkül&amp;#039;] ~= nil)&lt;br /&gt;
	local hiba_jelzes = &amp;#039;&amp;#039;&lt;br /&gt;
	local milyen_lista = args[2]&lt;br /&gt;
&lt;br /&gt;
	pop(&amp;#039;a kapott argumentum&amp;#039;, isbn)&lt;br /&gt;
	pop(&amp;#039;linkelve?&amp;#039;, tostring(link))&lt;br /&gt;
	-- ISBN lekezelése&lt;br /&gt;
	if isbn then &lt;br /&gt;
		pop(&amp;#039;van isbn paraméter&amp;#039;, isbn)&lt;br /&gt;
		--isbn=string.gsub(isbn,&amp;quot;ISBN&amp;quot;,&amp;#039;&amp;#039;) -- a beleírt ISBN szövegeket kivesszük&lt;br /&gt;
		local helyes&lt;br /&gt;
		helyes, isbn, hiba_jelzes = isISBN(isbn, link, no_isbn)&lt;br /&gt;
		&lt;br /&gt;
		if helyes then&lt;br /&gt;
			pop(&amp;#039;helyesek a paraméterek&amp;#039;)&lt;br /&gt;
		end                       &lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if milyen_lista then &lt;br /&gt;
		mind = false&lt;br /&gt;
		jo_lista = (milyen_lista == &amp;#039;jólista&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		mind = true &lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- output összeállítása&lt;br /&gt;
	local s&lt;br /&gt;
	if isbn then&lt;br /&gt;
		if hiba_jelzes then&lt;br /&gt;
			if mind then&lt;br /&gt;
				s = isbn&lt;br /&gt;
				if hibavan then&lt;br /&gt;
					s = s ..&amp;#039; &amp;#039; .. hiba_jelzes&lt;br /&gt;
					-- a fölérendelt kategória marad hiba esetén&lt;br /&gt;
					if kategorizalas_van then s = s .. &amp;#039; [[Kategória:Lapok helytelen ISBN kóddal]]&amp;#039; end&lt;br /&gt;
				end&lt;br /&gt;
			else  &lt;br /&gt;
				if jo_lista then&lt;br /&gt;
					s = isbn&lt;br /&gt;
				elseif hibavan then&lt;br /&gt;
					s = hiba_jelzes&lt;br /&gt;
					-- a fölérendelt kategória marad hiba esetén&lt;br /&gt;
					if kategorizalas_van then s = s .. &amp;#039; [[Kategória:Lapok helytelen ISBN kóddal]]&amp;#039; end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
	-- if ou  then s = s..ou  end --ez csak nyomkövetésnél kell, de akkor nagyon&lt;br /&gt;
	-- s = s .. mw.dumpObject(args) &lt;br /&gt;
	return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function run(frame)&lt;br /&gt;
	args = require(&amp;#039;Modul:Arguments&amp;#039;).getArgs(frame)&lt;br /&gt;
	return _checkISBN(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {&lt;br /&gt;
	run = run,&lt;br /&gt;
	isISBN = isISBN,&lt;br /&gt;
	argumentumok = args&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Laci</name></author>
	</entry>
</feed>