模板討論:CAS號重定向

由Wong128hk在話題建立CAS號重定向後續討論上作出的最新留言:6 年前

建立CAS號重定向後續討論

編輯
前期工作

 完成:已成立追蹤分類Category:CAS號重定向(搭配模板{{CAS號重定向}} (編輯 討論 說明  資訊 鏈入 歷史-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月19日 (二) 15:47 (UTC)回覆
 完成,先前已完成Category:CAS不正確標誌的條目的校對。(PS:已提出機械人請求:Wikipedia:機械人/作業請求)--Leiem留言2017年12月19日 (二) 15:55 (UTC)回覆

(:)回應分類Category:無CAS號重定向的物質條目應該可以協助機械人運作。-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月20日 (三) 06:39 (UTC)回覆
(~)補充@Wong128hkLeiem乌拉跨氪蘭斯特已根據CAS號#格式寫了一個簡易的校驗函式
例如:
{{#invoke:Chemicals|check_CAS_test|1=7732-18-5}} → true (
{{#invoke:Chemicals|check_CAS_test|1=773332-18-5}} → false
{{#invoke:Chemicals|check_CAS_test|1=77-32-1-8-5}} → false
{{#invoke:Chemicals|check_CAS_test|1=娜娜奇}} → false[開玩笑的]
{{#invoke:Chemicals|check_CAS_test|1=abc-de-f}} → false
{{#invoke:Chemicals|check_CAS_test|1=124-38-9}} → true (二氧化碳
{{#invoke:Chemicals|check_CAS_test|1=125-38-9}} → false
已運用於{{CAS號重定向}} (編輯 討論 說明  資訊 鏈入 歷史,會在建立錯誤的CAS號重定向時將其加入Category:CAS號不正確的重定向。請協助複查
-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月19日 (二) 17:39 (UTC)回覆
(~)補充:由於違反CAS號#格式的重定向一定符合WP:CSD#R3,因此這筆編輯Special:Diff/47445017直接將校驗失敗者掛上{{Delete}} (編輯 討論 說明  資訊 鏈入 歷史@Wong128hk若有違規請回退這筆編輯Special:Diff/47445017-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月19日 (二) 17:42 (UTC)回覆

關於Module:Chemicals裏面校驗副程式,是否有用到d:Property:P231(用於加入CAS號的屬性)的屬性約束格式約束,因為d:Property:P231屬性約束格式約束正規表達式的格式化字串限定符是「[1-9]\d+-\d\d-\d」,見d:Wikidata:Database reports/Constraint_violations/P231#Format的檢測報告--林勇智 2017年12月21日 (四) 12:59 (UTC)回覆

@D2513850不需使用正規表達式,只需要檢查是否為三端由「-」分割組成的數字,以及最後一位校驗碼是否正確,此程式碼的正確性將會高於正規表達式:「因為正規表達式不能做加法乘法與取模核對校驗碼」。-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月21日 (四) 13:04 (UTC)回覆
@D2513850(?)異議一個CAS編號以連字符「-」分為三部分,第一部分有2到7位數字,第二部分有2位數字,第三部分有1位數字作為校驗碼。CAS編號以升序排列且沒有任何內在含義。校驗碼的計算方法如下:CAS順序號(第一、二部分數字)的最後一位乘以1,最後第二位乘以2,依此類推,然後再把所有的乘積相加,再把和除以10,其餘數就是第三部分的校驗碼。舉例來說,水(H2O)的CAS編號前兩部分是7732-18,則其校驗碼= ( 8×1 + 1×2 + 2×3 + 3×4 + 7×5 + 7×6 ) mod 10 = 105 mod 10 = 5(mod是求餘運算符)-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月21日 (四) 13:08 (UTC)回覆
@D2513850(?)異議
  1. 演算法先檢查是否由「-」分割,且為三部分,因此等價於「[1-9]\d+-\d\d-\d
  2. 接着檢查是否每一位都是數字因此等價於「[1-9]\d+-\d\d-\d
  3. 「此部分為該正規表達式的缺陷!!正規表達式並未檢查校驗碼!!」,接着依照CAS順序號(第一、二部分數字)的最後一位乘以1,最後第二位乘以2,依此類推,然後再把所有的乘積相加,再把和除以10,其餘數就與第三部分的校驗碼比對。
-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月21日 (四) 13:19 (UTC)回覆
@a2569875根據CAS號#格式的敘述,d:Property:P231裏面正規表達式的格式化字串的值有錯,應該是[1-9]\d{1,6}-\d\d-\d,另外先做字串格式檢測,若該字串能匹配[1-9]\d{1,6}-\d\d-\d這個正規表達式才做校驗碼檢測。--林勇智 2017年12月21日 (四) 13:54 (UTC)回覆
@D2513850(?)異議多此一舉,只要確定其為由「-」分割的三串數字就夠了。-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月21日 (四) 14:02 (UTC)回覆
@a2569875只要求Module:Chemicals裏面校驗副程式能正確運作就好了--林勇智 2017年12月21日 (四) 14:15 (UTC)回覆
(:)回應@D2513850pseudocode給你,這一定會運作好嗎
 虛擬碼 檢查CAS ( 參數 CAS號 : 字串) ->英語Return_statement 布林字串
      如果 (以「-」分割 CAS號 字串的分割結果)的數量  3
         回傳 「英語False_(logic)宣告 CAS無分割號 : 字串 = 第1個分割區 與 第2個分割區 的字串合併結果
      如果 ( (第1個分割區字數 < 2) 或者 (第1個分割區字數 > 7) )
         回傳 「英語False_(logic)如果  第2個分割區字數  2
         回傳 「英語False_(logic)如果  第3個分割區字數  1
         回傳 「英語False_(logic)宣告 檢查碼 : 整數 = (第3個分割區)轉成整數
      如果 ((第3個分割區)轉成整數 ) 失敗)
         回傳 「英語False_(logic) 
      宣告 檢查總和 : 整數 = 0
      迴圈 足標 i = 從 1 到 CAS無分割號的長度
         宣告 index : 自然數 = CAS無分割號的長度 + 1 - i
         宣告 cas_symbol : 整數 = (CAS無分割號的第index個字)轉成整數
         如果 ((CAS無分割號的第index個字)轉成整數 ) 成功)
             檢查總和 = 檢查總和 + (cas_symbol × i)
         否則 
             回傳 「英語False_(logic)如果  (檢查總和 除以 10 的餘數) = 檢查碼
         回傳 「是」
      否則 
         回傳 「英語False_(logic)
-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月21日 (四) 14:44 (UTC)回覆
(:)回應@D2513850正規表達式根本不可能會具備求和、取餘數並比較校驗碼的能力好嗎,正規表達式非萬能,因為他不是程式語言,只是描述語言。-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月21日 (四) 14:46 (UTC)回覆
(:)回應@a2569875若虛擬碼的如果((第3個分割區)轉成整數)失敗)改成如果(((第3個分割區)轉成整數)失敗)或((CAS無分割號)轉成整數)失敗))的話--林勇智 2017年12月21日 (四) 15:03 (UTC)回覆
(:)回應@D2513850那邊的用途是為了確保「檢查碼」不是Null-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月21日 (四) 15:05 (UTC)回覆
(:)回應@D2513850比如上面故意放娜娜奇去測試,若執行「a = tonumber(娜娜奇)」(一定出錯,因為娜娜奇不是一個數字,a會是Null,這時若直接把a拿去運算會CrashError,因此就讓他直接返回英語Return_statement英語False_(logic)」以避免出錯-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月21日 (四) 15:11 (UTC)回覆
宇帆先停停。另請@WhitePhosphorus來看看代碼是否可行。--Temp3600留言2017年12月21日 (四) 15:16 (UTC)回覆
(:)回應@Temp3600不認為我的演算法有甚麼問題,完全按照CAS號#格式來Implement。-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月21日 (四) 15:22 (UTC)回覆
(:)回應@Temp3600比方說氯酸鈣在這個版本Special:固定連結/44678491,我的程式就有算出其檢查碼應為0 (手算 4×1 + 7×2 + 7×3 + 1×4 + 0×5 + 0×6 + 1×7 = 50, 50 ≡ 0 mod 10),可是條目中卻寫三,我的程式有順利抓出此錯誤,並加入Category:CAS不正確標誌的條目三苯基膦氯化亞金的版本Special:固定連結/41034670中,也有檢查出含非法字元,我的程式有順利抓處此錯誤,並加入Category:CAS不正確標誌的條目-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月21日 (四) 15:37 (UTC)回覆
我不會coding,所以我只能等WhitePhosphorus來判斷。--Temp3600留言2017年12月21日 (四) 19:40 (UTC)回覆
(:)回應@Temp3600我只是覺得感覺現在好像「我講的一切都是錯的」,然後「白磷講的一切都一定是對的」,讓我覺得很難過。拜託不要這樣好嗎,我希望我們還能和平交流-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月21日 (四) 20:41 (UTC)回覆
@A2569875Temp3600沒什麼問題。只不過輸入字符串前後加任意個「-」函數看不出來,例如{{#invoke:Chemicals|check_CAS_test|1=-------2147485-70-7--------}} → false。不過看起來也不是什麼大問題。 --碸中嘌呤的白磷萃取 打譜 2017年12月23日 (六) 03:39 (UTC)回覆

@a2569875檢查CAS(娜娜奇娜娜奇娜-娜奇-1)的結果應該為「假」--林勇智 2017年12月21日 (四) 15:20 (UTC)回覆

(:)回應@D2513850{{#invoke:Chemicals|check_CAS_test|1=娜娜奇娜娜奇娜-娜奇-1}} → false。-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月21日 (四) 15:23 (UTC)回覆
(:)回應@D2513850結果為假。不認為這裏會出甚麼錯。實際上也沒有出錯-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月21日 (四) 15:49 (UTC)回覆
(:)回應@D2513850還有,娜娜奇本來就不是一個數字(如果娜娜奇是一個數字,告訴我數學上 等於多少 = ),所以在第一次迴圈 宣告 cas_symbol : 整數 = (CAS無分割號的第index個字)轉成整數之後的 如果 ((CAS無分割號的第index個字)轉成整數 ) 成功)這邊就會直接因為轉換失敗而返回英語Return_statement英語False_(logic)」,不會進到最後的取餘比對檢查碼程序。-- 宇帆(明年二月加入維基將滿十周年!留言·歡迎簽到·聯絡2017年12月22日 (五) 15:27 (UTC)回覆
目前看來代碼大致沒問題,CAS號的規則應該不會有特例(這句需要專業的解惑),另外@D2513850維基數據裏面的CAS有機械人添加嗎?如果是人手添加我會有擔心手誤的時候,如果有機械人依數據庫添加那較可放心,另@A2569875如果條目沒有輸入CAS碼,而維基數據有可以在條目添加維基數據存在而條目內沒有提供CAS碼,在依人手或機械人添加(這兩個任務是區分的)。--米莉婭諾朵卡 2017年12月22日 (五) 15:14 (UTC)回覆
返回 "CAS號重定向" 頁面。