✏️第1問-問3を一緒に解答しよう

ここからは問3を確認していきましょう。

チェックディジットの仕組みを理解する問題です。

問3 前半(キ)の問題

今回の出題テーマ

チェックディジットと誤り検出

この問題は、IP03-08 「認証とフィルタリングによる情報セキュリティ」で学んだ内容が出題されています。

誤り検出については以前に習ったけど、チェックディジットについては覚えがないなぁ。

チェックディジットは、数字などの入力ミスを検知する方法です。

チェックディジットについては今までの学習にはありませんでしたが、問題文をしっかり読めば問題ありません。

問3 次の文章を読み,空欄 キ に当てはまる数字をマークせよ。また,空欄 ク に入れるのに最も適当なものを,後の解答群のうちから一つ選べ。

チェックディジットは,書籍のISBNコードなどで数字の入力ミスを検出するためなどに利用されている。 ここでは,5桁の数字(N₅N₄N₃N₂N₁)の利用者IDに,チェックディジット1桁(C)を加えた6桁の識別番号(N₅N₄N₃N₂N₁C)を考える。 チェックディジットの生成方法として,次の2種類を考える。

【生成方法A】 利用者IDの各桁の値を足し合わせ,10で割った余りRを求め, 10からRを引いた値をチェックディジットとする。

【生成方法B】 利用者IDの各奇数桁(N₅,N₃,N₁)の値をそれぞれ3倍にした値と, 各偶数桁(N₄,N₂)の値を足し合わせ,10で割った余りRを求め, 10からRを引いた値をチェックディジットとする。

なお,いずれの生成方法も,Rが0の場合は,チェックディジットを0とする。

例えば,ある利用者IDが「22609」の場合にチェックディジットを計算すると, 生成方法Aでは「1」になり,生成方法Bでは キ となる。

問3 前半(キ)の解説

計算が少し複雑で、途中で分からなくなってしまいました。

方法Aと方法Bでやることが違うのも混乱しました。

このように計算方法が示されている出題は、落ち着いてそのとおりに計算をしていけば簡単に解けますよ。

利用者IDが「22609」の場合を考えます。
まずは、生成方法Aでチェックディジットを求めてみましょう。

生成方法Aでは、すべての数字をそのまま足し合わせます。
2 + 2 + 6 + 0 + 9 = 19

19 ÷ 10 の余りは 9 なので、
チェックディジットは 10 − 9 = 1 となります。

では次に、生成方法Bで計算してみましょう。

生成方法Bでは、奇数桁と偶数桁で処理が異なります。
奇数桁(N5, N3, N1):2, 6, 9 → それぞれ3倍 → 6, 18, 27
偶数桁(N4, N2):2, 0 → そのまま → 2, 0

合計:6 + 18 + 27 + 2 + 0 = 53
53 ÷ 10 の余りは 3

チェックディジットは 10 − 3 = 7 となります。

ちゃんと分けて計算すればいいんですね!

確認しよう

方法Bでは、「奇数桁は3倍」「偶数桁はそのまま」で合計し、10で割った余りから求めます。

A n s w e r

答えは7です。

理由:方法Bに従って計算すると、合計53、余り3、10−3で7となるためです。

間違えやすいポイント

・桁の位置を逆にしてしまう

・3倍する場所を間違える

・最後の「10−R」を忘れる

問3 後半(ク)の問題

それでは、後半の問題を見てみましょう。

これらのチェックディジットでは,1桁の入力ミスは検出できても, 2桁の入力ミスは検出できないことがある。 生成方法Bはこの点について多少検出できるように工夫されている。 例えば, ク 入力ミスをした場合は,生成方法Aでは検出できることはないが, 生成方法Bでは検出できることがある。

ク の解答群

⓪ 奇数桁の数字を二つ間違える

① 連続する二つの桁の数字をそれぞれ間違える

② 奇数桁のうちの二つの桁の数字の順序を逆にする

③ 連続する二つの桁の数字の順序を逆にする

問3 後半(ク)の解説

どの入力ミスなら検出できるかが難しかったです。

ここは「方法Aと方法Bの違い」に注目します。

方法Aは「全部足すだけ」なので、順番を入れ替えても合計は変わりません。

つまり、並び替えミス(順序入れ替え)を検出できません。

一方、方法Bは桁ごとに重み(3倍)があるため、

