ISBN-10とISBN-13を検証・変換
ISBNは正しく見えても、数字が1文字だけ誤っている場合があります。また、10桁形式と13桁形式の変換は、接頭辞を付け外しするだけでは完了しません。この検証ツールは一般的な空白とハイフンを正規化し、長さから形式を判定してチェックデジット全体を検証し、標準化したISBN-10とISBN-13を返します。不正な形式や一致しないチェックデジットは拒否するため、もっともらしい誤変換を防げます。処理は決定的でネットワークを使用せず、書誌、データ取込、出版システム、在庫管理に適しています。
無料で実行
保存や変換の前に検証します
ISBNは数学的なチェックデジットを持つ識別子であり、特定の書籍が実在することの証明ではありません。本ツールは、まず一般的な空白とハイフンを除去し、検出した長さに対応する検査規則を適用します。ISBN-10では10個の位置に10から1までの降順の重みを掛け、末尾のXは値10を表します。ISBN-13では1と3の重みを交互に使用して最後の数字を決定します。不一致があれば入力エラーになるため、後続処理に誤記された値から作った変換結果が渡ることはありません。この性質は一括取込で特に重要です。1桁の誤りを黙って受け入れると、書誌レコードの重複や、別の版への在庫の誤登録につながるからです。validは計算の成功を示し、input_formatは適用した規則を示します。2つの識別子はハイフンのない標準文字列で返されるため、入力時の表記ゆれを残さず、比較、索引作成、他システムへの送信に利用できます。
変換の仕組みをご確認ください
ISBN-10からISBN-13へ変換する際は、先頭9桁を使用し、従来のチェック文字を捨て、書籍用接頭辞978を加えて、新しいISBN-13チェックデジットを計算します。逆方向は978で始まるISBN-13で利用できます。接頭辞と13桁目のチェックデジットを取り除き、残る9桁からISBN-10のチェック文字を再計算します。新しい文字は数字またはXです。そのため、単純な文字列の切り取りや既存チェックデジットのコピーでは正しく変換できません。979で始まるISBN-13も有効ですが、対応するISBN-10は存在しません。本ツールはその番号自体を検証したうえで、両形式を正直に返せないことを明確な入力エラーとして通知します。架空の10桁値を作ったり、979を978へ置き換えたり、情報が失われる操作を変換と呼んだりはしません。この区別により、新しい出版者番号帯でも識別子の整合性を維持できます。
信頼できる処理で結果をご利用ください
isbnフィールドをテキストで送信してください。0-306-40615-2や978 0 306 40615 7のような印刷表記は、空白とハイフンが表示上の区切りなので受け付けます。その他の文字や記号、不正な長さ、誤った位置のX、書籍用でないEAN接頭辞、合わないチェックデジットは拒否します。成功時は、アプリ側で再構成せず、返されたisbn10とisbn13を保存してください。仕入先が旧形式と新形式のどちらを提示したかが重要な場合は、input_formatも保持できます。本機能は書名、著者、版、所有権、在庫状況を検索しません。チェックデジットの有効性が示すのは内部整合性だけです。書誌の同一性も確認する場合は、信頼できる書誌情報源と組み合わせてください。アルゴリズムはネットワークを使わない純粋な算術なので、同じ入力には常に同じ結果を返します。単発確認にはブラウザーが便利で、APIは1件$0.002で、データベース、検索索引、出荷処理、レポートへ登録する前の入力検証に適しています。
活用例
出版社カタログの取込を整備します
入力を誤った識別子を拒否し、データベースへ登録する前に統一したISBN-10とISBN-13を保存します。
マーケットプレイスの商品情報を統一します
出品者が入力したISBNをハイフンなしの標準値へ変換し、表記の違いに影響されず比較できるようにします。
印刷された書籍識別子を確認します
表紙や奥付のISBNを貼り付け、転記ミスを検出して対応する形式を取得します。
よくある質問
利用料金はいくらですか?
APIは1リクエストあたり$0.002です。個別の確認にはブラウザー画面もご利用いただけます。
有効なチェックデジットは書籍の実在を証明しますか?
いいえ。識別子の構造とチェックデジットの一致だけを示します。書誌カタログへの照会は行いません。
空白やハイフンを含められますか?
はい。一般的な空白とハイフンは検証前に除去され、返される識別子には区切り文字が含まれません。
979で始まる有効なISBN-13を変換できないのはなぜですか?
ISBN-10に対応するのは978で始まるISBN-13の範囲だけです。979の識別子には正しい10桁表現がありません。
ISBNにXを使用できますか?
はい。ただし値10を表すISBN-10末尾のチェック文字に限られます。ISBN-13は数字だけで構成されます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/data/isbn-validate-convert \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"isbn":"0-306-40615-2"}'const res = await fetch("https://api.kit.forhosting.com/data/isbn-validate-convert", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"isbn": "0-306-40615-2"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/isbn-validate-convert",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"isbn": "0-306-40615-2"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/isbn-validate-convert", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"isbn":"0-306-40615-2"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"isbn":"0-306-40615-2"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/isbn-validate-convert", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"isbn": "0-306-40615-2"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.isbn_validate_convert",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_mb | 25 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |