基本情報技術者 2017年 秋期 午前(科目A) 問24
問題文
次の方式によって求められるチェックデジットを付加した結果はどれか。ここで、データを7394、重み付け定数を1234、基数を11とする。
〔方式〕
(1) データと重み付け定数の、対応する桁ごとの積を求め、それらの和を求める。
(2) 和を基数で割って、余りを求める。
(3) 基数から余りを減じ、その結果の1の位をチェックデジットとしてデータの末尾に付加する。
選択肢
ア:73940(正解)
イ:73941
ウ:73944
エ:73947
チェックデジット算出(データ7394、重み1234、基数11)【午前2 解説】
要点まとめ
- 結論: 計算の結果、チェックデジットは0で、データ7394の末尾に付加した最終結果は73940(選択肢ア)となります。
- 根拠: 各桁に重み1,2,3,4を掛けた和が56、これを11で割った余りが1、11−1=10の1の位が0だからです。
- 差がつくポイント: 桁と重みの対応順、剰余の取り扱い、そして「基数−余り」の1の位だけを採るルールを正確に実行すること。
正解の理由
正解は ア です。手順に従うと次のようになります。
各桁と重みの積を求めて和を取ると、。
これを基数で割った余りはです。基数から余りを減じると、その結果の1の位がチェックデジットなのでになります。したがって元のデータ7394に末尾0を付け、73940が正しい答えです。
各桁と重みの積を求めて和を取ると、。
これを基数で割った余りはです。基数から余りを減じると、その結果の1の位がチェックデジットなのでになります。したがって元のデータ7394に末尾0を付け、73940が正しい答えです。
よくある誤解
- 重みの対応順を逆にするミス:データの左端から重みの左端へ対応させるのが本問の想定で、逆にすると答えが変わります。
- 「基数−余り」をそのままチェック桁にする誤解:本方式はその結果の1の位だけを採るため、例えば10なら0になります。
- 余りが0の場合の扱いを誤る:余り0ならで1の位は1となる点に注意(本方式の規則に従う)。
解法ステップ
- データの各桁と、対応する重み付け定数の各桁を位置ごとに対応させる(ここでは先頭同士を対応)。
- 各対応する桁同士の積を求める。
- すべての積を足して総和を求める。
- その総和を基数で割り、余りを求める(剰余演算)。
- 基数から余りを減じ、その結果の1の位をチェックデジットとしてデータ末尾に付加する。
具体計算:
→ 和
の余りは → → 1の位は → チェックデジット → 73940
→ 和
の余りは → → 1の位は → チェックデジット → 73940
選択肢別の誤答解説
- ア: 73940 — 正解。上記手順で得られる値です。
- イ: 73941 — 間違い。これは「基数−余り」の結果(10)を2桁のまま末尾に付けたか、あるいは余り1を誤ってそのまま付加した結果に見えます。
- ウ: 73944 — 間違い。これはチェック桁を4とした場合で、積和や剰余の計算ミス(例えば重みの掛け間違いや桁ずれ)による誤答です。
- エ: 73947 — 間違い。選択肢の中でも大きくずれており、重みや基数の計算を根本的に誤った結果です。
補足コラム
- 本方式は「重み付き和→剰余→基数−剰余→1の位を採る」という独自ルールを採用しています。これにより、チェックデジットは常に0〜9の一桁となります。
- 他に知られる方式として、剰余を直接チェック桁にする方法や、剰余が10の場合に'X'を用いるISBN方式(モジュロ11の変形)などがあり、ルールは問題文で明示された方式に従う必要があります。
- 実装例(計算確認用、Python):
data = "7394" weights = "1234" s = sum(int(d)*int(w) for d,w in zip(data,weights)) r = s % 11 check = (11 - r) % 10 # 1の位だけを取る実装 result = data + str(check) print(s, r, 11-r, check, result) # 56 1 10 0 73940
FAQ
Q1: 余りが0のときチェックデジットはどうなりますか?
A1: 割り算の余りが0ならとなり、その1の位は1です。本方式ではチェックデジットは1になります。問題文のルールに従ってください。
A1: 割り算の余りが0ならとなり、その1の位は1です。本方式ではチェックデジットは1になります。問題文のルールに従ってください。
Q2: 桁と重みの対応はどちらから合わせますか?
A2: 問題文の例ではデータの左端(最上位桁)と重みの左端を対応させています。必ず問題文の指示通りに合わせてください。
A2: 問題文の例ではデータの左端(最上位桁)と重みの左端を対応させています。必ず問題文の指示通りに合わせてください。
Q3: なぜ1の位だけを取るのですか?
A3: 方式の定義によるもので、結果を0〜9の一桁に収めるためのルールです。方式が異なれば取り扱いも変わります。
A3: 方式の定義によるもので、結果を0〜9の一桁に収めるためのルールです。方式が異なれば取り扱いも変わります。
関連キーワード: チェックデジット、重み付け、剰余演算、モジュロ演算、基数11、符号検査、誤り検出、計算例、コード実装

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

