最近、図書館管理プログラムを作成していたときに、書籍の ISBN コードが正しいことを確認する必要がありました。いくつかの情報を確認し、書籍の ISBN コードの構成を理解しました。詳細については、国際標準書籍を参照してください。番号 – Wikipedia 以下は ISBN コードについて説明します:
国際標準書籍番号 (ISBN、is-ben と発音することを目的としています) は、書籍または独立出版物 (定期的に発行される雑誌を除く) に対して国際的に受け入れられているコードです。出版社は、国際標準図書番号によって、ジャーナル以外のすべての書籍を明確に識別できます。 ISBN には、それに対応する対応出版物が 1 つだけあります。新しいバージョンが元の古いバージョンに基づいて内容に大きな変更がない場合、発行時に新しい ISBN 番号は付与されません。ペーパーバック版がハードカバー出版物に変更された場合、元の対応する ISBN 番号も削除する必要があります。
通常、ISBN コードは 10 桁と 13 桁の 2 種類あります。10 桁の ISBN コードは 2007 年 1 月に廃止されました。現在、新刊書籍の ISBN コードはすべて 13 桁です。厳格な図書館管理プログラムでは多くの側面を考慮する必要があることを考慮すると、10 桁の ISBN コードを持つ書籍が依然として膨大な数に存在するため、書籍の ISBN コードの正確性を検証するには、10 桁と ISBN コードの両方を考慮する必要があります。 13 桁の ISBN コード。 Wikipedia から、ISBN コードの最後の桁がチェック コードであることがわかります。実際、ISBN コードの精度を確認したい場合は、ISBN のチェック コードを計算して、ISBN コードが一致するかどうかを確認する必要があります。最後の桁。ここで言及する検証は、ISBN が構成において合法であるかどうかを検証するだけであり、出版された書籍の ISBN であるかどうかは検証しません。以下は、Wikipedia が提供する ISBN コード検証アルゴリズムです:
チェックコード(10桁)の計算方法
ISBN 番号の最初の 9 桁が 7-309-04547 であるとします。
加重和 S を計算します: S = 7×10+3×9+0×8+9×7+0×6+4×5+5×4+4×3+7×2 = 226
S÷11 の余り M を計算します: M = 226 mod 11 = 6
11 – M の差 N を計算します: N = 11 ? 6 = 5
N = 10 の場合、チェック コードは文字「X」です
N = 11 の場合、チェック コードは数字「0」です
N が別の数値の場合、チェック コードは数値 N になります
この本の検証コードは 5 です。ユーザーが提供した ISBN コードが 7-309-04547-6 の場合、検証は失敗します。
チェックコード(13桁)の計算方法
ISBN 番号の最初の 12 桁が 978-986-181-728 であるとします。
加重和 S を計算します: S = (9×1)+(7×3)+(8×1)+(9×3)+(8×1)+(6×3)+(1× 1 )+(8×3)+(1×1)+(7×3)+(2×1)+(8×3) = 164
S÷10 の余り M を計算します: M = 164 mod 10 = 4
10 – M の差 N を計算します: N = 10 ? 4 = 6
N = 10 の場合、チェック コードは数字「0」です
N が別の数値の場合、チェック コードは数値 N になります
つまり、この本のチェックコードは 6 です。完全な ISBN 番号は ISBN 978-986-181-728-6
これは予備知識です。以下は私が作成した ISBN コード検証関数 (php バージョン) です。必要に応じて直接使用できます。
{ /* * ISBN加权和の計算に使用される関数 * パラメータ説明: * $ isbn : isbn :isbn番号 * $len : isbn番号长度 */ $sum = 0; if ($len == 10) { for ($i = 0; $i < $len-1; $i++) { $sum = $sum + (int)$isbn[$i] * ($len - $ i); } } elseif ($len == 13) { for ($i = 0; $i < $len-1; $i++) { if ($i % 2 == 0) $sum = $sum + (int)$isbn[$i]; else $sum = $sum + (int)$isbn[$i] * 3; } } return $sum; } function isbn_compute($ isbn, $len) { /* * この関数数は計算用ISBN末位校验码 * パラメータ说明: * $isbn : isbnowned * $len : isbn番号长度 */ if ($len == 10) { { $digit = 11 - isbn_sum($isbn, $len ) % 11; if ($digit == 10) if ($digit == 10) |