Python ISBN号概述,校验位计算,10位-13位转换,验证,连字符,及常用库isbnid,isbnlib,isbntools的使用
ISBN概述
因為工作原因經常需要用到ISBN。ISBN是國際標準書號的簡稱(International Standard Book Number),主要用于標識文獻,也即是文獻的“身份證號”,通過查詢ISBN號可以獲取唯一的某一種書。
ISBN大致可以分為10位和13位ISBN,在2007年1月1日前用的是10位ISBN,之后用的13位ISBN。兩者最顯著的區別一是在10位ISBN前加上“978”或“979”,二是校驗位的算法發生了變化。
ISBN算是國際商品編碼的一個子集,一般在書的封底看見的條形碼就是ISBN,其實我們看到10位的ISBN的書時,封底上的ISBN也是帶978的,只不過以前978是默認的,當10位ISBN編號快用光的時候,又新增了979開頭的ISBN,這時候為了區分編號,只能帶上開始的這三位商品編碼了,隨之而來的最后一位校驗位也發生了變化。
以現行的13位ISBN為例:9787111267768
這是《Python學習手冊》第三版的ISBN號。ISBN號可以用-隔開,可以分為5段。
978-7-111-26776-8
第一段,978為商品代碼。圖書一般就是978,新點的是979,這是固定的3位。
第二段,7為國家、語言或者地區代碼。中國為7,國別碼為1-5位,按語言或國家劃分,國別碼越短后面能用的號碼就越多,也即能代表的出版社和圖書就越多。
第三段,111為出版社編碼。出版社編碼2-5位,編碼越短說明能出版的書就越多。比如111就是機械工業出版社的代號,所以看到978-7-111這樣的ISBN就說明都是機械工業出版社出版的書。
第四段,26776為書序編碼。就指的是某本書在出版社的編碼,直接能夠確定到書。
第五段,8為校驗位。校驗位只有1位。
10位 ISBN檢驗位計算
10位ISBN的校驗方法為,去掉978和最后一位的校驗位,9位數字從左到右,分別與10到2相乘,然后求和,得到的和再對11進行整除,得到余數(即對11進行取模運算),再用11減去余數即為校驗位。如果結果為10用X表示,余數為0,校驗位位0。
例如,用13位ISBN9787111267768進行10位ISBN校驗位的運算,去掉商品碼978和校驗位8,中間的9位為711126776。710+19+18+17+26+65+74+73+6*2,和為197,197%11為10,11-10為1,即上述ISBN用10位ISBN表示應該為7111267761
13位 ISBN檢驗位計算
13位ISBN的校驗采用奇偶校驗。方法與10位校驗位類似。去掉最后一位的校驗位,保留前12位數字。12位數字從左到右,奇數位乘1,偶數位乘3,然后求和,得到的和再對10進行整除,得到余數(即對11進行取模運算),再用10減去余數即為校驗位,余數為0校驗位即為0。13位ISBN校驗位只有0-9。
例如,用13位ISBN9787111267768進行13位ISBN校驗位的運算,去掉校驗位8,其余的12位為978711126776。91+73+81+73+11+13+11+23+61+73+71+63,和為122,122%10為2,10-2為8,即上述ISBN用13位ISBN表示應該為9787111267768
ISBN常見Python庫
正常的話帶連字符-的ISBN看起來很清晰,但是大家都懶嘛,現在各大網站基本上都沒有連字符-,就13位數字,所以經常需要轉換。
網上有很多Python版的ISBN處理代碼,但是功能相對比較簡單,比如上面提到的13位ISBN分段,實現起來就比較麻煩,所以盡量還是用現成的庫吧。在PyPI上查了下,主流的有isbnid,isbnlib,isbntools
功能最簡單的是isbnid,功能強大的有isbnlib和isbntools,isbntools使用isbnlib作為內核,加入了命令行工具,直接可以使用而不是編碼。
isbnid
安裝:
pip install isbnid
1
常見使用功能如下:
導入庫,庫名為isbn
import isbn
初始化對象,并檢測ISBN有效性,如果輸入的ISBN有問題會報錯。默認為13位ISBN,輸入10位ISBN會自動進行轉換。
isbnid = isbn.ISBN(“9787111267768”)
10位ISBN轉換
isbnid.isbn10()
#結果為’7111267761’
13位ISBN轉換
isbnid.isbn13()
#結果為’9787111267768’
URN轉換
isbnid.urn()
#結果為’URN:ISBN:9787111267768’
ISBN加連字符
isbnid.hyphen()
#結果為’978-7-111-26776-8’
ISBN校驗
isbnid.valid("‘978-7-111-26776-8’")
#結果為True
isbnlib
安裝:
pip install isbnlib
1
常見使用功能如下:
導入庫,庫名為isbnlib
import isbnlib
13位ISBN驗證
isbnlib.is_isbn13(“9787111267768”)
#結果為True
10位ISBN驗證
isbnlib.is_isbn10(“7111267761”)
#結果為True
10位ISBN轉換為13位
isbnlib.to_isbn13(“7111267761”)
#結果為’9787111267768’
13位ISBN轉換為10位
isbnlib.to_isbn10(“9787111267768”)
#結果為’7111267761’
生成純數字的ISBN號,需要注意的是連字符錯誤也能正常生成。
isbnlib.canonical(“978-7-111-26-7-76-8”)
#結果為’9787111267768’
ISBN加連字符
isbnlib.mask(‘9787111267768’, separator=’-’)
#結果為’978-7-111-26776-8’
查詢ISBN的語言或國家信息
isbnlib.info(‘9787111267768’)
#“China, People’s Republic”
#提取ISBN號
isbnlib.get_isbnlike(‘好嗎天,ISBN:9787111267768你好’, level=‘normal’)
#結果為[‘9787111267768’]
#清除非法字符
isbnlib.clean(‘好嗎天,ISBN:9787111267768你好’)
#結果為’ISBN9787111267768’
isbnlib還有很多其他強大的功能,不過大多只能用于谷歌或者美國的圖書。
總結
以上是生活随笔為你收集整理的Python ISBN号概述,校验位计算,10位-13位转换,验证,连字符,及常用库isbnid,isbnlib,isbntools的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: abcd ab cd 2c语言,整数趣题
- 下一篇: 软件测试课设总结报告,软件测试课设感言