CINXE.COM
查看“︁Module:Citation/CS1/Identifiers”︁的源代码 - 维基百科,自由的百科全书
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-disabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-not-available" lang="zh" dir="ltr"> <head> <meta charset="UTF-8"> <title>查看“︁Module:Citation/CS1/Identifiers”︁的源代码 - 维基百科,自由的百科全书</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-disabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-not-available";var cookie=document.cookie.match(/(?:^|; )zhwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":true,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat": "dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"d211e608-c931-44d6-88cb-97871c934cd3","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Module:Citation/CS1/Identifiers","wgTitle":"Citation/CS1/Identifiers","wgCurRevisionId":78552782,"wgRevisionId":0,"wgArticleId":5711614,"wgIsArticle":false,"wgIsRedirect":false,"wgAction":"edit","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["带电邮地址的页面"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"Scribunto","wgRelevantPageName":"Module:Citation/CS1/Identifiers","wgRelevantArticleId":5711614,"wgIsProbablyEditable":false,"wgRelevantPageIsProbablyEditable":false,"wgRestrictionEdit":["sysop"],"wgRestrictionMove":["sysop"],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":true,"wgMediaViewerOnClick":true, "wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":60000,"wgCodeEditorCurrentLanguage":"lua","wgRelatedArticlesCompat":[],"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.gadget.large-font":"ready","ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready", "ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.codeEditor.styles":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","mediawiki.ui.button":"ready","ext.charinsert.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.codeEditor","ext.scribunto.edit","mediawiki.action.edit.collapsibleFooter","site","mediawiki.page.ready","skins.vector.js","ext.centralNotice.geoIP","ext.charinsert","ext.gadget.edit0","ext.gadget.Edittools-refToolbar","ext.gadget.WikiMiniAtlas","ext.gadget.UnihanTooltips","ext.gadget.Difflink","ext.gadget.pseudonamespace-UI","ext.gadget.SpecialWikitext","ext.gadget.switcher","ext.gadget.VariantAlly","ext.gadget.AdvancedSiteNotices","ext.gadget.hideConversionTab","ext.gadget.internalLinkHelper-altcolor","ext.gadget.noteTA","ext.gadget.NavFrame", "ext.gadget.collapsibleTables","ext.gadget.scrollUpButton","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.checkUser.clientHints","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=zh&modules=ext.charinsert.styles%7Cext.codeEditor.styles%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediaBadges%7Cext.wikimediamessages.styles%7Cmediawiki.ui.button%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=zh&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=zh&modules=ext.gadget.large-font&only=styles&skin=vector-2022"> <link rel="stylesheet" href="/w/load.php?lang=zh&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.5"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="noindex,nofollow,max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="查看“︁Module:Citation/CS1/Identifiers”︁的源代码 - 维基百科,自由的百科全书"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//zh.m.wikipedia.org/wiki/Module:Citation/CS1/Identifiers"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (zh)"> <link rel="EditURI" type="application/rsd+xml" href="//zh.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://zh.wikipedia.org/wiki/Module:Citation/CS1/Identifiers"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh"> <link rel="alternate" type="application/atom+xml" title="Wikipedia的Atom feed" href="/w/index.php?title=Special:%E6%9C%80%E8%BF%91%E6%9B%B4%E6%94%B9&feed=atom"> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="codeeditor-loading skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-828 ns-subject page-Module_Citation_CS1_Identifiers rootpage-Module_Citation skin-vector-2022 action-edit"><a class="mw-jump-link" href="#bodyContent">跳转到内容</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="站点"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="主菜单" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">主菜单</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">主菜单</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">移至侧栏</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">隐藏</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> 导航 </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Wikipedia:%E9%A6%96%E9%A1%B5" title="访问首页[z]" accesskey="z"><span>首页</span></a></li><li id="n-indexpage" class="mw-list-item"><a href="/wiki/Wikipedia:%E5%88%86%E7%B1%BB%E7%B4%A2%E5%BC%95" title="以分类索引搜寻中文维基百科"><span>分类索引</span></a></li><li id="n-Featured_content" class="mw-list-item"><a href="/wiki/Portal:%E7%89%B9%E8%89%B2%E5%85%A7%E5%AE%B9" title="查看中文维基百科的特色内容"><span>特色内容</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:%E6%96%B0%E8%81%9E%E5%8B%95%E6%85%8B" title="提供当前新闻事件的背景资料"><span>新闻动态</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:%E6%9C%80%E8%BF%91%E6%9B%B4%E6%94%B9" title="列出维基百科中的最近修改[r]" accesskey="r"><span>最近更改</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:%E9%9A%8F%E6%9C%BA%E9%A1%B5%E9%9D%A2" title="随机载入一个页面[x]" accesskey="x"><span>随机条目</span></a></li> </ul> </div> </div> <div id="p-help" class="vector-menu mw-portlet mw-portlet-help" > <div class="vector-menu-heading"> 帮助 </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:%E7%9B%AE%E5%BD%95" title="寻求帮助"><span>帮助</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:%E7%A4%BE%E7%BE%A4%E9%A6%96%E9%A1%B5" title="关于本计划、你可以做什么、应该如何做"><span>维基社群</span></a></li><li id="n-policy" class="mw-list-item"><a href="/wiki/Wikipedia:%E6%96%B9%E9%87%9D%E8%88%87%E6%8C%87%E5%BC%95" title="查看维基百科的方针和指引"><span>方针与指引</span></a></li><li id="n-villagepump" class="mw-list-item"><a href="/wiki/Wikipedia:%E4%BA%92%E5%8A%A9%E5%AE%A2%E6%A0%88" title="参与维基百科社群的讨论"><span>互助客栈</span></a></li><li id="n-Information_desk" class="mw-list-item"><a href="/wiki/Wikipedia:%E7%9F%A5%E8%AF%86%E9%97%AE%E7%AD%94" title="解答任何与维基百科无关的问题的地方"><span>知识问答</span></a></li><li id="n-conversion" class="mw-list-item"><a href="/wiki/Wikipedia:%E5%AD%97%E8%AF%8D%E8%BD%AC%E6%8D%A2" title="提出字词转换请求"><span>字词转换</span></a></li><li id="n-IRC" class="mw-list-item"><a href="/wiki/Wikipedia:IRC%E8%81%8A%E5%A4%A9%E9%A2%91%E9%81%93"><span>IRC即时聊天</span></a></li><li id="n-contact" class="mw-list-item"><a href="/wiki/Wikipedia:%E8%81%94%E7%BB%9C%E6%88%91%E4%BB%AC" title="如何联络维基百科"><span>联络我们</span></a></li><li id="n-about" class="mw-list-item"><a href="/wiki/Wikipedia:%E5%85%B3%E4%BA%8E" title="查看维基百科的简介"><span>关于维基百科</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Wikipedia:%E9%A6%96%E9%A1%B5" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="维基百科" src="/static/images/mobile/copyright/wikipedia-wordmark-zh.svg" style="width: 6.5625em; height: 1.375em;"> <img class="mw-logo-tagline" alt="自由的百科全书" src="/static/images/mobile/copyright/wikipedia-tagline-zh.svg" width="103" height="14" style="width: 6.4375em; height: 0.875em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:%E6%90%9C%E7%B4%A2" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="搜索维基百科[f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>搜索</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="搜索维基百科" aria-label="搜索维基百科" autocapitalize="sentences" title="搜索维基百科[f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:搜索"> </div> <button class="cdx-button cdx-search-input__end-button">搜索</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="个人工具"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="外观"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="更改页面字体大小、宽度和颜色的外观" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="外观" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">外观</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=zh.wikipedia.org&uselang=zh" class=""><span>资助维基百科</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:%E5%88%9B%E5%BB%BA%E8%B4%A6%E6%88%B7&returnto=Module%3ACitation%2FCS1%2FIdentifiers&returntoquery=action%3Dedit" title="我们推荐您创建账号并登录,但这不是强制性的" class=""><span>创建账号</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95&returnto=Module%3ACitation%2FCS1%2FIdentifiers&returntoquery=action%3Dedit" title="建议你登录,尽管并非必须。[o]" accesskey="o" class=""><span>登录</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="更多选项" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="个人工具" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">个人工具</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="用户菜单" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=zh.wikipedia.org&uselang=zh"><span>资助维基百科</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:%E5%88%9B%E5%BB%BA%E8%B4%A6%E6%88%B7&returnto=Module%3ACitation%2FCS1%2FIdentifiers&returntoquery=action%3Dedit" title="我们推荐您创建账号并登录,但这不是强制性的"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>创建账号</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95&returnto=Module%3ACitation%2FCS1%2FIdentifiers&returntoquery=action%3Dedit" title="建议你登录,尽管并非必须。[o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>登录</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> 未登录编辑者的页面 <a href="/wiki/Help:%E6%96%B0%E6%89%8B%E5%85%A5%E9%97%A8" aria-label="了解有关编辑的更多信息"><span>了解详情</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:%E6%88%91%E7%9A%84%E8%B4%A1%E7%8C%AE" title="来自此IP地址的编辑列表[y]" accesskey="y"><span>贡献</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:%E6%88%91%E7%9A%84%E8%AE%A8%E8%AE%BA%E9%A1%B5" title="对于来自此IP地址编辑的讨论[n]" accesskey="n"><span>讨论</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="站点"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <h1 id="firstHeading" class="firstHeading mw-first-heading">查看“︁Module:Citation/CS1/Identifiers”︁的源代码</h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="这篇条目只存在于此语言中。添加其他语言的条目" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-0" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">添加语言</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> <div class="after-portlet after-portlet-lang"><span class="uls-after-portlet-link"></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="命名空间"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-module" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Module:Citation/CS1/Identifiers" title="查看模块页面[c]" accesskey="c"><span>模块</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Module_talk:Citation/CS1/Identifiers" rel="discussion" title="关于此页面的讨论[t]" accesskey="t"><span>讨论</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="更改语言变体" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="查看"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="vector-tab-noicon mw-list-item"><a href="/wiki/Module:Citation/CS1/Identifiers"><span>阅读</span></a></li><li id="ca-viewsource" class="selected vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Module:Citation/CS1/Identifiers&action=edit" title="该页面已被保护。你可以查看该页源码。[e]" accesskey="e"><span>查看源代码</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Module:Citation/CS1/Identifiers&action=history" title="本页面的早前版本。[h]" accesskey="h"><span>查看历史</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="页面工具"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="工具" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">工具</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">工具</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">移至侧栏</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">隐藏</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="更多选项" > <div class="vector-menu-heading"> 操作 </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="vector-more-collapsible-item mw-list-item"><a href="/wiki/Module:Citation/CS1/Identifiers"><span>阅读</span></a></li><li id="ca-more-viewsource" class="selected vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Module:Citation/CS1/Identifiers&action=edit"><span>查看源代码</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Module:Citation/CS1/Identifiers&action=history"><span>查看历史</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> 常规 </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:%E9%93%BE%E5%85%A5%E9%A1%B5%E9%9D%A2/Module:Citation/CS1/Identifiers" title="列出所有与本页相链的页面[j]" accesskey="j"><span>链入页面</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:%E9%93%BE%E5%87%BA%E6%9B%B4%E6%94%B9/Module:Citation/CS1/Identifiers" rel="nofollow" title="页面链出所有页面的更改[k]" accesskey="k"><span>相关更改</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Project:%E4%B8%8A%E4%BC%A0" title="上传图像或多媒体文件[u]" accesskey="u"><span>上传文件</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:%E7%89%B9%E6%AE%8A%E9%A1%B5%E9%9D%A2" title="全部特殊页面的列表[q]" accesskey="q"><span>特殊页面</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Module:Citation/CS1/Identifiers&action=info" title="关于此页面的更多信息"><span>页面信息</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:URL%E7%BC%A9%E7%9F%AD%E7%A8%8B%E5%BA%8F&url=https%3A%2F%2Fzh.wikipedia.org%2Fw%2Findex.php%3Ftitle%3DModule%3ACitation%2FCS1%2FIdentifiers%26action%3Dedit"><span>获取短链接</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fzh.wikipedia.org%2Fw%2Findex.php%3Ftitle%3DModule%3ACitation%2FCS1%2FIdentifiers%26action%3Dedit"><span>下载二维码</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> 在其他项目中 </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q19841691" title="链接到连接的数据仓库项目[g]" accesskey="g"><span>维基数据项目</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="页面工具"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="外观"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">外观</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">移至侧栏</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">隐藏</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> </div> <div id="contentSub"><div id="mw-content-subtitle">←<a href="/wiki/Module:Citation/CS1/Identifiers" title="Module:Citation/CS1/Identifiers">Module:Citation/CS1/Identifiers</a></div></div> <div id="mw-content-text" class="mw-body-content"><p>根据以下的原因,您并无权限去编辑该页面: </p> <ul class="permissions-errors"><li class="mw-permissionerror-protectedpagetext"><style data-mw-deduplicate="TemplateStyles:r83418294">.mw-parser-output .fmbox{clear:both;margin:0.2em 0;width:100%;border:1px solid var(--border-color-base,#a2a9b1);background-color:var(--background-color-interactive-subtle,#f8f9fa);box-sizing:border-box;color:var(--color-base,#202122)}.mw-parser-output .fmbox-system{background-color:var(--background-color-interactive-subtle,#f8f9fa)}.mw-parser-output .fmbox-warning{border:1px solid var(--border-color-destructive--active,#bb7070);background-color:var(--background-color-error-subtle,#ffdbdb)}.mw-parser-output .fmbox-editnotice{background-color:var(--background-color-transparent,transparent)}.mw-parser-output .fmbox .mbox-text{border:none;padding:0.25em 0.9em;width:100%}.mw-parser-output .fmbox .mbox-image{border:none;padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .fmbox .mbox-imageright{border:none;padding:2px 0.9em 2px 0;text-align:center}.mw-parser-output .fmbox .mbox-invalid-type{text-align:center}</style> <table id="mw-protectedpagetext" class="plainlinks fmbox fmbox-system" role="presentation"><tbody><tr><td class="mbox-text"><table class="plainlinks ombox ombox-protection" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/1/12/Full-protection-shackle-block.svg/40px-Full-protection-shackle-block.svg.png" decoding="async" width="40" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/1/12/Full-protection-shackle-block.svg/60px-Full-protection-shackle-block.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/12/Full-protection-shackle-block.svg/80px-Full-protection-shackle-block.svg.png 2x" data-file-width="512" data-file-height="512" /></span></span></td><td class="mbox-text" style="font-weight:bold; font-size:130%;">本页目前被<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D#全保护" title="Wikipedia:保護方針">全保护</a>,只有<a href="/wiki/Wikipedia:%E7%AE%A1%E7%90%86%E5%91%98" title="Wikipedia:管理员">管理员</a>才能进行编辑。</td></tr></tbody></table><div class="mw-heading mw-heading2"><h2 id="为何会出现这种情况?"><span id=".E4.B8.BA.E4.BD.95.E4.BC.9A.E5.87.BA.E7.8E.B0.E8.BF.99.E7.A7.8D.E6.83.85.E5.86.B5.EF.BC.9F"></span>为何会出现这种情况?</h2></div> <ul> <li>部分<a href="/wiki/Wikipedia:%E6%A8%A1%E6%9D%BF%E6%B6%88%E6%81%AF" title="Wikipedia:模板消息">模板</a>及软件的界面由于其<a href="/wiki/Wikipedia:%E9%AB%98%E9%A2%A8%E9%9A%AA%E6%A8%A1%E6%9D%BF" title="Wikipedia:高風險模板">高风险</a>及可见性会被<a href="/wiki/Wikipedia:%E4%BF%9D%E6%8A%A4%E6%96%B9%E9%92%88" class="mw-redirect" title="Wikipedia:保护方针">永久保护</a>。部分页面有时会因为<a href="/wiki/Wikipedia:%E7%BC%96%E8%BE%91%E6%88%98" class="mw-redirect" title="Wikipedia:编辑战">编辑争议</a>而受到保护。 </li> <li>关于本页被保护的理由、时间和类型,請参看<a class="external text" href="https://zh.wikipedia.org/w/index.php?title=Special:Log&type=protect&page=Module%3ACitation%2FCS1%2FIdentifiers">本页的保护日志</a>。如果未能在保护日志中查阅,本页可能是在保护之后被<a href="/wiki/Help:%E9%A1%B5%E9%9D%A2%E9%87%8D%E5%91%BD%E5%90%8D" title="Help:页面重命名">移动</a>。 </li></ul> <div class="mw-heading mw-heading2"><h2 id="我现在可以做些什么?"><span id=".E6.88.91.E7.8E.B0.E5.9C.A8.E5.8F.AF.E4.BB.A5.E5.81.9A.E4.BA.9B.E4.BB.80.E4.B9.88.EF.BC.9F"></span>我现在可以做些什么?</h2></div> <ul> <li>您可以<a href="/wiki/Module_talk:Citation/CS1/Identifiers" title="Module talk:Citation/CS1/Identifiers">和其他人讨论此页</a>。如果您无法编辑讨论页,请到<a href="/wiki/Wikipedia:%E4%BA%92%E5%8A%A9%E5%AE%A2%E6%A0%88/%E6%B1%82%E5%8A%A9" title="Wikipedia:互助客栈/求助">互助客栈</a>求助。 </li> <li>在讨论页提出一个编辑请求,让<a href="/wiki/Wikipedia:%E7%AE%A1%E7%90%86%E5%91%98" title="Wikipedia:管理员">管理员</a>将您想要更改的内容提交上去。 </li><li>若您想移动本页,请按照<a href="/wiki/Wikipedia:%E7%A7%BB%E5%8A%A8%E8%AF%B7%E6%B1%82" class="mw-redirect" title="Wikipedia:移动请求">Wikipedia:移动请求</a>的说明提出。 </li> <li>申请解除页面保护。<span class="skin-invert" style="color:red;">请注意提出请求时须附有合理原因,否则管理员很可能会拒绝您的请求。</span> </li> </ul> <div style="text-align:center; margin:auto;"> <p><span class="plainlinks"><a class="external text" href="https://zh.wikipedia.org/w/index.php?title=Module_talk%3ACitation%2FCS1%2FIdentifiers&preload=Template%3ASubmit+an+edit+request%2Fpreload&action=edit&section=new&editintro=Template%3AEditprotected%2Feditintro&nosummary=1&preloadtitle=&preloadparams%5B%5D=+%E7%B7%A8%E8%BC%AF%E8%AB%8B%E6%B1%82+2024-11-28+"><span class="mw-ui-button mw-ui-progressive" role="button">提出代为编辑请求</span></a></span> <span class="plainlinks"><a class="external text" href="https://zh.wikipedia.org/w/index.php?title=Draft:Module:Citation/CS1/Identifiers&action=edit&preload=Module%3ACitation%2FCS1%2FIdentifiers&summary=撰写受保护页面的草稿"><span class="mw-ui-button mw-ui-progressive" role="button">撰写草稿</span></a></span> <span class="plainlinks"><a class="external text" href="https://zh.wikipedia.org/w/index.php?title=Wikipedia:%E8%AF%B7%E6%B1%82%E4%BF%9D%E6%8A%A4%E9%A1%B5%E9%9D%A2&action=edit&section=new&preload=Template:请求解除保护/auto2&nosummary=1&preloadparams%5B%5D=Module%3ACitation%2FCS1%2FIdentifiers"><span class="mw-ui-button mw-ui-destructive" role="button">提出解除页面保护</span></a></span> </p> </div></td></tr></tbody></table></li><li class="mw-permissionerror-blockedtext"> <table id="mw-blocked-text" style="border:1px solid var(--border-color-notice,rgba(0,0,0,0.4)); border-radius: 3px; width:100%; margin:0 auto 6px auto; padding: 0;"> <tbody><tr> <td> <div style="width:100%; text-align:center; margin: 1.3em 0 1.3em 0;"><div style="font-size:1.6em; color:var(--color-error,rgba(221,51,51,1));"><b>您現在使用的IP地址目前不能編輯維基百科</b></div> <div style="text-align: center;"><div style="display: inline-block; padding: 0 2em; border-radius: 3px;"><b>您可以瀏覽頁面</b>,但不能編輯或建立頁面</div></div> </div> <div style="margin:auto; width:70%;"> <div style="text-align:justify;"> <p>目前,IP地址區段「<u>8.222.0.0/16</u>」已被Jimmy-abot<b><a href="/wiki/Wikipedia:BLOCK" class="mw-redirect" title="Wikipedia:BLOCK">封禁</a></b>,而您所使用的IP地址正位於被封禁的範圍內。該IP地址區段被封禁的 </p> <div style="margin:1em; background: var(--background-color-neutral,#eaecf0); padding:0.6em 2em; border:0px var(--border-color-notice,#666) solid; border-radius: 3px;" id="mw-blocked-text-reason"> <div style="color: var(--color-progressive--active,rgba(42,75,141,1))">封禁理由:</div> <div style="color: var(--color-error,rgba(221,51,51,1)); margin:0.5em 1em"> <table class="user-block" style="border: 1px solid var(--border-color-base,#AAA); padding: 0.5em; width: 100%;"> <tbody><tr> <td> <figure class="mw-halign-left" typeof="mw:File"><a href="/wiki/File:Banned_proxys.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/f/f0/Banned_proxys.svg/50px-Banned_proxys.svg.png" decoding="async" width="50" height="50" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/f0/Banned_proxys.svg/75px-Banned_proxys.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/f0/Banned_proxys.svg/100px-Banned_proxys.svg.png 2x" data-file-width="480" data-file-height="480" /></a><figcaption></figcaption></figure>您正在使用的<a href="/wiki/IP%E4%BD%8D%E5%9D%80" class="mw-redirect" title="IP位址">IP地址</a>被判定用于代理工具,因此这一IP已经被封禁。 <p>为防止破坏,<b><a href="https://meta.wikimedia.org/wiki/No_open_proxies/zh" class="extiw" title="m:No open proxies/zh">维基媒体基金会禁止使用部分代理工具来编辑维基百科</a></b>。 </p> </td></tr> <tr> <td style="border-top: 1px solid #AAA; padding-top: 0.5em;"> <p><b>为什么?</b> </p><p>您当前访问维基百科使用的IP被我们判定为代理(包括<a href="/wiki/%E7%AA%81%E7%A0%B4%E7%BD%91%E7%BB%9C%E5%AE%A1%E6%9F%A5" title="突破网络审查">突破网络审查</a>)工具所使用的IP。因代理工具可以隐藏用户的真实IP,使破坏者可以以人工或程序对维基百科进行破坏,故禁止使用公共代理工具进行编辑。 </p><p><b>怎么办?</b> </p> <ul><li>直接访问维基百科,不经过代理服务。</li> <li>如果您在中国大陆而必须使用代理服务器,或是有特殊需要,请您 <span class="plainlinks"><a href="/wiki/Wikipedia:Unblock-zh/Blocked_proxy" class="mw-redirect" title="Wikipedia:Unblock-zh/Blocked proxy"><span class="mw-ui-button mw-ui-progressive" role="button">使用网站</span></a></span> 或者 <span class="plainlinks"><a href="/wiki/Wikipedia:IPBEMAIL" class="mw-redirect" title="Wikipedia:IPBEMAIL"><span class="mw-ui-button mw-ui-progressive" role="button">使用电邮</span></a></span> 申请IP封禁豁免。带有此权限的用户可以使用被封禁的代理编辑维基百科。</li> <li>如果您相信自己并未运行或使用代理,那很可能是因为上一个从<a href="/wiki/%E4%BA%92%E8%81%94%E7%BD%91%E6%9C%8D%E5%8A%A1%E4%BE%9B%E5%BA%94%E5%95%86" title="互联网服务供应商">互联网服务供应商</a>分配到此IP地址的用户运行了代理。那么请在您的<a href="/wiki/Help:%E8%AE%A8%E8%AE%BA%E9%A1%B5" class="mw-redirect" title="Help:讨论页">讨论页</a>使用{{<a href="/wiki/Template:Unblock" title="Template:Unblock">unblock</a>}}模板申请解除封禁。极少数情况下,您的网络设备或服务提供商可能未进行正确配置,或已被恶意软件(如病毒)入侵。</li> <li>您如果无法自行解决问题,可至<a href="/wiki/Wikipedia:IRC%E8%81%8A%E5%A4%A9%E9%A2%91%E9%81%93" title="Wikipedia:IRC聊天频道">IRC聊天频道</a>寻求其他编者的帮助。</li></ul> </td></tr></tbody></table> </div> <div style="color: var(--color-progressive--active,rgba(42,75,141,1))">這次封禁的結束時間是:<b>2025年7月23日 (三) 10:52 (<a href="/wiki/UTC" class="mw-redirect" title="UTC">UTC</a>)</b></div> </div> <p>如您对此封禁有疑问或异议,您可以: </p> <div style="margin:1em; background: var(--background-color-neutral,#eaecf0); color: var(--color-progressive--active,rgba(42,75,141,1)); padding:0.6em 2em; border:0px var(--border-color-notice,#666 solid); border-radius: 3px;"> <div style="margin-bottom: 0.4em;"><b>网站申诉</b>:前往<a rel="nofollow" class="external text" href="https://unblock-zh.org/new/zhwp">-{R|https://unblock-zh.org/new/zhwp}-</a>,如果您没有账户,请选择“无法创建账户”。如果您有账户,请选择“已有账户,但无法编辑”。在页面下方的“IP地址和IPBE”一节,请您选择“检测并提供我的IP地址信息,同时申请IPBE权限”。如果您使用代理/翻墙工具,请确保您开启全局模式,以保证我们获得您的准确IP信息。管理员将手工处理您的请求。</div> <div style="margin-bottom: 0.4em;"><b>邮件申诉</b>:将您的用户名和申诉理由写入电子邮件,发送至 <b><samp>unblock-zh<span class="skin-invert" typeof="mw:File"><span title="@"><img alt="@" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/b5/Nospam_at.svg/12px-Nospam_at.svg.png" decoding="async" width="12" height="12" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/b/b5/Nospam_at.svg/18px-Nospam_at.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b5/Nospam_at.svg/24px-Nospam_at.svg.png 2x" data-file-width="16" data-file-height="16" /></span></span>lists.wikimedia.org</samp></b>。管理员将在收到邮件后考虑您的请求。请注意邮件发送可能会有延时,请勿重复多次发送。</div> <div class="user-show"><b>联络管理员</b>:聯絡<a href="/wiki/Special:%E7%94%B5%E9%82%AE%E8%81%94%E7%B3%BB/Jimmy-abot" title="Special:电邮联系/Jimmy-abot">执行封禁的管理员Jimmy-abot</a>或者其他的<a href="/wiki/Wikipedia:%E7%AE%A1%E7%90%86%E5%91%98%E5%90%8D%E5%8D%95#在任管理员" title="Wikipedia:管理员名单">管理員</a>,討論這次封禁。如果您希望使用「電郵用戶」功能聯絡管理員,請注意您必须已于您的<a href="/wiki/Special:%E5%8F%82%E6%95%B0%E8%AE%BE%E7%BD%AE" title="Special:参数设置">参数设置</a>中設定了一個有效的電子郵件地址,并且在管理员执行封禁时没有被禁止发送电子邮件。</div></div> <p>您目前的IP地址是8.222.208.146,而該封鎖ID是#566341。請您在所有申訴中註明此IP地址及封鎖ID。 </p><p><br /> </p> <div style="height: 2em;"></div> </div></div> </td></tr></tbody></table></li><li class="mw-permissionerror-globalblocking-blockedtext-range"><b>您的IP地址属于已<a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/Global_blocks" class="extiw" title="m:Special:MyLanguage/Global blocks">在所有维基媒体基金会维基受到封禁</a>的地址段。</b> <p>封禁执行者是<a href="/wiki/User:Jon_Kolbert" title="User:Jon Kolbert">Jon Kolbert</a>。封禁原因是<i><a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/NOP" class="extiw" title="m:Special:MyLanguage/NOP">Open proxy/Webhost</a>: See the <a href="https://meta.wikimedia.org/wiki/WM:OP/H" class="extiw" title="m:WM:OP/H">help page</a> if you are affected </i>。 </p> <ul><li>封禁开始时间:2023年8月27日 (日) 15:12</li> <li>封禁期满时间:2028年8月27日 (日) 15:12</li></ul> <p>您当前的IP地址是8.222.208.146。封禁的地址段是8.222.128.0/17。 </p> 请在进行咨询时提供上面所有详情。如果您认为您受到错误封禁,您可以在<a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/No_open_proxies" class="extiw" title="m:Special:MyLanguage/No open proxies">禁止公开代理</a>全域方针里找到更多信息和说明。您也可以<a href="https://meta.wikimedia.org/wiki/Steward_requests/Global" class="extiw" title="m:Steward requests/Global">到元维基发布复查申请</a>讨论该封禁。您还可以给<a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/Stewards" class="extiw" title="m:Special:MyLanguage/Stewards">监管员</a><a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/VRT" class="extiw" title="m:Special:MyLanguage/VRT">VRT</a>队列(<kbd>stewards@wikimedia.org</kbd>)发送提供上面所有详情的电子邮件。</li></ul><hr /> <p>您可以查看和复制此页面的源代码。 </p><textarea readonly="" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" class="mw-editfont-monospace" lang="en" dir="ltr" name="wpTextbox1">--[[--------------------------< F O R W A R D D E C L A R A T I O N S >-------------------------------------- ]] local is_set, in_array, wrap_style; -- functions in Module:Citation/CS1/Utilities local append_error, set_error, throw_error, select_one, add_maint_cat; -- functions in Module:Citation/CS1/Error local make_internal_link; -- functions in Module:Citation/CS1/Links local is_valid_date_from_a_point; -- functions in Module:Citation/CS1/Date_validation local cfg; -- table of configuration tables that are defined in Module:Citation/CS1/Configuration local wd_int_lang = (mw.site.server:match ('wikidata') and mw.getCurrentFrame():preprocess('{{int:lang}}')) or ''; --============================<< H E L P E R F U N C T I O N S >>============================================ --[[--------------------------< E X T E R N A L _ L I N K _ I D >---------------------------------------------- Formats a wiki style external link 警告:该函数与英文站CS1模块中相应函数不兼容,请勿盲目替换! ]] local function external_link_id(options) local url_string = options.link_id or options.id; local ext_link; if options.encode == true or options.encode == nil then url_string = mw.uri.encode( url_string ); end ext_link = mw.ustring.format( '[%s%s%s <span title=\"%s\">%s%s%s</span>]', options.prefix, url_string, options.suffix or "", options.link, options.label, options.separator or "&nbsp;", mw.text.nowiki(options.id) ); if is_set (options.access) then ext_link = wrap_style ('access-signal', {ext_link, cfg.presentation[options.access]}); -- add the free-to-read / paywall lock end return ext_link; end --[[--------------------------< I N T E R N A L _ L I N K _ I D >---------------------------------------------- Formats a wiki style internal link ]] local function internal_link_id(options) return mw.ustring.format( '[[%s%s%s|<span title=\"%s\">%s</span>%s%s]]', options.prefix, options.id, options.suffix or "", options.link, options.label, options.separator or "&nbsp;", mw.text.nowiki(options.id) ); end --[[--------------------------< I S _ E M B A R G O E D >------------------------------------------------------ Determines if a PMC identifier's online version is embargoed. Compares the date in |embargo= against today's date. If embargo date is in the future, returns the content of |embargo=; otherwise, returns and empty string because the embargo has expired or because |embargo= was not set in this cite. ]] local function is_embargoed (embargo) if is_set (embargo) then local lang = mw.getContentLanguage(); local good1, embargo_date, good2, todays_date; good1, embargo_date = pcall( lang.formatDate, lang, 'U', embargo ); good2, todays_date = pcall( lang.formatDate, lang, 'U' ); if good1 and good2 then -- if embargo date and today's date are good dates if tonumber( embargo_date ) >= tonumber( todays_date ) then -- is embargo date is in the future? return embargo; -- still embargoed else add_maint_cat ('embargo') return ''; -- unset because embargo has expired end end end return ''; -- |embargo= not set return empty string end --[[--------------------------< IS _ V A L I D _ C H I N E S E _ B O O K _ C A T E G O R Y >---------------------- 检查是否为GB/T 9999.1-2018附表B.1规定的合法图书分类 ]] local function is_valid_Chinese_book_category (str) return in_array (str, { "A", "B", "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B80", "B82", "B83", "B84", "B9", "C", "C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C91", "C92", "C93", "C94", "C95", "C96", "C97", "D", "D0", "D1", "D2", "D33", "D4", "D5", "D6", "D73", "D8", "D9", "DF", "E", "E0", "E1", "E2", "E3", "E8", "E9", "E99", "F", "F0", "F1", "F2", "F3", "F4", "F49", "F5", "F59", "F6", "F7", "F8", "G", "G0", "G1", "G2", "G3", "G4", "G8", "H", "H0", "H1", "H2", "H3", "H4", "H5", "H61", "H62", "H63", "H64", "H65", "H66", "H67", "H7", "H81", "H83", "H84", "H9", "I", "I0", "I1", "I2", "I3", "I7", "J", "J0", "J1", "J19", "J2", "J29", "J3", "J4", "J5", "J59", "J6", "J7", "J8", "J9", "K", "K0", "K1", "K2", "K3", "K4", "K5", "K6", "K7", "K81", "K85", "K89", "K9", "N", "N0", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N79", "N8", "N91", "N93", "N94", "N99", "O", "O1", "O3", "O4", "O6", "O7", "P", "P1", "P2", "P3", "P4", "P5", "P6", "P7", "P9", "Q", "Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q81", "Q89", "Q91", "Q93", "Q94", "Q95", "Q96", "Q98", "R", "R1", "R2", "R3", "R4", "R5", "R6", "R71", "R72", "R73", "R74", "R75", "R76", "R77", "R78", "R79", "R8", "R9", "S", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "T", "TB", "TD", "TE", "TF", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TP", "TQ", "TS", "TU", "TV", "U", "U1", "U2", "U4", "U6", "U8", "V", "V1", "V2", "V4", "V7", "X", "X1", "X2", "X3", "X4", "X5", "X7", "X8", "X9", "Z" }); end --[[--------------------------< IS _ V A L I D _ I S X N >----------------------------------------------------- ISBN-10 and ISSN validator code calculates checksum across all isbn/issn digits including the check digit. ISBN-13 is checked in isbn(). If the number is valid the result will be 0. Before calling this function, issbn/issn must be checked for length and stripped of dashes, spaces and other non-isxn characters. ]] local function is_valid_isxn (isxn_str, len) local temp = 0; isxn_str = { isxn_str:byte(1, len) }; -- make a table of byte values '0' → 0x30 .. '9' → 0x39, 'X' → 0x58 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 (compares the byte value of 'X' which is 0x58) 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 --[[--------------------------< IS _ V A L I D _ I S X N _ 1 3 >----------------------------------------------- ISBN-13 and ISMN validator code calculates checksum across all 13 isbn/ismn digits including the check digit. If the number is valid, the result will be 0. Before calling this function, isbn-13/ismn must be checked for length and stripped of dashes, spaces and other non-isxn-13 characters. ]] local function is_valid_isxn_13 (isxn_str) local temp=0; isxn_str = { isxn_str:byte(1, 13) }; -- make a table of byte values '0' → 0x30 .. '9' → 0x39 for i, v in ipairs( isxn_str ) do temp = temp + (3 - 2*(i % 2)) * tonumber( string.char(v) ); -- multiply odd index digits by 1, even index digits by 3 and sum; includes check digit end return temp % 10 == 0; -- sum modulo 10 is zero when isbn-13/ismn is correct end --[[--------------------------< N O R M A L I Z E _ L C C N >-------------------------------------------------- lccn normalization (http://www.loc.gov/marc/lccn-namespace.html#normalization) 1. Remove all blanks. 2. If there is a forward slash (/) in the string, remove it, and remove all characters to the right of the forward slash. 3. If there is a hyphen in the string: a. Remove it. b. Inspect the substring following (to the right of) the (removed) hyphen. Then (and assuming that steps 1 and 2 have been carried out): 1. All these characters should be digits, and there should be six or less. (not done in this function) 2. If the length of the substring is less than 6, left-fill the substring with zeroes until the length is six. Returns a normalized lccn for lccn() to validate. There is no error checking (step 3.b.1) performed in this function. ]] local function normalize_lccn (lccn) lccn = lccn:gsub ("%s", ""); -- 1. strip whitespace if nil ~= string.find (lccn,'/') then lccn = lccn:match ("(.-)/"); -- 2. remove forward slash and all character to the right of it end local prefix local suffix prefix, suffix = lccn:match ("(.+)%-(.+)"); -- 3.a remove hyphen by splitting the string into prefix and suffix if nil ~= suffix then -- if there was a hyphen suffix=string.rep("0", 6-string.len (suffix)) .. suffix; -- 3.b.2 left fill the suffix with 0s if suffix length less than 6 lccn=prefix..suffix; -- reassemble the lccn end return lccn; end --============================<< I D E N T I F I E R F U N C T I O N S >>==================================== --[[--------------------------< A R X I V >-------------------------------------------------------------------- See: http://arxiv.org/help/arxiv_identifier format and error check arXiv identifier. There are three valid forms of the identifier: the first form, valid only between date codes 9108 and 0703 is: arXiv:<archive>.<class>/<date code><number><version> where: <archive> is a string of alpha characters - may be hyphenated; no other punctuation <class> is a string of alpha characters - may be hyphenated; no other punctuation; not the same as |class= parameter which is not supported in this form <date code> is four digits in the form YYMM where YY is the last two digits of the four-digit year and MM is the month number January = 01 first digit of YY for this form can only 9 and 0 <number> is a three-digit number <version> is a 1 or more digit number preceded with a lowercase v; no spaces (undocumented) the second form, valid from April 2007 through December 2014 is: arXiv:<date code>.<number><version> where: <date code> is four digits in the form YYMM where YY is the last two digits of the four-digit year and MM is the month number January = 01 <number> is a four-digit number <version> is a 1 or more digit number preceded with a lowercase v; no spaces the third form, valid from January 2015 is: arXiv:<date code>.<number><version> where: <date code> and <version> are as defined for 0704-1412 <number> is a five-digit number ]] local function arxiv (id, class) local handler = cfg.id_handlers['ARXIV']; local year, month, version; local err_cat = false; -- assume no error message local text; -- output text if id:match("^%a[%a%.%-]+/[90]%d[01]%d%d%d%d$") or id:match("^%a[%a%.%-]+/[90]%d[01]%d%d%d%dv%d+$") then -- test for the 9108-0703 format w/ & w/o version year, month = id:match("^%a[%a%.%-]+/([90]%d)([01]%d)%d%d%d[v%d]*$"); year = tonumber(year); month = tonumber(month); if ((not (90 < year or 8 > year)) or (1 > month or 12 < month)) or -- if invalid year or invalid month ((91 == year and 7 > month) or (7 == year and 3 < month)) then -- if years ok, are starting and ending months ok? err_cat = true; -- flag for error message end elseif id:match("^%d%d[01]%d%.%d%d%d%d$") or id:match("^%d%d[01]%d%.%d%d%d%dv%d+$") then -- test for the 0704-1412 w/ & w/o version year, month = id:match("^(%d%d)([01]%d)%.%d%d%d%d[v%d]*$"); year = tonumber(year); month = tonumber(month); if ((7 > year) or (14 < year) or (1 > month or 12 < month)) or -- is year invalid or is month invalid? (doesn't test for future years) ((7 == year) and (4 > month)) then --or -- when year is 07, is month invalid (before April)? err_cat = true; -- flag for error message end elseif id:match("^%d%d[01]%d%.%d%d%d%d%d$") or id:match("^%d%d[01]%d%.%d%d%d%d%dv%d+$") then -- test for the 1501- format w/ & w/o version year, month = id:match("^(%d%d)([01]%d)%.%d%d%d%d%d[v%d]*$"); year = tonumber(year); month = tonumber(month); if ((15 > year) or (1 > month or 12 < month)) then -- is year invalid or is month invalid? (doesn't test for future years) err_cat = true; -- flag for error message end else err_cat = true; -- not a recognized format; flag for error message end err_cat = err_cat and table.concat ({' ', set_error ('bad_arxiv')}) or ''; -- set error message if flag is true text = external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode, access=handler.access}) .. err_cat; if is_set (class) then if id:match ('^%d+') then text = table.concat ({text, ' [[//arxiv.org/archive/', class, ' ', class, ']]'}); -- external link within square brackets, not wikilink else text = table.concat ({text, ' ', set_error ('class_ignored')}); end end return text; end --[[--------------------------< B I B C O D E >-------------------------------------------------------------------- Validates (sort of) and formats a bibcode id. Format for bibcodes is specified here: http://adsabs.harvard.edu/abs_doc/help_pages/data.html#bibcodes But, this: 2015arXiv151206696F is apparently valid so apparently, the only things that really matter are length, 19 characters and first four digits must be a year. This function makes these tests: length must be 19 characters characters in position 1–4 must be digits and must represent a year in the range of 1000 – next year 5 must be a letter 6 must be letter, ampersand, or dot (ampersand cannot directly precede a dot; &. ) 7–8 must be letter, digit, ampersand, or dot (ampersand cannot directly precede a dot; &. ) 9–18 must be letter, digit, or dot 19 must be a letter or dot ]] local function bibcode (id, access) local handler = cfg.id_handlers['BIBCODE']; local err_type; local year; local text = external_link_id({link=handler.link, label=handler.label, q = handler.q, prefix=handler.prefix, id=id, separator=handler.separator, encode=handler.encode, access=access}); if 19 ~= id:len() then err_type = 'length'; else year = id:match ("^(%d%d%d%d)[%a][%a&%.][%a&%.%d][%a&%.%d][%a%d%.]+[%a%.]$") -- if not year then -- if nil then no pattern match err_type = 'value'; -- so value error else local next_year = tonumber(os.date ('%Y'))+1; -- get the current year as a number and add one for next year year = tonumber (year); -- convert year portion of bibcode to a number if (1000 > year) or (year > next_year) then err_type = 'year'; -- year out of bounds end if id:find('&%.') then err_type = 'journal'; -- journal abbreviation must not have '&.' (if it does its missing a letter) end end end if is_set (err_type) then -- if there was an error detected text = text .. ' ' .. set_error( 'bad_bibcode', {err_type}); end return text; end --[[--------------------------< B I O R X I V >----------------------------------------------------------------- Format bioRxiv id and do simple error checking. BiorXiv ids are exactly 6 digits. The bioRxiv id is the number following the last slash in the bioRxiv-issued DOI: https://doi.org/10.1101/078733 -> 078733 2019年底,biorxiv更换新格式,故而有必要兼容新旧两种格式,对该函数作出针对性修改 ]] local function biorxiv (id) local handler = cfg.id_handlers['BIORXIV']; local err_cat = ''; -- presume that bioRxiv id is valid local invalid = false; id = id:gsub ("^10.1101/",""); -- doi前缀10.1101/可填可不填,便利用户使用 if nil == id:match ("^%d%d%d%d%d%d$") then -- 不是旧格式 local date_str; if (nil ~= id:match ("^%d%d%d%d%.[01]%d%.[0-3]%d%.%d%d%d%d%d%d$")) then date_str = id:match ("^(%d%d%d%d%.[01]%d%.[0-3]%d)%.%d%d%d%d%d%d$"); else if (nil ~= id:match ("^%d%d%d%d%.[01]%d%.[0-3]%d%.%d%d%d%d%d%dv%d+$")) then date_str = id:match ("^(%d%d%d%d%.[01]%d%.[0-3]%d)%.%d%d%d%d%d%dv%d+$"); else -- 也不匹配新格式,因而为非法格式 invalid = true; end end if (not invalid) then date_str = date_str:gsub ("%.", "-"); if(not is_valid_date_from_a_point(date_str, 1576022400)) then invalid = true; end end end if (invalid) then err_cat = ' ' .. set_error( 'bad_biorxiv'); -- set an error message end return external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix = handler.prefix, id = "10.1101/" .. id, separator = handler.separator, encode = handler.encode, access = handler.access}) .. err_cat; end --[[--------------------------< C I T E S E E R X >------------------------------------------------------------ CiteSeerX use their own notion of "doi" (not to be confused with the identifiers resolved via doi.org). The description of the structure of this identifier can be found at Help_talk:Citation_Style_1/Archive_26#CiteSeerX_id_structure ]] local function citeseerx (id) local handler = cfg.id_handlers['CITESEERX']; local matched; local text = external_link_id({link=handler.link, label=handler.label, q = handler.q, prefix=handler.prefix, id=id, separator=handler.separator, encode=handler.encode, access=handler.access}); matched = id:match ("^10%.1%.1%.[1-9]%d?%d?%d?%.[1-9]%d?%d?%d?$"); if not matched then text = text .. ' ' .. set_error( 'bad_citeseerx' ); end return text; end --[[--------------------------< C N I D >---------------------------------------------------------------------- 判断国内统一刊号的合法性及输出相关内容 ]] local function cnid (id) local handler = cfg.id_handlers['CNID']; local text; local type = 0; local invalid = false; local AA, BBBB, CC; id = id:gsub ("^CN ?", ""); if nil ~= id:match ("^%d%d%-%d%d%d%d$") then AA, BBBB = id:match ("^(%d%d)%-(%d%d%d%d)$"); else if nil ~= id:match ("^%d%d%-%d%d%d%d/[A-Z0-9]+$") then AA, BBBB, CC = id:match ("^(%d%d)%-(%d%d%d%d)/([A-Z0-9]+)$") else invalid = true; end end if (not invalid) then if not in_array (AA, {"09", "10", "11", -- 北京 "12", "13", "14", "15", -- 华北 "21", "22", "23", -- 东北 "30", "31", "32", "33", "34", "35", "36", "37", -- 华东 "41", "42", "43", "44", "45", "46", -- 华中华南 "50", "51", "52", "53", "54", -- 西南 "61", "62", "63", "64", "65" -- 西北 }) then invalid = true ; else local BBBB_num = tonumber (BBBB); if (BBBB_num >= 1 and BBBB_num <= 999) then type = 1; if (nil ~= CC) then invalid = true; end; else if (BBBB_num >= 1000 and BBBB_num <= 5999) then type = 2; if (not is_valid_Chinese_book_category (CC)) then invalid = true; end else type = 3; if (nil ~= CC and not is_valid_Chinese_book_category (CC)) then invalid = true; end end end end end if (not invalid) and (1 == type) then local link_id = id:gsub ("-",""); text = external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix = handler.prefix, suffix = "&typeNum=1", link_id = link_id, id = id, separator = handler.separator, encode = handler.encode}); else if (not invalid) and (2 == type) then text = external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix = handler.prefix, suffix = "&typeNum=2", id = id, separator = handler.separator, encode = handler.encode}); else text = mw.ustring.format( "<span title=\"%s\">%s%s%s</span>", handler.link, handler.label, handler.separator, mw.text.nowiki (id) ); end end if (invalid) then text = text .. ' ' .. set_error( 'bad_cnid'); end return text; end --[[--------------------------< C S B N >---------------------------------------------------------------------- 判断CSBN的合法性及产生指向豆瓣网的链接。 CSBN格式参考《谈谈国家统一书号与国际标准书号》及最新实例。 ]] local function csbn_checkCatNum (cat) local cat_num = tonumber(cat) return not (cat_num <=0 or cat_num >17) -- 若分类号取值不在1-17范围内,则不合法。 end local function csbn (id) local handler = cfg.id_handlers['CSBN']; local text; local invalid = false; id = id:gsub ("%-","·"); if (nil == id:match ("^[1-9]%d?%d?%d?%d%d%d·%d+$")) then -- CSBN由三部分组成,第一部分为中国人民大学图书分类法代号,取值1-17(前缀不补零); -- 第二部分为出版社代号,三到五位;第三部分为种次号,取值不限。 -- 二、三部分间有小圆点;若取值不合该格式,则不合法。 -- 此外,虽然小圆点用"-"取代不合规定,但误用较多,亦有出版物采用,故兼容。 invalid = true; else local catNumOk = nil local category category = id:match ("^([1-9]%d-)%d?%d?%d%d%d·%d+$"); -- Lua无法非贪婪特定部分或指定重复次数,分别检查 if (nil == catNumOk and nil ~= category) then catNumOk = csbn_checkCatNum(category) end category = id:match ("^([1-9]%d-)%d?%d%d%d·%d+$"); if (nil == catNumOk and nil ~= category) then catNumOk = csbn_checkCatNum(category) end category = id:match ("^([1-9]%d-)d%d%d·%d+$"); if (nil == catNumOk and nil ~= category) then catNumOk = csbn_checkCatNum(category) end invalid = not catNumOk; end -- 豆瓣网以连接号取代小圆点,故替换之。 local link_id = id:gsub ("·","%-"); text = external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix = handler.prefix, link_id = link_id, id = id, separator = handler.separator, encode = handler.encode}); if (invalid) then text = text .. ' ' .. set_error( 'bad_csbn'); end return text; end --[[--------------------------< D O I >------------------------------------------------------------------------ Formats a DOI and checks for DOI errors. DOI names contain two parts: prefix and suffix separated by a forward slash. Prefix: directory indicator '10.' followed by a registrant code Suffix: character string of any length chosen by the registrant This function checks a DOI name for: prefix/suffix. If the doi name contains spaces or endashes, or, if it ends with a period or a comma, this function will emit a bad_doi error message. DOI names are case-insensitive and can incorporate any printable Unicode characters so the test for spaces, endash, and terminal punctuation may not be technically correct but it appears, that in practice these characters are rarely if ever used in doi names. ]] local function doi(id, inactive, access) local cat = "" local handler = cfg.id_handlers['DOI']; local text; if is_set(inactive) then local inactive_year = inactive:match("%d%d%d%d") or ''; -- try to get the year portion from the inactive date if is_set(inactive_year) then set_error('doi_inactive_dated', {inactive_year}); else set_error('doi_inactive'); -- when inactive doesn't contain a recognizable year end inactive = " (" .. cfg.messages['inactive'] .. " " .. inactive .. ")" end text = external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode, access=access}) .. (inactive or '') if nil == id:match("^10%.[^%s–]-/[^%s–]-[^%.,]$") then -- doi must begin with '10.', must contain a fwd slash, must not contain spaces or endashes, and must not end with period or comma cat = ' ' .. set_error( 'bad_doi' ); end return text .. cat end --[[--------------------------< H D L >------------------------------------------------------------------------ Formats an HDL with minor error checking. HDL names contain two parts: prefix and suffix separated by a forward slash. Prefix: character string using any character in the UCS-2 character set except '/' Suffix: character string of any length using any character in the UCS-2 character set chosen by the registrant This function checks a HDL name for: prefix/suffix. If the HDL name contains spaces, endashes, or, if it ends with a period or a comma, this function will emit a bad_hdl error message. HDL names are case-insensitive and can incorporate any printable Unicode characters so the test for endashes and terminal punctuation may not be technically correct but it appears, that in practice these characters are rarely if ever used in HDLs. ]] local function hdl(id, access) local handler = cfg.id_handlers['HDL']; local text = external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode, access=access}) if nil == id:match("^[^%s–]-/[^%s–]-[^%.,]$") then -- hdl must contain a fwd slash, must not contain spaces, endashes, and must not end with period or comma text = text .. ' ' .. set_error( 'bad_hdl' ); end return text; end --[[--------------------------< I S B N >---------------------------------------------------------------------- Determines whether an ISBN string is valid ]] local function isbn( isbn_str ) if nil ~= isbn_str:match("[^%s-0-9X]") then return false, 'invalid character'; -- fail if isbn_str contains anything but digits, hyphens, or the uppercase X end isbn_str = isbn_str:gsub( "-", "" ):gsub( " ", "" ); -- remove hyphens and spaces local len = isbn_str:len(); if len ~= 10 and len ~= 13 then return false, 'length'; -- fail if incorrect length end if len == 10 then if isbn_str:match( "^%d*X?$" ) == nil then -- fail if isbn_str has 'X' anywhere but last position return false, 'invalid form'; end return is_valid_isxn(isbn_str, 10), 'checksum'; else if isbn_str:match( "^%d+$" ) == nil then return false, 'invalid character'; -- fail if isbn13 is not all digits end if isbn_str:match( "^97[89]%d*$" ) == nil then return false, 'invalid prefix'; -- fail when isbn13 does not begin with 978 or 979 end return is_valid_isxn_13 (isbn_str), 'checksum'; end end --[[--------------------------< A M A Z O N >------------------------------------------------------------------ Formats a link to Amazon. Do simple error checking: asin must be mix of 10 numeric or uppercase alpha characters. If a mix, first character must be uppercase alpha; if all numeric, asins must be 10-digit isbn. If 10-digit isbn, add a maintenance category so a bot or awb script can replace |asin= with |isbn=. Error message if not 10 characters, if not isbn10, if mixed and first character is a digit. This function is positioned here because it calls isbn() ]] local function asin(id, domain) local err_cat = "" if not id:match("^[%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u]$") then err_cat = ' ' .. set_error ('bad_asin'); -- asin is not a mix of 10 uppercase alpha and numeric characters else if id:match("^%d%d%d%d%d%d%d%d%d[%dX]$") then -- if 10-digit numeric (or 9 digits with terminal X) if isbn( id ) then -- see if asin value is isbn10 add_maint_cat ('ASIN'); elseif not is_set (err_cat) then err_cat = ' ' .. set_error ('bad_asin'); -- asin is not isbn10 end elseif not id:match("^%u[%d%u]+$") then err_cat = ' ' .. set_error ('bad_asin'); -- asin doesn't begin with uppercase alpha end end if not is_set(domain) then domain = "com"; elseif in_array (domain, {'jp', 'uk'}) then -- Japan, United Kingdom domain = "co." .. domain; elseif in_array (domain, {'au', 'br', 'mx'}) then -- Australia, Brazil, Mexico domain = "com." .. domain; end local handler = cfg.id_handlers['ASIN']; return external_link_id({link=handler.link, label=handler.label, q = handler.q, prefix=handler.prefix .. domain .. "/dp/", id=id, encode=handler.encode, separator = handler.separator}) .. err_cat; end --[[--------------------------< I S M N >---------------------------------------------------------------------- Determines whether an ISMN string is valid. Similar to isbn-13, ismn is 13 digits begining 979-0-... and uses the same check digit calculations. See http://www.ismn-international.org/download/Web_ISMN_Users_Manual_2008-6.pdf section 2, pages 9–12. ]] local function ismn (id) local handler = cfg.id_handlers['ISMN']; local text; local valid_ismn = true; local id_copy; id_copy = id; -- save a copy because this testing is destructive id=id:gsub( "[%s-–]", "" ); -- strip spaces, hyphens, and endashes from the ismn if 13 ~= id:len() or id:match( "^9790%d*$" ) == nil then -- ismn must be 13 digits and begin 9790 valid_ismn = false; else valid_ismn=is_valid_isxn_13 (id); -- validate ismn end -- text = internal_link_id({link = handler.link, label = handler.label, -- use this (or external version) when there is some place to link to -- prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode}) text="[[" .. handler.link .. "|" .. handler.label .. "]]" .. handler.separator .. id; -- because no place to link to yet if false == valid_ismn then text = text .. ' ' .. set_error( 'bad_ismn' ) -- add an error message if the issn is invalid end return text; end --[[--------------------------< I S S N >---------------------------------------------------------------------- Validate and format an issn. This code fixes the case where an editor has included an ISSN in the citation but has separated the two groups of four digits with a space. When that condition occurred, the resulting link looked like this: |issn=0819 4327 gives: [http://www.worldcat.org/issn/0819 4327 0819 4327] -- can't have spaces in an external link This code now prevents that by inserting a hyphen at the issn midpoint. It also validates the issn for length and makes sure that the checkdigit agrees with the calculated value. Incorrect length (8 digits), characters other than 0-9 and X, or checkdigit / calculated value mismatch will all cause a check issn error message. The issn is always displayed with a hyphen, even if the issn was given as a single group of 8 digits. ]] local function issn(id, e) local issn_copy = id; -- save a copy of unadulterated issn; use this version for display if issn does not validate local handler; local text; local valid_issn = true; if e then handler = cfg.id_handlers['EISSN']; else handler = cfg.id_handlers['ISSN']; end id=id:gsub( "[%s-–]", "" ); -- strip spaces, hyphens, and endashes from the issn if 8 ~= id:len() or nil == id:match( "^%d*X?$" ) then -- validate the issn: 8 digits long, containing only 0-9 or X in the last position valid_issn=false; -- wrong length or improper character else valid_issn=is_valid_isxn(id, 8); -- validate issn end if true == valid_issn then id = string.sub( id, 1, 4 ) .. "-" .. string.sub( id, 5 ); -- if valid, display correctly formatted version else id = issn_copy; -- if not valid, use the show the invalid issn with error message end text = external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode}) if false == valid_issn then text = text .. ' ' .. set_error( 'bad_issn', e and 'e' or '' ) -- add an error message if the issn is invalid end return text end --[[--------------------------< J F M >----------------------------------------------------------------------- A numerical identifier in the form nn.nnnn.nn ]] local function jfm (id) local handler = cfg.id_handlers['JFM']; local id_num; local err_cat = ''; id_num = id:match ('^[Jj][Ff][Mm](.*)$'); -- identifier with jfm prefix; extract identifier if is_set (id_num) then add_maint_cat ('jfm_format'); else -- plain number without mr prefix id_num = id; -- if here id does not have prefix end if id_num and id_num:match('^%d%d%.%d%d%d%d%.%d%d$') then id = id_num; -- jfm matches pattern else err_cat = ' ' .. set_error( 'bad_jfm' ); -- set an error message end return external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode}) .. err_cat; end --[[--------------------------< L C C N >---------------------------------------------------------------------- Format LCCN link and do simple error checking. LCCN is a character string 8-12 characters long. The length of the LCCN dictates the character type of the first 1-3 characters; the rightmost eight are always digits. http://info-uri.info/registry/OAIHandler?verb=GetRecord&metadataPrefix=reg&identifier=info:lccn/ length = 8 then all digits length = 9 then lccn[1] is lower case alpha length = 10 then lccn[1] and lccn[2] are both lower case alpha or both digits length = 11 then lccn[1] is lower case alpha, lccn[2] and lccn[3] are both lower case alpha or both digits length = 12 then lccn[1] and lccn[2] are both lower case alpha ]] local function lccn(lccn) local handler = cfg.id_handlers['LCCN']; local err_cat = ''; -- presume that LCCN is valid local id = lccn; -- local copy of the lccn id = normalize_lccn (id); -- get canonical form (no whitespace, hyphens, forward slashes) local len = id:len(); -- get the length of the lccn if 8 == len then if id:match("[^%d]") then -- if LCCN has anything but digits (nil if only digits) err_cat = ' ' .. set_error( 'bad_lccn' ); -- set an error message end elseif 9 == len then -- LCCN should be adddddddd if nil == id:match("%l%d%d%d%d%d%d%d%d") then -- does it match our pattern? err_cat = ' ' .. set_error( 'bad_lccn' ); -- set an error message end elseif 10 == len then -- LCCN should be aadddddddd or dddddddddd if id:match("[^%d]") then -- if LCCN has anything but digits (nil if only digits) ... if nil == id:match("^%l%l%d%d%d%d%d%d%d%d") then -- ... see if it matches our pattern err_cat = ' ' .. set_error( 'bad_lccn' ); -- no match, set an error message end end elseif 11 == len then -- LCCN should be aaadddddddd or adddddddddd if not (id:match("^%l%l%l%d%d%d%d%d%d%d%d") or id:match("^%l%d%d%d%d%d%d%d%d%d%d")) then -- see if it matches one of our patterns err_cat = ' ' .. set_error( 'bad_lccn' ); -- no match, set an error message end elseif 12 == len then -- LCCN should be aadddddddddd if not id:match("^%l%l%d%d%d%d%d%d%d%d%d%d") then -- see if it matches our pattern err_cat = ' ' .. set_error( 'bad_lccn' ); -- no match, set an error message end else err_cat = ' ' .. set_error( 'bad_lccn' ); -- wrong length, set an error message end if not is_set (err_cat) and nil ~= lccn:find ('%s') then err_cat = ' ' .. set_error( 'bad_lccn' ); -- lccn contains a space, set an error message end return external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix=handler.prefix,id=lccn,separator=handler.separator, encode=handler.encode}) .. err_cat; end --[[--------------------------< M R >-------------------------------------------------------------------------- A seven digit number; if not seven digits, zero-fill leading digits to make seven digits. ]] local function mr (id) local handler = cfg.id_handlers['MR']; local id_num; local id_len; local err_cat = ''; id_num = id:match ('^[Mm][Rr](%d+)$'); -- identifier with mr prefix if is_set (id_num) then add_maint_cat ('mr_format'); else -- plain number without mr prefix id_num = id:match ('^%d+$'); -- if here id is all digits end id_len = id_num and id_num:len() or 0; if (7 >= id_len) and (0 ~= id_len) then id = string.rep ('0', 7-id_len ) .. id_num; -- zero-fill leading digits else err_cat = ' ' .. set_error( 'bad_mr' ); -- set an error message end return external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode}) .. err_cat; end --[[--------------------------< O C L C >---------------------------------------------------------------------- Validate and format an oclc id. https://www.oclc.org/batchload/controlnumber.en.html {{dead link}} archived at: https://web.archive.org/web/20161228233804/https://www.oclc.org/batchload/controlnumber.en.html ]] local function oclc (id) local handler = cfg.id_handlers['OCLC']; local number; local err_msg = ''; -- empty string for concatenation if id:match('^ocm%d%d%d%d%d%d%d%d$') then -- ocm prefix and 8 digits; 001 field (12 characters) number = id:match('ocm(%d+)'); -- get the number elseif id:match('^ocn%d%d%d%d%d%d%d%d%d$') then -- ocn prefix and 9 digits; 001 field (12 characters) number = id:match('ocn(%d+)'); -- get the number elseif id:match('^on%d%d%d%d%d%d%d%d%d%d+$') then -- on prefix and 10 or more digits; 001 field (12 characters) number = id:match('^on(%d%d%d%d%d%d%d%d%d%d+)$'); -- get the number elseif id:match('^%(OCoLC%)[1-9]%d*$') then -- (OCoLC) prefix and variable number digits; no leading zeros; 035 field number = id:match('%(OCoLC%)([1-9]%d*)'); -- get the number if 9 < number:len() then number = nil; -- contrain to 1 to 9 digits; change this when oclc issues 10-digit numbers end elseif id:match('^%d+$') then -- no prefix number = id; -- get the number if 10 < number:len() then number = nil; -- contrain to 1 to 10 digits; change this when oclc issues 11-digit numbers end end if number then -- proper format id = number; -- exclude prefix, if any, from external link else err_msg = ' ' .. set_error( 'bad_oclc' ) -- add an error message if the id is malformed end local text = external_link_id({link=handler.link, label=handler.label, q = handler.q, prefix=handler.prefix, id=id, separator=handler.separator, encode=handler.encode}) .. err_msg; return text; end --[[--------------------------< O P E N L I B R A R Y >-------------------------------------------------------- Formats an OpenLibrary link, and checks for associated errors. ]] local function openlibrary(id, access) local code; local handler = cfg.id_handlers['OL']; local ident; ident, code = id:match("^(%d+([AMW]))$"); -- optional OL prefix followed immediately by digits followed by 'A', 'M', or 'W'; remove OL prefix if not is_set (ident) then -- if malformed return an error return external_link_id({link=handler.link, label=handler.label, q = handler.q, prefix=handler.prefix .. 'OL', id=id, separator=handler.separator, encode = handler.encode, access = access}) .. ' ' .. set_error( 'bad_ol' ); end id = ident; -- use ident without the optional OL prefix (it has been removed) if ( code == "A" ) then return external_link_id({link=handler.link, label=handler.label, q = handler.q, prefix=handler.prefix .. 'authors/OL', id=id, separator=handler.separator, encode = handler.encode, access = access}) end if ( code == "M" ) then return external_link_id({link=handler.link, label=handler.label, q = handler.q, prefix=handler.prefix .. 'books/OL', id=id, separator=handler.separator, encode = handler.encode, access = access}) end if ( code == "W" ) then return external_link_id({link=handler.link, label=handler.label, q = handler.q, prefix=handler.prefix .. 'works/OL', id=id, separator=handler.separator, encode = handler.encode, access = access}) end end --[[--------------------------< P M C >------------------------------------------------------------------------ Format a PMC, do simple error checking, and check for embargoed articles. The embargo parameter takes a date for a value. If the embargo date is in the future the PMC identifier will not be linked to the article. If the embargo date is today or in the past, or if it is empty or omitted, then the PMC identifier is linked to the article through the link at cfg.id_handlers['PMC'].prefix. PMC embargo date testing is done in function is_embargoed () which is called earlier because when the citation has |pmc=<value> but does not have a |url= then |title= is linked with the PMC link. Function is_embargoed () returns the embargo date if the PMC article is still embargoed, otherwise it returns an empty string. PMCs are sequential numbers beginning at 1 and counting up. This code checks the PMC to see that it contains only digits and is less than test_limit; the value in local variable test_limit will need to be updated periodically as more PMCs are issued. ]] local function pmc(id, embargo) local test_limit = 12000000; -- update this value as PMCs approach local handler = cfg.id_handlers['PMC']; local err_cat = ''; -- presume that PMC is valid local id_num; local text; id_num = id:match ('^[Pp][Mm][Cc](%d+)$'); -- identifier with pmc prefix if is_set (id_num) then add_maint_cat ('pmc_format'); else -- plain number without pmc prefix id_num = id:match ('^%d+$'); -- if here id is all digits end if is_set (id_num) then -- id_num has a value so test it id_num = tonumber(id_num); -- convert id_num to a number for range testing if 1 > id_num or test_limit < id_num then -- if PMC is outside test limit boundaries err_cat = ' ' .. set_error( 'bad_pmc' ); -- set an error message else id = tostring (id_num); -- make sure id is a string end else -- when id format incorrect err_cat = ' ' .. set_error( 'bad_pmc' ); -- set an error message end if is_set (embargo) then -- is PMC is still embargoed? text = table.concat ( -- still embargoed so no external link { make_internal_link (handler.link, handler.label), handler.separator, id, err_cat }); else text = external_link_id({link = handler.link, label = handler.label, q = handler.q, -- no embargo date or embargo has expired, ok to link to article prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode, access=handler.access}) .. err_cat; end return text; end --[[--------------------------< P M I D >---------------------------------------------------------------------- Format PMID and do simple error checking. PMIDs are sequential numbers beginning at 1 and counting up. This code checks the PMID to see that it contains only digits and is less than test_limit; the value in local variable test_limit will need to be updated periodically as more PMIDs are issued. ]] local function pmid(id) local test_limit = 40000000; -- update this value as PMIDs approach local handler = cfg.id_handlers['PMID']; local err_cat = ''; -- presume that PMID is valid if id:match("[^%d]") then -- if PMID has anything but digits err_cat = ' ' .. set_error( 'bad_pmid' ); -- set an error message else -- PMID is only digits local id_num = tonumber(id); -- convert id to a number for range testing if 1 > id_num or test_limit < id_num then -- if PMID is outside test limit boundaries err_cat = ' ' .. set_error( 'bad_pmid' ); -- set an error message end end return external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode}) .. err_cat; end --[[--------------------------< S 2 C I D >-------------------------------------------------------------------- Format an S2CID, do simple error checking S2CIDs are sequential numbers beginning at 1 and counting up. This code checks the S2CID to see that it is only digits and is less than test_limit; the value in local variable test_limit will need to be updated periodically as more S2CIDs are issued. ]] local function s2cid (id, access) local test_limit = 300000000; local handler = cfg.id_handlers['S2CID']; local err_cat = ''; -- presume that S2CID is valid local id_num = id:match ('^[1-9]%d*$'); -- id must be all digits; must not begin with 0; no open access flag if is_set (id_num) then -- id_num has a value so test it id_num = tonumber (id_num); -- convert id_num to a number for range testing if test_limit < id_num then -- if S2CID is outside test limit boundaries err_cat = ' ' .. set_error ('bad_s2cid'); -- set an error message end else -- when id format incorrect err_cat = ' ' .. set_error ('bad_s2cid'); -- set an error message end return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = access}) .. err_cat; end --[[--------------------------< S S R N >---------------------------------------------------------------------- Format an ssrn, do simple error checking SSRNs are sequential numbers beginning at 100? and counting up. This code checks the ssrn to see that it is only digits and is greater than 99 and less than test_limit; the value in local variable test_limit will need to be updated periodically as more SSRNs are issued. ]] local function ssrn (id) local test_limit = 3500000; -- update this value as SSRNs approach local handler = cfg.id_handlers['SSRN']; local err_cat = ''; -- presume that SSRN is valid local id_num; local text; id_num = id:match ('^%d+$'); -- id must be all digits if is_set (id_num) then -- id_num has a value so test it id_num = tonumber(id_num); -- convert id_num to a number for range testing if 100 > id_num or test_limit < id_num then -- if SSRN is outside test limit boundaries err_cat = ' ' .. set_error( 'bad_ssrn' ); -- set an error message end else -- when id format incorrect err_cat = ' ' .. set_error( 'bad_ssrn' ); -- set an error message end text = external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode, access=handler.access}) .. err_cat; return text; end --[[--------------------------< U S E N E T _ I D >------------------------------------------------------------ Validate and format a usenet message id. Simple error checking, looks for 'id-left@id-right' not enclosed in '<' and/or '>' angle brackets. ]] local function usenet_id (id) local handler = cfg.id_handlers['USENETID']; local text = external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode}) if not id:match('^.+@.+$') or not id:match('^[^<].*[^>]$')then -- doesn't have '@' or has one or first or last character is '< or '>' text = text .. ' ' .. set_error( 'bad_message_id' ) -- add an error message if the message id is invalid end return text end --[[--------------------------< Z B L >----------------------------------------------------------------------- A numerical identifier in the form nnnn.nnnnn - leading zeros in the first quartet optional ]] local function zbl (id) local handler = cfg.id_handlers['ZBL']; local err_cat = ''; id = id:gsub ('^[Zz][Bb][Ll]',""); -- identifier with zbl prefix; extract identifier if (nil ~= id:match ("^%d%d%d%d%d%d%d%d$")) then add_maint_cat ('zbl_format'); -- temporary else if (nil == id:match('^%d?%d?%d?%d%.%d%d%d%d%d$')) then -- id doesn't match the pattern err_cat = ' ' .. set_error( 'bad_zbl' ); -- set an error message end end return external_link_id({link = handler.link, label = handler.label, q = handler.q, prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode}) .. err_cat; end --============================<< I N T E R F A C E F U N C T I O N S >>========================================== --[[--------------------------< B U I L D _ I D _ L I S T >-------------------------------------------------------- Takes a table of IDs created by extract_ids() and turns it into a table of formatted ID outputs. inputs: id_list – table of identifiers built by extract_ids() options – table of various template parameter values used to modify some manually handled identifiers ]] local function build_id_list( id_list, options ) local new_list, handler = {}; local function fallback(k) return { __index = function(t,i) return cfg.id_handlers[k][i] end } end; for k, v in pairs( id_list ) do -- k is uc identifier name as index to cfg.id_handlers; e.g. cfg.id_handlers['ISBN'], v is a table -- fallback to read-only cfg handler = setmetatable( { ['id'] = v, ['access'] = options.IdAccessLevels[k] }, fallback(k) ); if handler.mode == 'external' then table.insert( new_list, {handler.label, external_link_id( handler ) } ); elseif handler.mode == 'internal' then table.insert( new_list, {handler.label, internal_link_id( handler ) } ); elseif handler.mode ~= 'manual' then throw_error( 'unknown_ID_mode' ); elseif k == 'ARXIV' then table.insert( new_list, {handler.label, arxiv( v, options.Class ) } ); elseif k == 'ASIN' then table.insert( new_list, {handler.label, asin( v, options.ASINTLD ) } ); elseif k == 'BIBCODE' then table.insert( new_list, {handler.label, bibcode( v, handler.access ) } ); elseif k == 'BIORXIV' then table.insert( new_list, {handler.label, biorxiv( v ) } ); elseif k == 'CITESEERX' then table.insert( new_list, {handler.label, citeseerx( v ) } ); elseif k == 'CNID' then table.insert( new_list, {handler.label, cnid( v ) } ); elseif k == 'CSBN' then table.insert( new_list, {handler.label, csbn( v ) } ); elseif k == 'DOI' then table.insert( new_list, {handler.label, doi( v, options.DoiBroken, handler.access ) } ); elseif k == 'EISSN' then table.insert( new_list, {handler.label, issn( v, true ) } ); -- true distinguishes eissn from issn elseif k == 'HDL' then table.insert( new_list, {handler.label, hdl( v, handler.access ) } ); elseif k == 'ISBN' then local ISBN = internal_link_id( handler ); local check; local err_type = ''; check, err_type = isbn( v ); if not check then if is_set(options.IgnoreISBN) then -- ISBN is invalid; if |ignore-isbn-error= set add_maint_cat ('ignore_isbn_err'); -- ad a maint category else ISBN = ISBN .. set_error( 'bad_isbn', {err_type}, false, " ", "" ); -- else display an error message end elseif is_set(options.IgnoreISBN) then -- ISBN is OK; if |ignore-isbn-error= set add_maint_cat ('ignore_isbn_err'); -- because |ignore-isbn-error= unnecessary end table.insert( new_list, {handler.label, ISBN } ); elseif k == 'ISMN' then table.insert( new_list, {handler.label, ismn( v ) } ); elseif k == 'ISSN' then table.insert( new_list, {handler.label, issn( v ) } ); elseif k == 'JFM' then table.insert( new_list, {handler.label, jfm( v ) } ); elseif k == 'LCCN' then table.insert( new_list, {handler.label, lccn( v ) } ); elseif k == 'MR' then table.insert( new_list, {handler.label, mr( v ) } ); elseif k == 'OCLC' then table.insert( new_list, {handler.label, oclc( v ) } ); elseif k == 'OL' or k == 'OLA' then table.insert( new_list, {handler.label, openlibrary( v, handler.access ) } ); elseif k == 'PMC' then table.insert( new_list, {handler.label, pmc( v, options.Embargo ) } ); elseif k == 'PMID' then table.insert( new_list, {handler.label, pmid( v ) } ); elseif k == 'S2CID' then table.insert( new_list, {handler.label, s2cid( v, handler.access ) } ); elseif k == 'SSRN' then table.insert( new_list, {handler.label, ssrn( v ) } ); elseif k == 'USENETID' then table.insert( new_list, {handler.label, usenet_id( v ) } ); elseif k == 'ZBL' then table.insert( new_list, {handler.label, zbl( v ) } ); else throw_error( 'unknown_manual_ID' ); end end local function comp( a, b ) -- used in following table.sort() return a[1] < b[1]; end table.sort( new_list, comp ); for k, v in ipairs( new_list ) do new_list[k] = v[2]; end return new_list; end --[[--------------------------< E X T R A C T _ I D S >------------------------------------------------------------ Populates ID table from arguments using configuration settings. Loops through cfg.id_handlers and searches args for any of the parameters listed in each cfg.id_handlers['...'].parameters. If found, adds the parameter and value to the identifier list. Emits redundant error message is more than one alias exists in args ]] local function extract_ids( args ) local id_list = {}; -- list of identifiers found in args for k, v in pairs( cfg.id_handlers ) do -- k is uc identifier name as index to cfg.id_handlers; e.g. cfg.id_handlers['ISBN'], v is a table v = select_one( args, v.parameters, 'redundant_parameters' ); -- v.parameters is a table of aliases for k; here we pick one from args if present if is_set(v) then id_list[k] = v; end -- if found in args, add identifier to our list end return id_list; end --[[--------------------------< E X T R A C T _ I D _ A C C E S S _ L E V E L S >-------------------------------------- Fetches custom id access levels from arguments using configuration settings. Parameters which have a predefined access level (e.g. arxiv) do not use this function as they are directly rendered as free without using an additional parameter. ]] local function extract_id_access_levels( args, id_list ) local id_accesses_list = {}; for k, v in pairs( cfg.id_handlers ) do local access_param = v.custom_access; local k_lower = string.lower(k); if is_set(access_param) then local access_level = args[access_param]; if is_set(access_level) then if not in_array (access_level:lower(), cfg.keywords['id-access']) then append_error( 'invalid_param_val', {access_param, access_level}); access_level = nil; end if not is_set(id_list[k]) then append_error( 'param_access_requires_param', {k_lower}); end if is_set(access_level) then access_level = access_level:lower(); end id_accesses_list[k] = access_level; end end end return id_accesses_list; end --[[--------------------------< S E T _ S E L E C T E D _ M O D U L E S >-------------------------------------- Sets local cfg table and imported functions table to same (live or sandbox) as that used by the other modules. ]] local function set_selected_modules (cfg_table_ptr, utilities_page_ptr, error_page_ptr, links_page_ptr, validation_page_ptr) cfg = cfg_table_ptr; is_set = utilities_page_ptr.is_set; in_array = utilities_page_ptr.in_array; wrap_style = utilities_page_ptr.wrap_style; append_error = error_page_ptr.append_error; set_error = error_page_ptr.set_error; throw_error = error_page_ptr.throw_error; select_one = error_page_ptr.select_one; add_maint_cat = error_page_ptr.add_maint_cat; make_internal_link = links_page_ptr.make_internal_link; is_valid_date_from_a_point = validation_page_ptr.is_valid_date_from_a_point; end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { build_id_list = build_id_list, extract_ids = extract_ids, extract_id_access_levels = extract_id_access_levels, is_embargoed = is_embargoed; set_selected_modules = set_selected_modules; } </textarea><div id="mw-scribunto-console"></div><div class="templatesUsed"><div class="mw-templatesUsedExplanation"><p>本页<a href="/wiki/Wikipedia:%E5%B5%8C%E5%85%A5%E5%8C%85%E5%90%AB" title="Wikipedia:嵌入包含">嵌入包含</a>了26个页面: </p></div><ul> <li><a href="/wiki/Template:Documentation_subpage" title="Template:Documentation subpage">Template:Documentation subpage</a>(<a href="/w/index.php?title=Template:Documentation_subpage&action=edit" title="Template:Documentation subpage">查看源代码</a>)(模板保护)</li><li><a href="/wiki/Template:NoteTA" title="Template:NoteTA">Template:NoteTA</a>(<a href="/w/index.php?title=Template:NoteTA&action=edit" title="Template:NoteTA">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">全保护</a>)</li><li><a href="/wiki/Template:NoteTA/MediaWiki" title="Template:NoteTA/MediaWiki">Template:NoteTA/MediaWiki</a>(<a href="/w/index.php?title=Template:NoteTA/MediaWiki&action=edit" title="Template:NoteTA/MediaWiki">查看源代码</a>)(模板保护)</li><li><a href="/wiki/Template:Pipe" title="Template:Pipe">Template:Pipe</a>(<a href="/w/index.php?title=Template:Pipe&action=edit" title="Template:Pipe">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">半保护</a>)</li><li><a href="/wiki/Template:Sandbox_other" title="Template:Sandbox other">Template:Sandbox other</a>(<a href="/w/index.php?title=Template:Sandbox_other&action=edit" title="Template:Sandbox other">查看源代码</a>)(模板保护)</li><li><a href="/wiki/Module:Arguments" title="Module:Arguments">Module:Arguments</a>(<a href="/w/index.php?title=Module:Arguments&action=edit" title="Module:Arguments">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">全保护</a>)</li><li><a href="/wiki/Module:CGroup/MediaWiki_special" title="Module:CGroup/MediaWiki special">Module:CGroup/MediaWiki special</a>(<a href="/w/index.php?title=Module:CGroup/MediaWiki_special&action=edit" title="Module:CGroup/MediaWiki special">查看源代码</a>)(延伸確認保護)</li><li><a href="/wiki/Module:CGroup/core" title="Module:CGroup/core">Module:CGroup/core</a>(<a href="/w/index.php?title=Module:CGroup/core&action=edit" title="Module:CGroup/core">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">全保护</a>)</li><li><a href="/wiki/Module:Citation/CS1/Identifiers" title="Module:Citation/CS1/Identifiers">Module:Citation/CS1/Identifiers</a>(<a href="/w/index.php?title=Module:Citation/CS1/Identifiers&action=edit" title="Module:Citation/CS1/Identifiers">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">全保护</a>)</li><li><a href="/wiki/Module:Citation/CS1/Identifiers/doc" title="Module:Citation/CS1/Identifiers/doc">Module:Citation/CS1/Identifiers/doc</a>(<a href="/w/index.php?title=Module:Citation/CS1/Identifiers/doc&action=edit" title="Module:Citation/CS1/Identifiers/doc">编辑</a>)</li><li><a href="/wiki/Module:Citation/CS1/doc" title="Module:Citation/CS1/doc">Module:Citation/CS1/doc</a>(<a href="/w/index.php?title=Module:Citation/CS1/doc&action=edit" title="Module:Citation/CS1/doc">编辑</a>)</li><li><a href="/wiki/Module:Crc32lua" title="Module:Crc32lua">Module:Crc32lua</a>(<a href="/w/index.php?title=Module:Crc32lua&action=edit" title="Module:Crc32lua">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">全保护</a>)</li><li><a href="/wiki/Module:Documentation" title="Module:Documentation">Module:Documentation</a>(<a href="/w/index.php?title=Module:Documentation&action=edit" title="Module:Documentation">查看源代码</a>)(模板保护)</li><li><a href="/wiki/Module:Documentation/config" title="Module:Documentation/config">Module:Documentation/config</a>(<a href="/w/index.php?title=Module:Documentation/config&action=edit" title="Module:Documentation/config">查看源代码</a>)(模板保护)</li><li><a href="/wiki/Module:Documentation/styles.css" title="Module:Documentation/styles.css">Module:Documentation/styles.css</a>(<a href="/w/index.php?title=Module:Documentation/styles.css&action=edit" title="Module:Documentation/styles.css">查看源代码</a>)(模板保护)</li><li><a href="/wiki/Module:Effective_protection_expiry" title="Module:Effective protection expiry">Module:Effective protection expiry</a>(<a href="/w/index.php?title=Module:Effective_protection_expiry&action=edit" title="Module:Effective protection expiry">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">半保护</a>)</li><li><a href="/wiki/Module:Effective_protection_level" title="Module:Effective protection level">Module:Effective protection level</a>(<a href="/w/index.php?title=Module:Effective_protection_level&action=edit" title="Module:Effective protection level">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">全保护</a>)</li><li><a href="/wiki/Module:File_link" title="Module:File link">Module:File link</a>(<a href="/w/index.php?title=Module:File_link&action=edit" title="Module:File link">查看源代码</a>)(模板保护)</li><li><a href="/wiki/Module:No_globals" title="Module:No globals">Module:No globals</a>(<a href="/w/index.php?title=Module:No_globals&action=edit" title="Module:No globals">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">全保护</a>)</li><li><a href="/wiki/Module:NoteTA" title="Module:NoteTA">Module:NoteTA</a>(<a href="/w/index.php?title=Module:NoteTA&action=edit" title="Module:NoteTA">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">全保护</a>)</li><li><a href="/wiki/Module:Protection_banner" title="Module:Protection banner">Module:Protection banner</a>(<a href="/w/index.php?title=Module:Protection_banner&action=edit" title="Module:Protection banner">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">半保护</a>)</li><li><a href="/wiki/Module:Protection_banner/config" title="Module:Protection banner/config">Module:Protection banner/config</a>(<a href="/w/index.php?title=Module:Protection_banner/config&action=edit" title="Module:Protection banner/config">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">半保护</a>)</li><li><a href="/wiki/Module:Redirect" title="Module:Redirect">Module:Redirect</a>(<a href="/w/index.php?title=Module:Redirect&action=edit" title="Module:Redirect">查看源代码</a>)(模板保护)</li><li><a href="/wiki/Module:String" title="Module:String">Module:String</a>(<a href="/w/index.php?title=Module:String&action=edit" title="Module:String">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">全保护</a>)</li><li><a href="/wiki/Module:WikitextLC" title="Module:WikitextLC">Module:WikitextLC</a>(<a href="/w/index.php?title=Module:WikitextLC&action=edit" title="Module:WikitextLC">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">全保护</a>)</li><li><a href="/wiki/Module:Yesno" title="Module:Yesno">Module:Yesno</a>(<a href="/w/index.php?title=Module:Yesno&action=edit" title="Module:Yesno">查看源代码</a>)(<a href="/wiki/Wikipedia:%E4%BF%9D%E8%AD%B7%E6%96%B9%E9%87%9D" title="Wikipedia:保護方針">全保护</a>)</li></ul></div><p id="mw-returnto">返回<a href="/wiki/Module:Citation/CS1/Identifiers" title="Module:Citation/CS1/Identifiers">Module:Citation/CS1/Identifiers</a>。</p> <!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1&useformat=desktop" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">检索自“<a dir="ltr" href="https://zh.wikipedia.org/wiki/Module:Citation/CS1/Identifiers">https://zh.wikipedia.org/wiki/Module:Citation/CS1/Identifiers</a>”</div></div> <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">隐藏分类:<ul><li><a href="/wiki/Category:%E5%B8%A6%E7%94%B5%E9%82%AE%E5%9C%B0%E5%9D%80%E7%9A%84%E9%A1%B5%E9%9D%A2" title="Category:带电邮地址的页面">带电邮地址的页面</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">隐私政策</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:%E5%85%B3%E4%BA%8E">关于维基百科</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:%E5%85%8D%E8%B4%A3%E5%A3%B0%E6%98%8E">免责声明</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">行为准则</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">开发者</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/zh.wikipedia.org">统计</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie声明</a></li> <li id="footer-places-mobileview"><a href="//zh.m.wikipedia.org/w/index.php?title=Module:Citation/CS1/Identifiers&action=edit&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">手机版视图</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.log.warn("This page is using the deprecated ResourceLoader module \"mediawiki.ui.button\".\n[1.41] Please use Codex. See migration guidelines: https://www.mediawiki.org/wiki/Codex/Migrating_from_MediaWiki_UI");mw.config.set({"wgHostname":"mw-web.codfw.main-6d94db5ff4-tdzgd","wgBackendResponseTime":445,"wgPageParseReport":{"limitreport":{"cputime":"0.134","walltime":"0.196","ppvisitednodes":{"value":956,"limit":1000000},"postexpandincludesize":{"value":42678,"limit":2097152},"templateargumentsize":{"value":2013,"limit":2097152},"expansiondepth":{"value":22,"limit":100},"expensivefunctioncount":{"value":7,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":1028,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 158.932 1 -total"," 79.30% 126.041 1 Template:Protected_page_text/full"," 76.96% 122.311 1 Template:Protected_page_text"," 75.56% 120.091 1 Template:Fmbox"," 16.99% 27.003 1 Template:Mbox"," 16.18% 25.708 1 Template:Submit_an_edit_request"," 14.30% 22.728 16 Template:Lan"," 8.73% 13.871 1 Template:Editnotice_load"," 7.76% 12.335 1 Template:Editnotice_load/content"," 6.54% 10.394 1 Template:Editnotice_load/core"]},"scribunto":{"limitreport-timeusage":{"value":"0.044","limit":"10.000"},"limitreport-memusage":{"value":1887418,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-6d94db5ff4-tdzgd","timestamp":"20241128210743","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>