ISBN と ISSN のチェックディジットは、書誌の識別子に付いた転記ミスの検出装置です。どちらも重み付けした総和を法で割るという同じ骨格を持ちながら、桁の並びと重みの向きが異なります。この記事では、二つの体系の読み分けと、入力の揺れをどう吸収するかを整理します。
ISBN と ISSN のチェックディジットはどのように求めるのか?
どちらも、先頭側の位に順に重みを掛けて足し、決められた数で割った結果から末尾の一位を導きます。掛け算の重みは、位が進むにつれて増える方式と減る方式があります。
- 重みが増える方式では、先頭の位に小さな値が当たります。
- 重みが減る方式では、先頭の位に大きな値が当たります。
- 総和を法で割った余りを、そのまま使うか補数を取るかは体系によって異なります。
- 導かれた一位が、識別子の末尾に置かれます。
計算の規模は小さく、手作業でも追えます。ただし、重みの向きを逆に覚えると、すべての値が誤りとして報告されます。実装では、体系ごとに手順を分けて持つほうが安全です。
二つの書号体系の違い
書号には、短い体系と長い体系があります。長い体系は短い体系を置き換える形で導入されましたが、短い体系の値も現役で流通しています。
| 観点 | 短い体系 | 長い体系 |
|---|---|---|
| 区切りの位置 | 固定されている | 可変である |
| 区切り記号 | ハイフンが中心 | ハイフンと空白が混在 |
| 末尾の位 | 数字、または英字 | 数字 |
| 番号帯の構成 | 段の数が少ない | 段の数が多い |
長い体系では、区切りの位置が固定されていません。出版者や書名の長さによって、区切りの入る場所が変わります。このため、区切り記号を取り除いた状態で比較することが必須になります。
短い体系から長い体系へ移行した書籍では、両方の番号が現役で使われることがあります。古い在庫には短い体系の番号が印字され、新しく刷られた版には長い体系の番号が付きます。同じ内容の書物が二つの識別子を持つ状態は、誤りではなく移行期の正常な姿です。
末尾の位が英字になる場合はあるのか?
短い体系では、末尾の位が数字ではなく英字になる場合があります。これは、法で割った余りが数字だけで表せない範囲に届くために設けられた逃げ道です。
- 余りが特定の値になったときだけ、対応する英字が使われます。
- それ以外の場合は、通常どおり数字が入ります。
- 英字は大文字で表記され、小文字との区別はしません。
この扱いがあるため、短い体系を検証するときは、末尾の一文字が数字であることを前提にしてはいけません。数字だけを許可する実装は、正しい番号を形式違反として弾きます。反対に、長い体系では末尾は数字に限られるため、英字を許可すると誤った入力を通してしまいます。
番号帯はどのように割り当てられるのか?
番号の前半には、出版者や刊行物を示す段が入ります。この割り当ては、複数の階層の組織が段階的に行っています。国際的な組織が全体の枠を管理し、国内の機関がその範囲を配分し、出版者は受け取った範囲を自分の刊行物に割り当てます。
階層があるため、同じ書物に二つの番号が付くことがあります。
- 出版者が合併した場合、旧社が持っていた範囲が新しい体制に引き継がれます。
- 刊行物の名前が変わった場合、新しい番号が付与されることがあります。
- 発行の主体が変わった場合も、番号が新しくなる場合があります。
いずれの場合も、二つの番号はどちらも正式な識別子です。片方を「誤り」として扱うと、検索や突合の精度が落ちます。
番号が変わった書物は両方を確かめるべきか?
その通りです。移行や改称を経た刊行物は、二つの識別子を持つことがあります。片方だけを登録すると、もう片方で検索した利用者が目的の書物にたどり着けません。
実務では、一つの書物に対して複数の識別子を許す形で保持し、どれも正式な値として扱うのが適切です。そのうえで、表示のときにどの番号を使うかを選ばせます。
なお、どちらの番号も、検証を通ることは識別子の内部がつじつまよく作られているという意味にとどまります。書物が存在することや、特定の出版者に属することの証明ではありません。同族の計算の一般形はチェックディジットのアルゴリズムで扱っています。
開発者向け:入力の正規化と区切り記号
書誌の識別子は、入力の揺れが特に大きい分野です。同じ番号が、資料によってハイフンの位置を変えて印字されます。空白で区切る資料もあれば、区切りをまったく入れない資料もあります。
したがって、検証の前に必ず正規化を行います。
- 空白、ハイフン、点、斜線を取り除く。
- 英字を大文字にそろえる。
- 全角の数字と英字を半角にそろえる。
- 先頭や末尾の見えない文字を取り除く。
三番目と四番目は見落とされやすい点です。表計算のソフトウェアから取り込んだ値には、見えない文字や先頭の記号が混ざることがあります。これらが残っていると、見た目は正しいのに検証だけが失敗する、という追いにくい不具合になります。末尾の英字を許すかどうかは、体系を判定したあとで切り替えます。
本文で扱ったのは公開されている体系の一般的な性質であり、例として想定した値はすべて説明のための作り物です。実在の書物や刊行物の番号ではなく、出版の事実を示すものでもありません。
次の一手
手元の識別子を番号検証ツールに貼り付け、区切り記号を入れた状態と外した状態で結果が変わらないかを確かめてみてください。変わるとすれば、正規化の段階に手当ての余地があります。商品のバーコードについてはEAN と UPC のチェックディジットで扱っており、重みの向きが分野ごとに異なることを比較できます。あわせて公的番号のチェックディジットの考え方も参考にしてください。