ホーム > 日記 > ISBN

ISBN

コードなにがし::ISBN10桁13桁変換
そいや前それっぽいコード書いた記憶があったので探してみたところ発見。
ループを使いたくなくてcreate_function使ったりしてるあたり中二病


/**
 * @see http://seclan.dll.jp/ccisbn.htm
 */

    /**
     * assert(checkISBN('4575831778'))
     */
    function checkISBN($code)
    {
        $code = str_replace('-', '', $code);
        if (!preg_match('/^\d{9}[0-9X]$/', $code)) {
            // japan /^4\d{8}[0-9X]$/
            return false;
        }
        $code_array = str_split(substr($code, 0, 9));
        array_walk($code_array, create_function('&$v,$k', '$v *= 10 - $k;'));
        $check_digit = 11 - array_sum($code_array) % 11;
        if ($code{9} != (($check_digit == 10)? 'X': $check_digit)) {
            return false;
        }
        return true;
    }

    /**
     * assert(checkEAN('978-4575831771'))
     */
    function checkEAN($code)
    {
        $code = str_replace('-', '', $code);
        if (!preg_match('/^\d{13}$/', $code)) {
            // japan /^9784\d{8}[0-9A-Z]$/
            return false;
        }
        $code_array = str_split(substr($code, 0, 12));
        array_walk($code_array, create_function('&$v,$k', '$v *= (($k + 1) % 2)? 1: 3;'));
        $check_digit = 10 - array_sum($code_array) % 10;
        if ($code{12} != $check_digit) {
            return false;
        }
        return true;
    } 

カテゴリー: 日記 タグ:
  1. コメントはまだありません。
  1. トラックバックはまだありません。