見出し画像

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

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

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

/**
 * Check the code is a valid ISBN-10 code.
 * 
 * @param code — the code to validate
 * @return Boolean — true if a valid ISBN-10 code, otherwise false
 */
function isValidISBN10(code) {
  if (!code) {
    return false;
  }
  if (10 != code.length) {
    return false;
  }
  var chars = code.split('');
  if (chars[9].toUpperCase() == 'X') {
    chars[9] = 10;
  }
  var sum = 0;
  for (var i = 0; i < chars.length; i++) {
    sum += ((10 - i) * Number(chars[i]));
  }
  return (0 == (sum % 11));
}

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

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

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

マンガポスト日本版

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

コーヒーブレイク

地下鉄のホームで撥ねられ死んだはずの玄野、加藤は謎のマンションの一室に一瞬にして転送される。そこに置かれた得体の知れない黒い球の指令により、ねぎ星人の暗殺を命じられた玄野らは、状況を把握できないままねぎ星人の元へと転送される。マンションにいた仲間によってねぎ星人は殺されるが、新たなねぎ星人が現れ…。

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

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