作者liaommx (Orz)
看板C_Sharp
標題[閒聊] 身分證字號產生器
時間Thu Nov 26 00:34:26 2009
今天和網友聊天談到這個
有人說"身分證字號產生器是寫程式基礎"
我才發現我沒寫過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
1F:→ joefaq:從來沒聽過第二句這個說法 = = 11/26 02:24
2F:→ CaMper8850:沒聽過+1 11/26 15:47
3F:→ liaommx:我也沒聽過啊XD...不過試寫了一下,邏輯滿適合當作業的 11/26 16:41
4F:推 Elly:同1樓,99乘法才是基礎吧~想練功可以寫 數讀解答器 11/26 17:42
5F:推 ithinkurdumb:Console.Write("Hello World!"); 才是基礎吧 :p 11/26 21:35
6F:推 ogamenewbie:可能講反了吧 "有程式基礎寫____不是問題" 11/26 22:42
7F:→ kikiqqp:基本上不難寫,適合已經學過矩陣的學生當做作業 11/27 17:07
8F:→ kikiqqp:我個人是會用的語言都有寫過這玩意就是了 當作練習 XD 11/27 17:07
9F:推 Eleganse:寫程式的基礎不是二分搜尋法嗎? 11/30 12:03