Skip to content

Instantly share code, notes, and snippets.

@t-nissie
Last active July 15, 2026 22:10
Show Gist options
  • Select an option

  • Save t-nissie/b25e433cbd2ceab7b445fad5db7c4d7b to your computer and use it in GitHub Desktop.

Select an option

Save t-nissie/b25e433cbd2ceab7b445fad5db7c4d7b to your computer and use it in GitHub Desktop.
大学入学共通テスト(旧大学入試センター試験)のチェックディジットを計算するRubyスクリプト

t-nissieが確認した範囲では、2008年と2009年の大学入試センター試験の志願者 には数字6桁の「試験場コード」と数字4桁+アルファベット1文字の「受験番号」 が割り振られた。アルファベットはABCHKMRUXYZの11文字のどれかであり、 受験番号はたとえば「1234X」となる。このアルファベットはチェックディジットである。 試験場コード(d1 d2 d3 d4 d5 d6としよう)と 受験番号の数字4桁(d7 d8 d9 d10)とから、それぞれに1〜10をかけて、和をとって

d1+2d2+3d3+4d4+5d5+6d6+7d7+8d8+9d9+10d10 ≡ 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で簡単にチェックできる。

実行例: ./dnc.rb examples.dat
#!/usr/bin/env ruby
# dnc.rb Daigaku Nyushi Center Check Digit Checker by t-nissie
# Usage: ./dnc.rb examples.dat
##
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].chr.to_i)
end
mod = sum.modulo(11)
check_digit = 'ABCHKMRUXYZ'[mod].chr
printf("%s %s %s(%2d)\n", shikenjyou, jyuken, check_digit, mod)
end
110102 2435Z
110102 2484B
110102 2491C
110102 2543U
110102 2551U
110102 2605Z
110102 2856K
110103 3009K
110103 3023R
110103 3064X
110103 3103U
110103 3182H
110103 3205C
110103 3253M
110103 3291Z
110103 3302C
110103 3338B
110103 3350M
110105 5053K
110105 5093U
110105 5098C
110105 5188B
110105 5288Y
110105 5390B
110106 6484Y
110107 1041H
110107 1063X
110107 1449M
110107 1584Z
110107 1627M
110107 1641U
110201 1278U
110203 1421X
110205 1268A
110901 1587H
110901 1676H
110901 1706H
111401 1887Z
111401 3310M
111601 1903C
111601 3361C
113801 2145K
113905 9328Z
114202 1620Y
114401 1396A
114403 4012U
114406 8614A
115701 2220B
118601 1707H
118603 3220H
230101 1249C
230101 1339B
232801 1077M
346601 1082K
347801 1086A
350201 1052A
350301 1093R
350301 1121X
350601 1007Z
350601 1129B
351001 1375B
351001 1831Y
351101 1075H
351101 1122C
351101 1244K
351401 1115C
352101 1026K
352501 1038M
353401 1371M
354001 1430Y
354901 2177C
355001 1200C
359901 1032K
361502 1608Y
361801 1497K
362306 1110M
363501 1087B
366101 1548X
370801 1152H
374001 2030Z
374305 2326A
376501 1300K
380301 1046X
381101 1178H
384201 1181Z
392301 1012K
395401 1097U
110101 1293K
110101 1335A
110101 1349M
110101 1368C
110101 1438M
110101 1444U
110102 2181C
110102 2190B
110102 2247B
110102 2557B
110102 2672Z
110102 2764U
110102 2872K
110102 2880K
110103 3112R
110103 3479A
110105 5018U
110105 5124R
110105 5127H
110105 5183R
110105 5198Z
110105 5208H
110105 5223K
110105 5298U
110105 5305H
110105 5325Z
110105 5350Y
110105 5385Y
110105 5387U
110105 5422Z
110105 5518H
110105 5602X
110105 5638U
110105 5642A
110105 5675C
110106 6611Y
110107 1024K
110107 1029Z
110107 1196U
110107 1283Y
110107 1329B
110107 1469B
110107 1471U
110107 1514C
110107 1582B
110107 1657Z
110107 1711Z
110108 1081B
110108 1098H
110108 1228A
110108 1239X
110201 1560X
110801 1149R
110801 1509C
110901 1111C
110901 1258R
110901 1623M
111001 1375C
111401 1325R
111401 1513K
111401 2135R
111401 2276M
111401 3138Z
112602 1819R
112901 1568B
113701 1785A
113702 4010B
113702 4384U
113802 4656R
113802 5029B
113803 7240Y
113905 8187Y
113905 8376R
113905 9678C
114403 4179U
115308 1569M
115501 2047Z
115701 4683Z
116302 2074X
116302 2077M
116501 1244H
116501 2410H
116704 4096A
116710 1052M
117001 1448Y
118201 3567R
118606 1341Z
118608 1055H
119706 6330A
119706 6354H
119706 6590K
119901 1035C
119904 4372M
120501 1145A
120501 1188A
120602 5476A
230101 1019H
230101 1281C
230101 1312B
230101 1340X
230101 1346C
230101 1434H
231301 1535Z
231902 3339B
350201 1344C
350201 1514C
350301 1242A
350801 1372A
350801 1404Y
351001 1085X
351101 1286M
351101 1378C
351101 1464M
351101 1559Z
354601 1554A
354901 2158M
355501 1820A
356001 2091Z
357201 1425B
357401 1180A
360101 1680Y
360501 1378R
360701 1245K
361601 1382R
362101 2372Y
362305 1058X
362305 1492M
364102 1332A
364102 2027C
364501 2297H
364801 2179Y
365101 2631U
367001 1471A
367201 1105M
368201 1584H
369201 1159X
371101 1121U
371601 1611H
372301 1982H
374001 1255Z
374001 1689Z
374305 1978U
375701 2112U
376301 1152B
377001 1083Z
377301 1066B
377301 1227C
377301 1272X
382601 1510B
383601 2305H
384201 1013H
384201 1156A
384201 1234H
385901 1233C
385901 1541K
388101 1031Y
388101 1045H
388101 1111Z
388101 1174R
388101 1193H
388101 1236Y
388101 1264M
388101 1287Y
388101 1301R
391001 1229U
110102 2014M
110102 2074K
110102 2554K
110105 5059Y
110107 1532A
110205 1522M
111101 1299B
112105 7290C
112303 1847U
112401 1133K
112403 1103A
112405 1247X
112601 1102X
112601 1257B
112601 1723U
112602 2189Y
112602 2386R
112602 3638B
112604 1466B
112604 2094M
112901 2483B
113201 1541Y
113201 2956X
113803 7440H
114201 2091C
114201 2422H
114201 2988H
114406 8273B
115106 1580B
115106 1613Y
115202 1490K
115308 1061R
115501 2019H
115501 2238M
115801 1872B
116001 1074M
116302 2344M
116305 2337A
116312 1036B
116501 1961H
116501 2847A
116601 1100A
116601 1600U
116703 3258Y
116709 9005U
116901 1273H
117101 1895M
117606 8050Y
118201 3453K
118501 1984C
118606 1888C
119201 1692C
120501 1482X
230101 1349Z
231301 1406U
231902 3105R
232101 1199B
232401 1260H
232801 1025R
233701 1278X
236101 1104H
341001 1139Y
342201 1166R
345801 1180X
352401 1641Z
352901 1039Y
352901 1549H
352901 1573H
355401 1175C
355401 1341R
356503 1238B
357401 1765H
358401 1118Y
360001 1180Y
360101 1713R
360101 1945H
361001 1285K
362302 2274C
362306 1063R
362502 1023Y
362801 1326H
362801 1415H
362801 1449K
363901 1306H
364201 1440R
364701 1447X
365101 2268R
365101 2348U
366001 1208Z
366101 1085U
366201 1031H
366701 1418X
367001 1392Y
367101 1420K
371601 1823K
372301 1318U
372601 1263R
372601 1332Z
375701 2029B
376001 2074K
376101 1103C
376101 1218H
376301 1059X
376401 1121B
376701 1213Z
377001 1214R
377101 1117Z
377901 1231X
378301 2186K
383201 1569C
383601 1135U
384201 1143M
384401 1007Y
385901 1083Y
387601 1020U
388101 1296X
390301 1123H
392101 1162M
392201 1178B
394401 1403H
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment