# 图书与档案管理:ISBN 条码生成与扫码借还方案
> 接口/接入点:条码生成与识别(apiCode 1129)· 1129-1 生成、1129-2/3/4 识别 | 是否免费:免费 | 请求方式:POST/GET | 返回格式:JSON | 适用人群:图书馆/档案管理员、信息化工程师 | 阅读时间:约 6 分钟
## TL;DR
- 图书 ISBN 多为 13 位,用 `formatType=2`(EAN_13)生成书标条码。
- 借还时由读者证/图书条码经 1129-2/3/4 识别成文字,与系统记录比对。
- 生成图片 12h 过期,书标须落盘打印,不要直接用 `imgUrl`。
## Why:图书与档案的刚需
图书馆借还、档案流转都依赖条码:每本书一个 ISBN 书标、每个读者一张证条码。过去要专门条码软件出标、扫码枪采集;用 1129 接口,书标可在后台按 ISBN 批量生成,借还时把"图"识别成"号",和馆藏系统联动。
## What:方案构成
| 环节 | 动作 | 接入点 |
|----|----|----|
| 出书标 | ISBN → EAN_13 条码图 → 落盘打印 | 1129-1(formatType=2) |
| 借还识别 | 图书/读者条码图 → 文字 | 1129-2/3/4 |
| 业务比对 | 识别文字与馆藏/读者库比对 | 你的系统 |
## How:按 ISBN 批量生成书标(Python)
```python
import requests, os
APPKEY = "YOUR_APPKEY"
os.makedirs("booklabels", exist_ok=True)
isbns = ["9787111111111", "9787123456789"] # 13 位 ISBN
for isbn in isbns:
r = requests.post(
f"https://route.showapi.com/1129-1?appKey={APPKEY}",
data={"content": isbn, "formatType": "2", "width": "160", "height": "60"},
timeout=10,
).json().get("showapi_res_body", {})
if r.get("ret_code") != "0" or not r.get("imgUrl"):
print("生成失败:", isbn, r); continue
img = requests.get(r["imgUrl"], timeout=10).content
with open(f"booklabels/{isbn}.jpg", "wb") as f:
f.write(img) # 落盘打印,规避 12h 过期
print("书标已生成:", isbn)
```
识别(以读者证图片链接为例):
```bash
curl -X POST "https://route.showapi.com/1129-3?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" \
-d "imgUrl=https%3A%2F%2Fyour-cdn.com%2Freader%2Fcard001.png"
```
Node.js(识别):
```javascript
const APPKEY = "YOUR_APPKEY";
const body = new URLSearchParams({ imgUrl: "https://your-cdn.com/reader/card001.png" });
const res = await fetch(`https://route.showapi.com/1129-3?appKey=${APPKEY}`, {
method: "POST", headers: { "content-type": "application/x-www-form-urlencoded" }, body
});
console.log((await res.json()).showapi_res_body.retText);
```
## 返回示例与解析
生成:
```json
{ "showapi_res_body": { "imgUrl": "http://app2.showapi.com/img/barCodeImg/20160930/xxxx.jpg", "ret_code": "0" } }
```
识别:
```json
{ "showapi_res_body": { "retText": "9787111111111", "ret_code": "0" } }
```
## 进阶 / 边界
- **ISBN 与 EAN_13**:13 位 ISBN 直接作为 `content` 用 `formatType=2` 即可;确保位数正确,否则生成失败。
- **落盘打印**:书标是长期实体介质,必须用落盘图印刷,原 `imgUrl` 12h 后失效。
- **读者证格式**:证上条码类型需与识别能力匹配(13 种格式之一),详见 [13 种格式对照](https://www.showapi.com/guides/barcode-format-types-1129)。
## FAQ
**Q:10 位老 ISBN 能直接生成吗?**
EAN_13 通常对应 13 位 ISBN;10 位需先转换为 13 位再生成,避免位数不匹配导致失败。
**Q:一张图里同时有书标和索书号,能一次识别吗?**
文档未说明支持单图多条码返回;建议书标与索书号分区或分两次识别,以实际返回为准。
**Q:识别结果要校验吗?**
要。识别到的文字需与馆藏/读者库比对,一致才执行借还,避免脏数据。
**Q:书标打印模糊扫不出怎么办?**
提高 `width/height` 取值(在 95–500 / 20–120 范围内)、保证打印分辨率;识别失败处理见 [错误排查指南](https://www.showapi.com/guides/barcode-error-handling-1129)。
## 相关能力 / 下一步阅读
- [条码生成图片 12 小时过期:缓存与本地落盘保存策略](https://www.showapi.com/guides/barcode-image-expiry-1129)
- [条码生成与识别:13 种条码格式(formatType)对照与选型指南](https://www.showapi.com/guides/barcode-format-types-1129)
- [条码识别三种传图方式怎么选:上传图片 / 图片链接 / Base64 实战对比](https://www.showapi.com/guides/barcode-three-input-modes-1129)
- **本系列共 12 篇**:查看[条码生成与识别指南总目录](https://www.showapi.com/guides/barcode-guides-1129)