很多地方都会用到随机验证码,今天自己心血来潮想根据自己学的知识在winform中实现随机验证码,一下是源代码:
namespace 随机验证码
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void genvalid()
{
string valid = string.Empty;
Random r = new Random();
int t;
for (int i = 0; i < 4;i++ )
{
t = (int)Math.Floor(r.NextDouble()*10);
if (t % 2 == 0)
{
Class1 c1 = new Class1();
valid += c1.hash();
}
else valid += Math.Floor(r.NextDouble()*10).ToString ();
}
label1.Text = valid;
}
private void button1_Click(object sender, EventArgs e)
{
genvalid();
}
private void Form1_Load(object sender, EventArgs e)
{
genvalid();
}
}
}
//一下是另外添加的一个类,用于实现生成从a到z或A到Z的随机字母
namespace 随机验证码
{
class Class1
{
public string hash()
{
int k;
Hashtable mytable = new Hashtable();
mytable.Add(0,"a");
mytable.Add(1, "b");
mytable.Add(2, "c");
mytable.Add(3, "d");
mytable.Add(4, "e");
mytable.Add(5, "f");
mytable.Add(6, "g");
mytable.Add(7, "h");
mytable.Add(8, "i");
mytable.Add(9, "j");
mytable.Add(10, "k");
mytable.Add(11, "l");
mytable.Add(12, "m");
mytable.Add(13, "n");
mytable.Add(14, "o");
mytable.Add(15, "p");
mytable.Add(16, "q");
mytable.Add(17, "r");
mytable.Add(18, "s");
mytable.Add(19, "t");
mytable.Add(20, "u");
mytable.Add(21, "v");
mytable.Add(22, "w");
mytable.Add(23, "x");
mytable.Add(24, "y");
mytable.Add(25, "z");
mytable.Add(26, "A");
mytable.Add(27, "B");
mytable.Add(28, "C");
mytable.Add(29, "D");
mytable.Add(30, "E");
mytable.Add(31, "F");
mytable.Add(32, "G");
mytable.Add(33, "H");
mytable.Add(34, "I");
mytable.Add(35, "J");
mytable.Add(36, "K");
mytable.Add(37, "L");
mytable.Add(38, "M");
mytable.Add(39, "N");
mytable.Add(40, "O");
mytable.Add(41, "P");
mytable.Add(42, "Q");
mytable.Add(43, "R");
mytable.Add(44, "S");
mytable.Add(45, "T");
mytable.Add(46, "U");
mytable.Add(47, "V");
mytable.Add(48, "W");
mytable.Add(49, "X");
mytable.Add(50, "Y");
mytable.Add(51, "Z");
Random r1 = new Random();
k=r1.Next(52);
string c=(string)mytable[k];
return c;
}
}
}
检验了一下,能够达到目的,不过似乎不是很好,在一个验证码中有很多相同的数字或字母,比如6ggg,I3II等等,难道是巧合?盼望有高人来指点一下!