代码之家  ›  专栏  ›  技术社区  ›  Walter Schrabmair

用PHP计算ISBN-10校验和是否正确?

  •  0
  • Walter Schrabmair  · 技术社区  · 7 年前

    我找到了一个PHP脚本 github ISBN-Calc Routine 要执行ISBN-10校验和计算:

    <?php
    /**
     * Calculate ISBN checksum
     * 
     * @param string $isbn
     * @return integer
     */
    function isbn_checksum($isbn) {
        $sum = 0; $isbn = str_split(preg_replace('/[^\d]/', '', $isbn));
        foreach($isbn as $key => $z) {
            if($key >= 12) break;
            $sum += ($key % 2) ? $z * 3 : $z;
        }
        $checksum = (10 - $sum % 10);
        return ($checksum == 10) ? 0 : $checksum;
    }
    

    但是我的F.E ISBN-10: 0470173424 我得到 Checksum: 0 用这个github脚本。

    适应 ISBN online checker 校验和应为4,正如ISBN中的校验和一样。这里有人能给我提供正确的PHP程序吗?

    谢谢

    3 回复  |  直到 7 年前
        1
  •  2
  •   iainn    7 年前

    function isbn10($isbn) {
        $isbn = preg_replace('/[^\d]/', '', $isbn);
        $digits = str_split(substr($isbn, 0, 9));
    
        $sum = 0;
    
        foreach ($digits as $index => $digit) {
            $sum += (10 - $index) * $digit;
        }
    
        $check = 11 - ($sum % 11);
    
        return ($check === 10) ? 'X' : $check;
    }
    
    echo isbn10('047017342');
    

    https://eval.in/1039654

        2
  •  -1
  •   MrzJkl    7 年前

    https://github.com/Fale/isbn

    $isbn = new Isbn\Isbn();
    

    $isbn->check->is10('888183718'); // Will return false
    $isbn->check->is13('9788889527191'); // Will return true
    $isbn->check->is13('978888952719'); // Will return false
    

        3
  •  -1
  •   adilbo    7 年前

    <?php
    function isValidIsbn10($isbn) {
        $check = 0;
        for ($i = 0; $i < 10; $i++) {
            if ('x' === strtolower($isbn[$i])) {
                $check += 10 * (10 - $i);
            } elseif (is_numeric($isbn[$i])) {
                $check += (int)$isbn[$i] * (10 - $i);
            } else {
                return false;
            }
        }
        return (0 === ($check % 11)) ? 1 : false;
    }
    
    var_dump( isValidIsbn10('0470173424') );
    

    https://stackoverflow.com/a/14096142/5201919

    https://eval.in/1053913

    推荐文章