順序を入れ替えると値が変わることがあります。

特に、「連続する2桁の入れ替え」は検出できるケースがあります。

順番が変わると重みが変わるからですね!

確認しよう

方法Bは、桁ごとに重みがあるため、「順序の入れ替え」に強い特徴があります。

では、実際に具体例で確認してみましょう。

利用者IDが「22609」の場合を考えます。 これを誤って「22069」と入力してしまった(連続する2桁の入れ替え)とします。

■ 生成方法Aの場合

元のID:2 + 2 + 6 + 0 + 9 = 19 → 10で割った余り9 → 10 − 9 = 1

入力ミス:2 + 2 + 0 + 6 + 9 = 19 → 10で割った余り9 → 10 − 9 = 1

→ チェックディジットが同じになってしまい、誤りを検出できません。

■ 生成方法Bの場合

元のID:
(2×3) + 2 + (6×3) + 0 + (9×3)
= 6 + 2 + 18 + 0 + 27 = 53 → 余り3 → 10 − 3 = 7

入力ミス:
(2×3) + 2 + (0×3) + 6 + (9×3)
= 6 + 2 + 0 + 6 + 27 = 41 → 余り1 → 10 − 1 = 9

→ チェックディジットが変わるため、誤りを検出できます。

このように、方法Bは桁ごとに重みが異なるため、 順序を入れ替えると計算結果が変わるという特徴があります。

それでは、実際に計算して確認しましょう。

この問題は、「どの入力ミスなら検出できるか」を、 実際にチェックディジットを計算して確認することがポイントです。

利用者ID「22609」を例にして、各選択肢を順番に試してみましょう。

元の値

22609

方法A:2+2+6+0+9=19 → 余り9 → チェックディジット=1
方法B:6+2+18+0+27=53 → 余り3 → チェックディジット=7

⓪ 奇数桁の数字を二つ間違える

例:22609 → 32608(奇数桁を変更)

方法A:3+2+6+0+8=19 → 余り9 → チェックディジット=1(変わらない)
方法B:9+2+18+0+24=53 → 余り3 → チェックディジット=7(変わらない)

→ どちらも検出できない

① 連続する二つの桁の数字をそれぞれ間違える

例:22609 → 23619

方法A:2+3+6+1+9=21 → 余り1 → チェックディジット=9(変わる)
方法B:6+3+18+1+27=55 → 余り5 → チェックディジット=5(変わる)

→ 両方とも検出できる

② 奇数桁のうちの二つの桁の順序を逆にする

例:22609 → 92602(奇数桁を入れ替え)

方法A:9+2+6+0+2=19 → 余り9 → チェックディジット=1(変わらない)
方法B:27+2+18+0+6=53 → 余り3 → チェックディジット=7(変わらない)

→ どちらも検出できない

③ 連続する二つの桁の数字の順序を逆にする

例:22609 → 22069(0と6を入れ替え)

方法A:2+2+0+6+9=19 → 余り9 → チェックディジット=1(変わらない)
方法B:6+2+0+6+27=41 → 余り1 → チェックディジット=9(変わる)

→ 方法Aでは検出できないが、方法Bでは検出できる

結論

方法Aでは検出できず、方法Bでは検出できるのは③です。

A n s w e r

答えは③です。

理由:方法Aでは順序を入れ替えても合計が変わらないが、方法Bでは重みが変わるため検出できるからです。

間違えやすいポイント

⓪:2桁の値が変わるだけでは検出できない場合がある

①:単なる2桁ミスは両方で検出できないことがある

②:奇数桁だけの入れ替えでは変化しにくい

③:順序入れ替えは方法Bで検出できる

✏️ 類題にチャレンジ

利用者ID「12345」に対して,問3にあった【生成方法A】と【生成方法B】でチェックディジットをそれぞれ求めなさい。
また,このIDではどちらの方法が入力ミスの検出に強いと考えられるか,理由とともに答えなさい。

ヒントをみる

方法Aは「すべての桁を足す」だけです。
方法Bは「奇数桁を3倍して足す」という違いがあります。

2つの方法で結果がどう違うかに注目しましょう。


問3では、「計算手順」と「検出できるミスの違い」がポイントでしたね。では次に、問4に進みましょう。

※この再現版では提出は行いません(送信先は未接続です)

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる