計算問題の解き方・18/20
チェックディジットの求め方
データの各桁に重みを掛けて足し、基数で割った余りから検査用の数字(チェックディジット)を決める方式が文章や式で示され、付加した結果や検査数字、未知の桁の値を求めます。チェックディジットを付ける目的が問われることもあります。
公開過去問での出題:本試験系 2 回・免除試験 12 回(観測値)
覚える式
- 積の和 S = 各桁 × 対応する重み の合計
- 余り = mod(S, 基数)(S を基数で割った余り)
- チェックディジット = 余り、または 基数 − 余り(どちらを使うか、1 の位だけを使うかなどは問題の方式に従います)
解き方の手順
- まず方式を最後まで読み、重み付け定数、基数、余りをそのまま使うのか「基数 − 余り」を使うのか、例外の扱い(1 の位だけ使う、10 なら記号にするなど)を確かめます。
- データの桁と重みを先頭から 1 桁ずつ対応させて掛け、その積をすべて足して S を出します。
- S を基数で割って余りを求めます。
- 手順 1 で確かめた方式どおりに最後の処理をして、チェックディジットを決めます。付加した結果を問われたら、データの末尾に付けます。
- チェックディジットが分かっていて桁の一つが分からない問題では、分からない桁を文字のまま式に入れます。そして余りが指定の値になる数字を 0〜9 から探します。
- チェックディジットを付ける目的は、コードを入力するときの誤りを見つけることです。
例題
次の方式によって求められるチェックディジットを付加した結果はどれか。ここで,データを 7394,重み付け定数を 1234,基数を 11 とする。
〔方式〕
(1) データと重み付け定数の,対応する桁ごとの積を求め,それらの和を求める。
(2) 和を基数で割って,余りを求める。
(3) 基数から余りを減じ,その結果の 1 の位をチェックディジットとしてデータの末尾に付加する。
ア 73940
イ 73941
ウ 73944
エ 73947
出典:平成29年度 秋期 基本情報技術者試験 午前 問24(解き方は当サイト作成)
解き方と答えを見る
- 方式:重みは 1234、基数は 11、最後は「11 − 余り」の 1 の位を末尾に付けます。
- 積の和 S = 7×1 + 3×2 + 9×3 + 4×4 = 7 + 6 + 27 + 16 = 56
- 56 ÷ 11 = 5 余り 1 なので、余りは 1 です。
- 11 − 1 = 10 で、その 1 の位は 0 なので、チェックディジットは 0 です。
- データ 7394 の末尾に 0 を付けて 73940 になります。
答え:73940(ア)
ひっかけ
- 余り 1 をそのまま末尾に付けると 73941 になります。方式の (3)「基数から余りを減じ」を飛ばした誤りです。最後の処理は毎回方式の文で確かめてください。
- 重みを逆向き(7×4, 3×3, 9×2, 4×1)に掛けると S = 59、余りは 4 です。そのまま付けると 73944、11 − 4 = 7 を付けると 73947 になります。重みは先頭の桁から順に対応させます。
- 11 − 1 = 10 の「10」を 2 桁のまま付けたくなりますが、方式は「1 の位」と指定しています。結果が 2 桁になったときの扱いは方式の但し書きで決まります。
- 問題によって、余りをそのまま使う方式と「基数 − 余り」を使う方式があります。覚えた方式を使い回さず、毎回問題の規則を読み直してください。
類題(手順を使って解く)
類題 1
重みが先頭から 4,3,2,1 と下がっていく並びと、余りをそのまま検査文字にする方式に合わせて、手順 2〜4 をそのとおりに使えるかが試されます。
与えられたデータから一定の規則に従って数値を算出し,この数値から検査文字を定めて与えられたデータに付加する。これを用いて入力データの検査を行う。
次の規則を用いた場合に,4けたの数値データ“2131”に付加する検査文字として,正しいものはどれか。
〔規則〕
(1) 与えられたデータの各けたに,先頭から係数4,3,2,1を割り当てる。
(2) 各けたの数値と割り当てた係数とのそれぞれの積の和を求める。
(3) (2)で求めた和を11で割って余りを求める。
(4) (3)で求めた余りの数字を検査文字とする。ただし,余りが10のときは,“X”を検査文字とする。
出典:基本情報技術者試験 科目A免除 修了試験 20111218 実施分 問58(問題文は IPA の公開問題。答えと解説はリンク先)
類題 2
チェックディジットから逆にたどり、分からない桁を文字のまま式に入れて mod 10 の条件を満たす数字を探す手順 5 が試されます。
4 桁の整数 N1N2N3N4 から,次の方法によって検査数字(チェックディジット)C を計算したところ,C = 4 となった。N2= 7,N3= 6,N4= 2 のとき,N1 の値は幾らか。ここで,mod(x,y) は,x を y で割った余りとする。
検査数字: C = mod((N1×1+N2×2+N3×3+N4×4),10)(N1〜N4 の数字は添字)
出典:平成25年度 秋期 基本情報技術者試験 午前 問3(問題文は IPA の公開問題。答えと解説はリンク先)
類題 3
計算ではなく、チェックディジットを付ける目的(手順 6)を他の選択肢と区別できるかが試されます。
顧客コードにチェックディジットを付加する目的として,適切なものはどれか。
出典:基本情報技術者試験 科目A免除 修了試験 201101 実施分 問59(問題文は IPA の公開問題。答えと解説はリンク先)