一. 实验要求
这是一个实际的项目衍生出来的核心算法之一。防伪码是我们现在经常在商品上看到的防伪手段之一,现在需要编写一个防伪码生成器,按照输入参数生成防伪码,并且把生成的时间及指定的防伪码输出。
1)防伪码的组成
防伪码由以下字符组成:0123456789ABCDEFGHJKLMNPQRSTUVWXYZ
(数字1和字母I相近、数字0和字母O相近,所以去掉字母I和字母O。全部字母大写)
2)在命令行中输入2个参数,分别是:
防伪码长度
防伪码个数
例如:在命令行中调用程序为:学号.exe 10 10000
指的是防伪码长度为10,生成10000个防伪码。
3)防伪码的生成及注意事项
防伪码的长度由命令行参数决定;
所生成的防伪码不能重复(按照以上例子,生成了10000个防伪码,这10000个防伪码就肯定不能重复)。
二. 设计思路
1)程序运行计时
在最上面加入using System.Diagnostics;
在程序头加入:
Stopwatch timer1 = newStopwatch();//计时器类
timer1.Start();//开始计时
在程序最尾加入:
timer1.Stop();//停止计时
double dMilliseconds = timer1.Elapsed.TotalMilliseconds;
Console.WriteLine("生成个数为:{0},运行时间为:{1}", icount, dMillisecondes);
Console.ReadKey();
Stopwatch是C#一个类似秒表的东西,用来计算程序的运行时间,注意,必须按照要求,计时器在程序运行时就要开启,在结束时停止并输出结果,不能放置在其他地方。
2)防伪码生成思路
例如,有以下定义:
string strTableChar ="0123456789ABCDEFGHJKLMNPQRSTUVWXYZ";
生成一个从0到strTableChar.Length的数字a,然后使用strTableChar[a]就可以随机返回一个字母,重复n次(n等于防伪码的长度),这样就可以组合到一串随机字符串,也就是防伪码了。
3)防伪码存储思路
先定义一个StringBuilder类型的result,用于存储每次生成的防伪码,在存储时,要用Append往result的后面添加字符。然后将result转换成string类型,在作为key存储在Hasgtable类型的list中根据key来比较是否已经存在该防伪码。存储完一次,就将result初始化。
StringBuilder result = newStringBuilder();
Hashtable list = newHashtable();