[閒聊] 身分證字號產生器

看板C_Sharp作者 (Orz)時間16年前 (2009/11/26 00:34), 編輯推噓4(405)
留言9則, 8人參與, 最新討論串1/1
今天和網友聊天談到這個 有人說"身分證字號產生器是寫程式基礎" 我才發現我沒寫過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
沒聽過+1
11/26 15:47, 2F

11/26 16:41, , 3F
我也沒聽過啊XD...不過試寫了一下,邏輯滿適合當作業的
11/26 16:41, 3F

11/26 17:42, , 4F
同1樓,99乘法才是基礎吧~想練功可以寫 數讀解答器
11/26 17:42, 4F

11/26 21:35, , 5F
Console.Write("Hello World!"); 才是基礎吧 :p
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
我個人是會用的語言都有寫過這玩意就是了 當作練習 XD
11/27 17:07, 8F

11/30 12:03, , 9F
寫程式的基礎不是二分搜尋法嗎?
11/30 12:03, 9F
文章代碼(AID): #1B3LoLfr (C_Sharp)