(Translated by https://www.hiragana.jp/)
モジュール:Check ncid - Wikipedia コンテンツにスキップ

モジュール:Check ncid

半永久的に拡張半保護されているモジュール

このLuaモジュールは、あたえられた文字もじれつNII書誌しょしID(NCID)として適切てきせつかどうかを検査けんさします。先頭せんとう末尾まつび空白くうはく文字もじるい除去じょきょしたのち文字もじれつ以下いかしめ条件じょうけんをすべてたしていれば検査けんさ合格ごうかくします。

  • 10文字もじからなる
  • 先頭せんとう2文字もじは「AA」「AB」「AN」「BA」「BB」「BC」「BD」「BN」のいずれか
  • そのつぎの7文字もじは0から9までのいずれかの数字すうじ
  • 末尾まつびの1文字もじ(チェックディジット)はXもしくは0から9までのいずれかの数字すうじ
  • https://catill.bitbucket.io/CM/furoku2_1.html の「IDおよびBHNT(前後ぜんごデータID)」のこう記載きさいされているデータチェックに適合てきごうする

使つかかた

#invokeで

{{#invoke:Check ncid|main| 検査けんさ対象たいしょう識別子しきべつし }}

テンプレートからとうモジュールを使用しようする場合ばあいは、上記じょうきのようにしてmain関数かんすうしてください。検査けんさ合格ごうかくすればmain関数かんすう空文字くうもじれつかえし、合格ごうかくであれば文字もじれつerrorかえします。したがってテンプレートがわで#ifぶんや#switchぶんなどを記述きじゅつすれば、合格ごうかく場合ばあい合格ごうかく場合ばあい処理しょりけることができます。

のモジュールから使用しようする

local result = require('モジュール:Check ncid').check_ncid(id)  -- idは検査けんさ対象たいしょう文字もじれつ

のモジュールからとうモジュールを利用りようする場合ばあいは、check_ncid関数かんすうすことで検査けんさおこなえます。check_ncid関数かんすうだい1引数ひきすうわたされた文字もじれつについて検査けんさおこない、検査けんさ合格ごうかくすればブールtrueかえし、合格ごうかくであればブールfalseかえします。

関連かんれん項目こうもく

require('strict')
local p = {}

function p.check_ncid(id)
	--[[
	-- NII書誌しょしID(NCID)の検査けんさおこな
	-- 文字もじれつidがNCIDとして有効ゆうこうであればtrueを、
	-- そうでなければfalseをかえ
	-- 検査けんさ方法ほうほうについては https://catill.bitbucket.io/CM/furoku2_1.html の「IDおよびBHNT(前後ぜんごデータID)」のこう参照さんしょう
	]]--
	id = id:match('^%s*([AB][A-DN]%d%d%d%d%d%d%d[%dX])%s*$')
	if not id then return false end
	
	local c1, c2 = id:byte(1, 2)
	if c1 == 65 and (c2 == 67 or c2 == 68) then
		return false	-- 'AC'もしくは'AD'ではじまるidは無効むこう
	end
	
	local work = (c1 - 64) % 10 * 9 + (c2 - 64) % 10 * 8
	for i= 3, 9 do
		work = work + tonumber(id:sub(i, i)) * (10 - i)
	end
	local c = id:sub(10, 10)
	
	return work % 11 == (c == 'X' and 10 or tonumber(c))
end

function p.main(frame)
	return p.check_ncid(frame.args[1] or '') and '' or 'error'
end

return p