[閒聊] 身分證字號產生器
今天和網友聊天談到這個
有人說"身分證字號產生器是寫程式基礎"
我才發現我沒寫過XD
所以試寫了一下
雖然寫完了,可以work(包含random產生以及檢核功能)
發現有點問題產生...
我在textbox1中輸入一串字之後,
想要計算權重,所以最好的方法是使用char[]去接這些字
但是因為第一個數字是英文字轉數字.
所以權重的計算法,程式寫起來就怪怪的
j是權重相加的結果.
j = j + ((Convert.ToInt16(s[0] - 'A') + 10) / 10) * 1;
j = j + ((Convert.ToInt16(s[0] - 'A') + 10) % 10) * 9;
簡單說明一下,身分證中A~Z分別代表10~33
我把第一個字(s[0])輸入之後,十位數和個位數分別*1和*9加起來
所以要先把A~Z置換成10~33 也就是(Convert.ToInt16(s[0] - 'A') + 10) 這段寫法
但是我覺得應該有比(Convert.ToInt16(s[0] - 'A') + 10)更好的寫法.
不知道有沒有人可以提供一下意見?
另外就是後面幾位數的加總.
我的寫法是計算該數字和'0'字元之間的差異數.
然後乘權重
j = j + (s[1] - '0') * 8;
j = j + (s[2] - '0') * 7;
j = j + (s[3] - '0') * 6;
j = j + (s[4] - '0') * 5;
j = j + (s[5] - '0') * 4;
j = j + (s[6] - '0') * 3;
j = j + (s[7] - '0') * 2;
j = j + (s[8] - '0') * 1;
我總覺得可以改寫成for迴圈,甚至於不用計算該數字和'0'之間的差距..
(也就是ASCII的表.我總覺得應該可以用convert才對,但是寫都有問題,就改用這方法...)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.231.38
→
11/26 02:24, , 1F
11/26 02:24, 1F
→
11/26 15:47, , 2F
11/26 15:47, 2F
→
11/26 16:41, , 3F
11/26 16:41, 3F
推
11/26 17:42, , 4F
11/26 17:42, 4F
推
11/26 21:35, , 5F
11/26 21:35, 5F
推
11/26 22:42, , 6F
11/26 22:42, 6F
→
11/27 17:07, , 7F
11/27 17:07, 7F
→
11/27 17:07, , 8F
11/27 17:07, 8F
推
11/30 12:03, , 9F
11/30 12:03, 9F