Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
[PHP] ISBN のチェック
<?php
var_dump(validISBN('4-87408-414-1'));
function validISBN($isbn) {
if (preg_match('/^(\d)-?(\d)-?(\d)-?(\d)-?(\d)-?(\d)-?(\d)-?(\d)-?(\d)-?([\dX])$/i', $isbn, $d)) {
$d[0] = 0;
foreach ( $d as $key => &$val ) {
$val = ($key == 10 && ($val == 'x' || $val == 'X')) ? 10 : intval($val);
}
for ( $i = 1; $i <= 10; $i++ ) {
$d[$i] += $d[$i - 1];
}
for ( $i = 1; $i <= 10; $i++ ) {
$d[$i] += $d[$i - 1];
}
return ($d[10] % 11 == 0);
} else {
return false;
}
}
@wokamoto

This comment has been minimized.

Copy link
Owner Author

@wokamoto wokamoto commented Feb 19, 2013

ISBN は、誤り検出のため各数字の重み付き合計が 11 の倍数になるように最後の数字が調節されている。
最後の数字のみ 10 にしたい場合は X で表す。
これは正しいISBNかチェックするための関数 (via. C言語によるアルゴリズム辞典 P.371)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.