2007年ISBN从10位升级为13位,新增前缀“978”或“979”以兼容欧洲商品编码(EAN),并与全球贸易条形码系统统一。这就涉及到了ISBN-13与ISBN-10的相互转化问题。下面用PHP展示转化逻辑:
/** * 将ISBN-13转换为ISBN-10 * * @param string $isbn 输入的ISBN-13字符串 * @return string 返回ISBN-10字符串,如果输入无效则返回空字符串 */ function to10($isbn) { $isbn = str_replace('-', '', $isbn); if(!preg_match('/^\d+x?$/i', $isbn)) return ''; if(strlen($isbn) == 10) return $isbn; $sum = 0; $num = substr($isbn, 3, 9); for($i = 10, $p = 0; $i > 1; $i--, $p++){ $sum += $i * intval($num[$p]); } $m = $sum % 11; $check = 11 - $m; if($check == 10) $check = 'x'; elseif($check == 11) $check = '0'; return $num . $check; }
/** * 将ISBN-10转换为ISBN-13 * * @param string $isbn 输入的ISBN-10字符串 * @return string 返回ISBN-13字符串,如果输入无效则返回空字符串 */ function to13($isbn) { $isbn = str_replace('-', '', $isbn); if(!preg_match('/^\d+x?$/i', $isbn)) return ''; if(strlen($isbn) == 13) return $isbn; $sum = 0; $num = '978' . substr($isbn, 0, 9); for($i = 0; $i < 12; $i++){ $n = intval($num[$i]); if(($i + 1) % 2 == 0){ $sum += $n * 3; }else{ $sum += $n; } } $m = $sum % 10; $check = 10 - $m; return $num . $check; }
© 2015-2025 杭州极速互联科技有限公司 版权所有 浙ICP备17047587号-4 浙公网安备33010502005096 增值电信业务经营许可证:浙B2-20190875