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 公式アカウントです。
漫画(まんが)・コミックの新刊情報を毎日配信中!
コーヒーブレイク
地下鉄のホームで撥ねられ死んだはずの玄野、加藤は謎のマンションの一室に一瞬にして転送される。そこに置かれた得体の知れない黒い球の指令により、ねぎ星人の暗殺を命じられた玄野らは、状況を把握できないままねぎ星人の元へと転送される。マンションにいた仲間によってねぎ星人は殺されるが、新たなねぎ星人が現れ…。