Python ISBN号概述,校验位计算,10位-13位转换,验证,连字符,及常用库isbnid,isbnlib,isbntools的使用

2023-05-16

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。7*10+1*9+1*8+1*7+2*6+6*5+7*4+7*3+6*2,和为197197%1110,11-101,即上述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。9*1+7*3+8*1+7*3+1*1+1*3+1*1+2*3+6*1+7*3+7*1+6*3,和为122122%102,10-28,即上述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

常见使用功能如下:

# 导入库,库名为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

常见使用功能如下:

# 导入库,库名为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还有很多其他强大的功能,不过大多只能用于谷歌或者美国的图书。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python ISBN号概述,校验位计算,10位-13位转换,验证,连字符,及常用库isbnid,isbnlib,isbntools的使用 的相关文章

  • windows下编译64位ffmpeg的问题。以64位 zlib为例

    x264 265 等等10几个库都很顺利的编译过去了 xff0c zlib的64位库在vs2015下下编译通过了 放到ffmpeg环境里 死活找不到 卡了我整整两天 怎么折腾 xff0c 始终提升error zlib requested b
  • windows11安装kali linux子系统

    一 开启windows子系统 打开控制面板 系统和安全 程序 程序和功能 启用或关闭Windows功能 适用于linux的Windows子系统 打勾 在微软商店搜索Kali 下载安装并打开 二 配置子系统 刚安装完成的Kali Linux是
  • 使用 Ajax 发送的PUT、DELETE请求

    一 方式一 xff1a 将 POST 请求转化为相应的 PUT 和 DELETE 请求 1 在 Web xml 中添加如下配置 xff1a 用于将 POST 请求转化为相应的 PUT 和 DELETE 请求 lt filter gt lt
  • python+pycharm+pyqt5安装教程

    现在教大家在Windows系统下如何安装Python 43 PyCharm 43 PyQt5 1 安装Python 访问官网https www python org xff0c 下载对应Python版本 2 安装PyQt5 1 xff09
  • pytest+seleniumUI自动化框架设计

    前言 selenium自动化 43 pytest测试框架 本章你需要 一定的python基础 一定的selenium基础 不讲selenium xff0c 不会的自己去看selenium中文翻译网 测试框架简介 测试框架有什么优点呢 xff
  • selenium的UI自动化时遇到了谷歌浏览器与驱动不兼容的问题解决方案

    问题背景 xff1a 在做selenium的UI自动化时 xff0c 遇到了谷歌浏览器与驱动不兼容的问题 去很多其他网站下载谷歌浏览器驱动 xff0c 结果下载下来的都是2 23版本的 xff08 困扰了很久啊 xff0c 一群骗子 xff
  • 如何使用apipost做接口测试?

    今天给大家推荐一款好用的接口测试工具 xff1a apipost 这是一款国产的接口测试工具 xff0c 非常类似于postman xff0c 但是整体使用上感觉要比postman更适合咱们使用 xff0c 毕竟是全中文的 话不多说直接上图
  • 如何使用pycharm将github上的代码同步到本地

    1 首先确定你安装了git exe 具体的话是在pycharm里面的settings version control 2 打开pycharm xff0c 新建版本使用git 3 从github上复制代码链接 4 填入相关内容点击clone即
  • StrokeStart与StrokeEnd动画

    通过修改CAShapeLayer的StrokeStart与StrokeEnd的值来实现画图动画 效果图 代码部分 import 34 ViewController h 34 64 interface ViewController 64 pr
  • GUI编程之路内计费工具

    span class token keyword import span os span class token keyword import span sys span class token keyword from span PyQt
  • 提高测试人员测试效率之GUI工具

    如何有效的去提高测试效率 xff0c 在一个团队当中 xff0c 肯定会存在部分人员无法熟悉数据库操作的情况 xff0c 这个时候我们就可以通过GUI编程将工具界面会 xff0c 使之快速的上手 本次通过一个GUI工具来带领大家如何制作这么
  • GUI编程之智慧交通自动化测试计费

    最终实现效果 本工具实现了案例搜索 xff0c 导入案例 xff0c 测试类型选择 xff0c 自动化测试 xff0c 测试报告 xff0c 邮件发送等功能 xff0c 能有效的提升回归测试效率 xff0c 保证测试质量 源码暂不提供 xf
  • Ubuntu14.04 Wifi 连接不稳定、掉线重连问题(终极解决办法)

    Ubuntu14 04 Wifi 连接不稳定 上不了网 掉线问题 xff08 终极解决办法 xff09 这可能是我写的最短的一篇博客 用Ubuntu系统的人知道 xff0c 有线连接比较稳定 xff1b 一般台式机不带网卡 xff0c 自己
  • 【Ubuntu】Ubuntu上搭建本地源,做离线安装

    一 实验背景 Ubuntu作为最优秀的Linux发行版之一 xff0c 是初学者入门的不二选择 xff0c 但Linux有个最大的问题 xff0c 就是离了网络就废了 在Windows系统中 xff0c 安装软件十分方便 xff0c 下载安
  • gitlab-ce 备份还原 迁移新系统

    https blog csdn net foupwang article details 94362292 迁移前首先要保证新旧服务器上的GitLab版本号一致 查看当前GitLab版本 cat opt gitlab embedded se
  • linux虚拟网络设备之vlan配置详解

    https www jb51 net article 130486 htm 注意VLAN方式达到了网络隔离 xff0c 但是mac地址是相同的 xff0c 意思就是基于同一个网卡出来的vlan mac地址相同 要想不通 xff0c 可以用m
  • jacoco的使用

    一 概述Java 覆盖率 Jacoco 插桩的不同形式总结和踩坑记录 TesterHome 测试覆盖率 xff0c 老生常谈的话题 因为我测试理论基础不是很好 xff0c 就不提什么需求覆盖率啦这样那样的主题了 xff0c 直奔主题 xff
  • mysql bin-log,relay-log删除方法

    master的bin log日志清理 xff1a 方法1 RESET MASTER 1 1 解释 xff1a 该方法可以删除列于索引文件中的所有二进制日志 xff0c 把二进制日志索引文件重新设置为空 xff0c 并创建一个以 000001
  • ubuntu18 网络问题

    在 etc netplan yaml配置文件中 xff1a renderer的值可以是networkd xff0c 或者是NetworkManager 它俩的其中一个区别为 xff1a networkd在图像界面 xff0c network
  • Python - 日志管理模块: Loguru的使用

    python的日志管理模块可以用自带的logging模块 xff0c 也可以用第三方的Loguru模块 xff0c 关于logging和loguru模块的简单使用可以参考以下文章 xff0c 写的还是不错的 xff1a logging 和

随机推荐