本文へスキップ

平成24年度 春期 ITパスポート試験 問100

この問題の解説と、これまでの解答の記録です。

問100
頻出度★★☆

多くの市販の書籍には,書籍を識別するための ISBN(International Standard Book Number)コードが付けられている。ISBN コードは,0~9の数字を使った13桁の記号で構成され,左側から桁を数える。最も左側の桁を1桁目とする。1桁目から12桁目までは,国記号,出版者記号及び書籍固有の記号などが含まれる。 ISBN コードの13桁目(最も右側の桁)はチェック数字と呼ばれる桁である。ISBN コードのチェック数字は,1桁目から12桁目の数字を使って,次の計算方法によって求める。ここで,図1のように1桁目から12桁目の数字を a₁~a₁₂,チェック数字を X とする。 〔チェック数字の計算方法〕 (1) a₁~a₁₂について,奇数桁には1,偶数桁には3の重みを付ける。 (2) a₁~a₁₂の各桁に,それぞれの桁に対応した重みを掛けたものの和 S を求める。   S = a₁×1+a₂×3+a₃×1+…+a₁₂×3 (3) S を10で割った余り R を求める。 (4) 10から R を引いた値をチェック数字 X とする。なお,この値が10になった場合は,チェック数字は0とする。 表計算ソフトを使ってチェック数字を求めることにした。チェック数字を求める次のワークシート中のセル N2に入れる適切な式はどれか。このワークシートは,セル B2~M2に数字を入力することで,繰り返し使うものとする。 (1) セル B1~N1に,ISBN コードの桁数を表す数値を入力する。 (2) セル B2~M2に,ISBN コードの1~12桁を,各セルに1桁ずつ入力する。 (3) セル B3~M3に,ISBN コードの各桁に対応した重みを入力する。 (4) セル B5に,ISBN コードに各桁の重みを掛けたものの合計を求める。 (5) セル B6に,剰余関数を使った次の式を入力する。   剰余(B5,10) (6) セル N2に,チェック数字を求める式を入力する。

ABCDEFGHIJKLMN
1桁12345678910111213
2ISBN コード978400004321
3重み131313131313
4
5和(S)68
6剰余(R)

注記 網掛けの部分は,表示していない。 図3 チェック数字を求めるワークシート

出典 平成24年度 春期 ITパスポート試験 問100
解説

問 100

  • 不正解ア

    10-B6 は、剰余 R が 1〜9 の場合には確かに正しい値を返すので一見よさそうに見えるが、R=0 のときに 10 という2桁の値を返してしまう。チェック数字は ISBN の13桁目に入る1桁の数字なので 10 はあり得ず、正しくは 0 でなければならない。このワークシートは B2〜M2 の数字を入れ替えて繰り返し使う前提なので、和が 10 の倍数になる入力 (R=0) は当然発生する。特定の1例だけで正しくても、すべての入力に対して正しくない式は「適切な式」とは言えない。

  • 不正解イ

    B6-10 は引く向きが逆である。B6 は 剰余(B5,10) の結果なので必ず 0〜9 の範囲に収まり、そこから 10 を引くと結果は必ず −10〜−1 の負の値になる。図の例でも 8-10=−2 となり、チェック数字として意味をなさない。チェック数字は10の補数の考え方で「10から余りを引く」ものであり、被減数と減数が入れ替わっている点で明確な誤りである。

  • 不正解ウ

    10-剰余(B6,10) は、剰余関数を掛ける位置が間違っている。B6 はすでに 剰余(B5,10) の結果で 0〜9 の範囲にあるため、そこにもう一度 剰余(B6,10) を適用しても値は変わらず B6 そのものである。つまりこの式は結局アの 10-B6 と完全に同じ計算になり、R=0 のときに 10 を返すという同じ欠陥を抱える。剰余を取るべきなのは B6 ではなく、引き算を終えた後の 10-B6 の方である。

  • エ

    正解 正解はエ 剰余(10-B6,10)。まず図3のワークシートで何が計算されているかを追う。行3の重みは B 列から 1,3,1,3,… と交互に並び、B5 の 和(S) は ISBN コード各桁にその重みを掛けた総和である。図の値で確かめると 9×1+7×3+8×1+4×3+0×1+0×3+0×1+0×3+4×1+3×3+2×1+1×3 = 9+21+8+12+0+0+0+0+4+9+2+3 = 68 となり、図に表示された B5=68 と一致する。次に B6 の 剰余(R) は (5) の指示どおり 剰余(B5,10)、つまり 剰余(68,10)=8 である。ISBN の13桁目のチェック数字は「和を10で割った余りを10から引いた値」だが、ここに一つだけ落とし穴がある。余り R が 0 のとき 10-R は 10 になってしまい、1桁でなければならないチェック数字として成立しない (正しくは 0)。この設問のワークシートはセル B2〜M2 に数字を入力し直して繰り返し使うものと明記されているので、R=0 になる ISBN コードが入力される場合も必ず考慮しなければならない。そこで 10-B6 の結果をもう一度 10 で割った余りにすれば、R が 1〜9 のときはそのまま 10-R (=9〜1) を返し、R=0 のときだけ 剰余(10,10)=0 となって正しく 0 が得られる。この両方を一つの式で満たすのがエの 剰余(10-B6,10) である。図の例では 剰余(10-8,10)=剰余(2,10)=2 となり、N2 に入るチェック数字は 2 となる。

ここがポイント
  • チェックディジット (チェック数字) の計算手順 — 各桁に重みを掛けて合計し (S)、それを法 (ここでは10) で割った余りを求め (R)、法から余りを引いて検査用の1桁を作る。ISBN-13 では重みが 1,3,1,3,… と交互になる。
  • 剰余 (MOD) 関数で境界値をつぶす考え方 — 10-R は R=0 のときだけ 10 となって1桁に収まらないため、結果全体にもう一度 剰余(…,10) を掛けて 0〜9 に丸める。表計算の式は特定の1データではなく、繰り返し使うすべての入力で成立するかどうかで判断する。
用語

解答の記録