見出し画像

GAS|ISBN-13 コードを判定する|Javascript|Google Apps Script|開発裏話

マンガポスト日本版」では、Google ドライブ内に保存している「コミックス発売日情報」を参照して、その日付を基に毎日自動配信(ツイート)しています。

コミックス発売日情報を作成・管理する為に、コミックス情報から取得した「ISBN-13」が正しい(有効・妥当)かどうかチェックしています。

/**
 * Check the code is a valid ISBN-13 code.
 * 
 * @param code — the code to validate
 * @return Boolean — true if a valid ISBN-13 code, otherwise false
 */
function isValidISBN13(code) {
  if (!code) {
    return false;
  }
  if (13 != code.length) {
    return false;
  }
  var sum = 0;
  for (var i = 0; i < code.length; i++) {
    var num = Number(code.charAt(i));
    if (0 == (i % 2)) {
      sum += num;
    } else {
      sum += (num * 3);
    }
  }
  return (0 == (sum % 10));
}

ところで、以下の変換処理では、引数の「ISBN-13」に対して上記のチェックを行っていませんでした。

もし、チェックを行うなら、以下のようになります。

/**
 * Convert an ISBN-13 code to an ISBN-10 code.
 * This method requires a valid ISBN-13 with NO formatting characters.
 * 
 * @param isbn13 — the ISBN-13 code to convert
 * @return String — a converted ISBN-10 code or empty if the ISBN-13 code is not valid
 */
function convertToISBN10(isbn13) {
  if (!isValidISBN13(isbn13)) {
    return '';
  }
  var isbn10 = isbn13.substring(3, 12);
  var digits = 0;
  for (var i = 0; i < isbn10.length; i++) {
    digits += (Number(isbn10.charAt(i)) * (10 - i));
  }
  digits = (11 - (digits % 11));
  if (10 == digits) {
    isbn10 = (isbn10 + 'X');
  } else if (11 == digits) {
    isbn10 = (isbn10 + '0');
  } else {
    isbn10 = (isbn10 + String(digits));
  }
  return isbn10;
}

マンガポスト日本版

マンガポスト日本版の Twitter 公式アカウントです。
漫画(まんが)・コミックの新刊情報を毎日配信中!

コーヒーブレイク

映画監督志望の高校生・零がある日、町で目にしたのは、大ファンである「女優」パピコを中傷する張り紙だった。深夜、家を飛び出し張り紙をはがしてまわる零に声をかけたひとりの女性。それは―――。

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?