Last active
April 5, 2024 11:04
-
-
Save bungoume/9098967 to your computer and use it in GitHub Desktop.
早稲田大学 学籍番号CD(チェックデジット)計算
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import re | |
def faculty(id): | |
# http://www.waseda.jp/cjl/teachers/2012_fall_cjl_binran.pdf | |
FACULTY_CODE = ( | |
('1A', '政治経済学部'), | |
('1B', '法学部'), | |
('1C', '第一文学部'), # 廃番 | |
('1D', '第二文学部'), # 廃番 | |
('1E', '教育学部'), | |
('1F', '商学部'), | |
('1G', '理工学部'), # 廃番 | |
('1H', '社会科学部'), | |
('1J', '人間科学部'), | |
('2J', '人間科学部eスクール'), | |
('1K', 'スポーツ科学部'), | |
('1M', '国際教養学部'), | |
('1T', '文化構想学部'), | |
('1U', '文学部'), | |
('1W', '基幹理工学部'), | |
('1X', '創造理工学部'), | |
('1Y', '先進理工学部'), | |
('31', '大学院政治学研究科'), | |
('32', '大学院経済学研究科'), | |
('33', '大学院法学研究科'), | |
('34', '大学院文学研究科'), | |
('35', '大学院商学研究科'), | |
('36', '大学院理工学研究科'), | |
('37', '大学院教育学研究科'), | |
('38', '大学院人間科学研究科'), | |
('39', '大学院社会科学研究科'), | |
('40', '大学院アジア太平洋研究科'), | |
('42', '大学院国際情報通信研究科'), | |
('43', '大学院日本語教育研究科'), | |
('44', '大学院情報生産システム研究科'), | |
('45', '大学院公共経営研究科'), | |
('46', '大学院ファイナンス研究科'), | |
('47', '大学院法務研究科'), | |
('48', '大学院会計研究科'), | |
('50', '大学院スポーツ科学研究科'), | |
('51', '大学院基幹理工学研究科'), | |
('52', '大学院創造理工学研究科'), | |
('53', '大学院先進理工学研究科'), | |
('54', '大学院環境・エネルギー研究科'), | |
('55', '大学院教職研究科'), | |
('6R', '高等学院'), | |
('6S', '本庄高等学院'), | |
('6T', '高等学院中学部'), | |
('92', '別科日本語専修課程(短期日本語集中プログラム)'), | |
('97', '国際教養学部(SP3)'), | |
('98', '留学センター'), | |
('9A', 'オープン教育センター'), | |
) | |
return dict(FACULTY_CODE)[id[:2]] | |
def num(c): | |
if re.match('^[0-9]+$', c): | |
c = int(c) | |
else: | |
c = ord(c) - 64 | |
return c | |
#2J,9A,1T,1U,6S,6Tは正誤不明 | |
def calc_cd(student_id): | |
id = student_id.upper() | |
if not re.match('^[0-9A-Z]{8}$', id): | |
return None | |
s = (num(id[2])*0 + num(id[3])*3 + num(id[4])*4 | |
+ num(id[5])*5 + num(id[6])*6 + num(id[7])*7) | |
if id[0] == '1': | |
s += num(id[1])*2 | |
else: | |
s += (num(id[0])*10+num(id[1]))*2 | |
if id[1] in 'RSTU': | |
s -= 1 | |
if id[1] in 'WXY': | |
s -= 3 | |
return (11 - (s % 11)) % 10 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
print(calc_cd('1W130000')) | |
-> 3 | |
print(faculty('1W130000')) | |
-> '基幹理工学部' | |
Webで実行 | |
https://dl.dropboxusercontent.com/u/2390414/test/student_id.html |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment