t-nissieの日記: 【電脳】センター試験の受験番号のABCHKMRUXYZはチェックディジット 1
(解説を含めて高校生向けに再全面改訂)
t-nissieが確認した範囲では、2008年と2009年の大学入試センター試験の志願者
には数字6桁の「試験場コード」と数字4桁+アルファベット1文字の「受験番号」
が割り振られた。アルファベットはABCHKMRUXYZの11文字のどれかであり、
受験番号はたとえば「1234X」となる。このアルファベットはチェックディジットである。
試験場コード(d 1 d 2 d 3 d 4 d 5 d 6としよう)と受験番号の数字4桁(d 7 d 8 d 9 d 10)
とから、それぞれに1〜10をかけて、和をとって
d 1+2d 2+3d 3+4d 4+5d 5+6d 6+7d 7+8d 8+9d 9+10d 10 ≡ x mod 11 (1)
と11で割った余りxについて、下の表を引くことで一意に定まる。
表
11で割った余|0 1 2 3 4 5 6 7 8 9 10
アルファベット|A B C H K M R U X Y Z
なお、(1)式は合同式という。上のような使い方はちょっと正しくないが、
数組の番号とそのチェックディジットからチェックディジットの計算式を
解読する時に非常に便利な記法なので示しておいた。
このチェックディジットという仕組みにより、採点の機械は、データベース(志願者
名簿)を参照しなくても、受験生のマークミスを簡単に発見できるようになっている。
大学入試センター試験では試験監督が出欠確認をした上、解答用紙を受験番号順に集める。
試験場コードはいちおう記入するがマークはしない。さらに氏名まで記入させる。
受験番号のマークミスがあっても、さらには受験番号がマークされていなくても、
ほとんどの場合大学入試センターはそれを発見することができ、修正している。
試験場コードの誤記や受験番号のマークミスについての不安は無用である。
試験場コードと受験番号とがあれば、次のRubyスクリプトdnc.rbで簡単にチェックできる。
#!/usr/bin/env ruby
# dnc.rb Daigaku Nyushi Center Check Digit Checker by t-nissie
##
while line = ARGF.gets
shikenjyou, jyuken = line.strip.split
raise "Illegal shikenjyou code." if shikenjyou.to_i <= 100000 || 1000000 <= shikenjyou.to_i
raise "Illegal juken bangou." if jyuken[0,4].to_i <= 1000 || 10000 <= jyuken[0,4].to_i
cat = shikenjyou + jyuken
sum = 0
(1..10).each do |i|
sum += i*(cat[i-1]-48)
end
mod = sum.modulo(11)
check_digit = 'ABCHKMRUXYZ'[mod].chr
printf("%s %s %s(%2d)\n", shikenjyou, jyuken, check_digit, mod)
end
実行方法は
$ ./dnc.rb
111401 9999
111401 9999 K( 4)
111401 9998
111401 9998 M( 5)
^d で終了。
なるほど (スコア:1)
Best regards, でぃーすけ