作者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