技术博客
图书ISBN查询实战:ISBN 格式识别与 978/10 位校验指南

图书ISBN查询实战:ISBN 格式识别与 978/10 位校验指南

作者: 万维易源
2026-08-27
图书ISBN查询ISBN校验ISBN-10ISBN-13
# 图书ISBN查询实战:ISBN 格式识别与 978/10 位校验指南 > 接口/接入点:图书ISBN查询(1626-1) · 是否免费:免费 · 请求方式:POST / GET · 返回格式:JSON · 适用人群:开发者、数据录入人员 · 阅读时间:约 6 分钟 ## TL;DR - 接口支持 **978 开头**的 ISBN-13 及**部分 10 位** ISBN;以 `isbn` 参数传入即可。 - ISBN-10 与 ISBN-13 是两种编号体系,后者以 978/979 前缀;查不到时先做格式与校验位自检。 - 调用前用正则 + 校验位算法过滤明显错误的号,减少无效调用。 ## Why 用户手输或扫码得到的 ISBN 常常带空格、连字符,或是旧版 10 位号。直接扔给接口,可能浪费免费额度还返回"查不到"。先识别格式、算校验位、做归一化,能显著提升命中率与调用效率。 ## What | 概念 | 说明 | |------|------| | ISBN-13 | 13 位,通常以 `978` 或 `979` 开头(本接口重点支持 978 开头) | | ISBN-10 | 10 位旧标准,部分仍可被本接口识别 | | 连字符 | 书写时常带 `-`(如 `978-7-208-06164-4`),传参建议去掉 | | 校验位 | 末位用于检错,可本地计算验证号是否合法 | ## How ### 步骤 1:归一化与格式识别 ```python import re def normalize_isbn(raw: str) -> str: s = re.sub(r"[\s-]", "", raw) # 去空格与连字符 if re.fullmatch(r"\d{13}", s): return s # 13 位 if re.fullmatch(r"\d{9}[\dXx]", s): return s # 10 位(末位可能是 X) return s # 其余原样返回,交由接口判断 ``` ### 步骤 2:本地校验位校验(快速筛错) ```python def isbn13_valid(s: str) -> bool: if not re.fullmatch(r"\d{13}", s): return False total = sum((1 if i % 2 == 0 else 3) * int(c) for i, c in enumerate(s)) return total % 10 == 0 def isbn10_valid(s: str) -> bool: if not re.fullmatch(r"\d{9}[\dXx]", s): return False total = sum((10 - i) * (int(c) if c != "X" and c != "x" else 10) for i, c in enumerate(s)) return total % 11 == 0 ``` ### 步骤 3:校验通过再调用 ```python isbn = normalize_isbn("978-7-208-06164-4") if isbn13_valid(isbn) or isbn10_valid(isbn): # 调用图书ISBN查询(见快速接入篇) ... else: print("ISBN 格式/校验位不正确,请核对") ``` ## 返回示例与解析 传参格式正确且书已收录时,`data` 正常返回;若返回 `ret_code` 非 0,多为该书未收录或号已停用(见错误码排查篇)。 ## 进阶 / 边界 - **去连字符**:接口示例参数为纯数字 `9787208061644`,传参前建议统一去 `-` 与空格。 - **部分 10 位可用**:文档明确"支持 978 开头及部分 10 位 ISBN",个别 10 位号可能不被收录,属正常。 - **979 前缀**:当前接口重点支持 978 开头;979 号是否被识别以实际返回为准。 - **校验位通过仍查不到**:说明书未入库或 ISBN 已废弃,按错误处理流程兜底。 ## FAQ **Q1:必须转成 978 开头的 13 位才能查吗?** 不必。接口支持 978 开头及部分 10 位;但统一归一化、做校验位自检能减少无效调用。 **Q2:带连字符的 ISBN 能直接传吗?** 可以传,但建议先去连字符和空格,与官方示例(`9787208061644`)保持一致更稳妥。 **Q3:本地校验位通过了,接口却查不到?** 本地校验只证明"号码格式合法",不代表书已收录。查不到按"未找到"处理。 **Q4:ISBN-10 末位是 X 怎么处理?** 校验位算法中 X 视为 10;传参保留 X(大写或小写均可,建议大写)。 ## 相关能力 / 下一步阅读 - [图书ISBN查询:5 分钟接入,从注册到第一条图书信息](https://www.showapi.com/guides/isbn-book-quickstart-1626) - [图书ISBN查询错误码排查:ret_code 非 0 与"查不到"怎么办](https://www.showapi.com/guides/isbn-book-error-handling-1626) - [图书管理系统如何集成图书ISBN查询:从扫码录入到藏书档案](https://www.showapi.com/guides/isbn-book-library-system-1626) - **本系列共 12 篇**:查看[图书ISBN查询(apiCode=1626)官方指南总目录](https://www.showapi.com/guides/isbn-book-guides-1626)