php检验ISBN码的函数,一共包括有三个ISBN码相关函数,1、计算ISBN加权和。2、判断是否为ISBN号。3、计算ISBN末位校验码,后附有用法。
/***************************
* 判断是否为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') ? '校验通过' : '校验失败'; ?>