2023-06-24

PHP正则表达式验证输入字符串是否为正确的ISBN编码格式

ISBN(International Standard Book Number),即国际标准图书编号,是一个用来标识图书的连续数字。它由十位或十三位数字组成,并且经过一定的计算校验,以确保其正确性。在这篇文章中,我们将介绍如何使用PHP正则表达式来验证输入字符串是否为正确的ISBN编码格式。

ISBN编码格式

ISBN编码由10位或13位数字组成,前9位为书籍的标识码,第10位为校验码。对于13位的ISBN编码,前3位是国家或地区代码,接着是出版社的标识码,然后是书籍的标识码,最后是校验码。对于10位的ISBN编码,前9位也是书籍的标识码,但没有国家或地区代码和出版社标识码,最后一位仍为校验码。

校验规则

校验规则如下:

对于10位ISBN编码:校验码为最后一位数字,计算规则如下:将前9位数字分别乘以1~9的权重系数,然后将这9个乘积相加,得到一个总和。然后将这个总和对11取余数,并将余数与11进行减法运算,得到校验码。如果余数为10,则校验码为大写字母X。

对于13位ISBN编码:校验码为最后一位数字,计算规则如下:将前12位数字分别乘以1或3的权重系数,然后将这13个乘积相加,得到一个总和。然后将这个总和对10取余数,再用10减去这个余数,得到校验码。

PHP正则表达式

下面是PHP正则表达式的代码,用于验证输入字符串是否为正确的ISBN编码格式。

对于10位ISBN编码:

function checkISBN10($isbn) {
    if (!preg_match('/^d{9}[d|X]$/i', $isbn)) {
        return false;
    }
    $checkbit = 0;
    for ($i = 0; $i < 9; $i++) {
        $checkbit += intval($isbn{$i}) * (10 - $i);
    }
    $checkbit = ($checkbit % 11 == 0) ? 0 : 11 - ($checkbit % 11);
    return ($isbn{9} == ($checkbit == 10 ? 'X' : strval($checkbit)));
}
登录后复制

对于13位ISBN编码:

function checkISBN13($isbn) {
    if (!preg_match('/^d{13}$/i', $isbn)) {
        return false;
    }
    $checkbit = 0;
    for ($i = 0; $i < 12; $i++) {
        $checkbit += intval($isbn{$i}) * (($i % 2 == 0) ? 1 : 3);
    }
    $checkbit = 10 - ($checkbit % 10);
    return ($isbn{12} == strval($checkbit));
}
登录后复制

这两个函数分别接受一个ISBN编码作为输入,并返回一个布尔值,表示该编码是不是一个合法的ISBN编码。如果是合法的编码,则返回true,否则返回false。

这些函数使用正则表达式,检查输入是否符合ISBN编码的格式。然后使用校验规则计算校验码,并将其与输入的编码中的校验码进行比较,以确定该编码是否合法。

结论

本文介绍了如何使用PHP正则表达式来验证输入字符串是否为正确的ISBN编码格式。虽然ISBN编码的校验规则比较复杂,但借助于正则表达式的强大功能,我们可以方便地实现这种验证。开发者可以使用这些函数来检查用户输入的ISBN编码,以确保其正确性。

以上就是PHP正则表达式验证输入字符串是否为正确的ISBN编码格式的详细内容,更多请关注php中文网其它相关文章!

https://www.php.cn/faq/566295.html

发表回复

Your email address will not be published. Required fields are marked *