php检验ISBN码的函数,一共包括有三个ISBN码相关函数,1、计算ISBN加权和。2、判断是否为ISBN号。3、计算ISBN末位校验码,后附有用法。
<?php /*************************** * 判断是否为ISBN号 * $isbn: isbn码 ***************************/ function is_isbn($isbn) { $len = strlen($isbn); if ($len!=10 && $len!=13) return 0; $rc = isbn_compute($isbn, $len); if ($isbn[$len-1] != $rc) /* ISBN尾数与计算出来的校验码不符 */ return 0; else return 1; } /************************** * 计算ISBN加权和 * 参数说明: * $isbn: isbn码 * $len: isbn码长度 **************************/ function isbn_sum($isbn, $len) { $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; } /***************************** * 计算ISBN末位校验码 * $isbn: isbn码 * $len: isbn码长度 ******************************/ function isbn_compute($isbn, $len) { if ($len == 10) { $digit = 11 - isbn_sum($isbn, $len) % 11; if ($digit == 10) $rc = 'X'; else if ($digit == 11) $rc = '0'; else $rc = (string)$digit; } else if($len == 13) { $digit = 10 - isbn_sum($isbn, $len) % 10; if ($digit == 10) $rc = '0'; else $rc = (string)$digit; } return $rc; } ?>
<?php echo is_isbn('8523699874563') ? '校验通过' : '校验失败'; ?>