随机验证码案例
一、了解验证码的组成
1、由4个字符组成的字符串
2、4个字符是随机的数字、大小写字母
3、4个字符的字体是随机的,并且颜色,大小都是随机的
4、同时,字体也是倾斜的
二、如何用c#来是实现?
1、在这里,我们要用到 Random 这个随机函数对象
2、那么该如何来使用Random呢?
Rabdom 既然是个函数对象,那么,它肯定是先创建/实例化这个对象才能使用,必须要在全局变量中来创建。
Random ra = new Random();//创建随机函数这个对象
3、有了随机对象以后,接下来考虑的问题就是,验证码是由4个字符串组成,那么肯定要先定义一个空的字符串来装这4个字符。
string sum = "";//定义一个string类型的空字符串来装随机出来的四个字符
4、接下里,就要开始随机了。验证码是由4个字符组成的,并且字符的数字大小写都是随机。
那么,就要使用for循环来输出4个数,然后,for循环中的循环体我们应该怎么写?
因为是由数字,大小写字母组成,所以是三种情况,那么,就让他随机出三个数0,1,2,其中,0代表数字,随机数字0-9,1代表大写字母,随机24个大写字母,2代表小写字母,随机24个小写字母。
5、然后随机出来的这四个数我们都要装到空字符串中。
for (int i = 0; i < 4; i++)//使用for循环来随机出来四个数
{
int type = ra.Next(0, 3);//让它随机出来0-2的数
if (type==0)//如果随机出0
{
sum+=ra.Next(0, 10).ToString()+'-';//那么就随机数字
}
else if (type==1)//如果随机出1
{
sum += ((char)ra.Next(65, 91)).ToString()+'-';//那么就让它随机大写字母
}
else//最后一种就是随机出2
{
sum += ((char)ra.Next(97, 123)).ToString()+'-';//那么就让他随机小写字母
}
}
6、然后我们要将4个随机字符装到lablel中,那么该如何装呢?
三、三种方法实现将四个字符装入到lablel中
1、分割字符串为数组
(1)什么是数组?
所谓数组,是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。
数组是用于储存多个相同类型数据的集合。
(2)所以要先定义一个数组然后使用 Split() 这个方法,然后并赋值给这个字符
① Split()表示基于数组中的字符,将字符串拆分为多个字符串 ,所以值必须要填分隔符,是字符
②既然是拆分字符串,那么就应该由分割符,拆分出来的字符串不包含分隔符
③所以,接下来要做的事就是要在三个随机0、1和2后边加字符,可以是‘,’或者‘-’,然后将这个分隔符填入到方法中
string[] arg = sum.Split('-');//定义数组,将拆分的字符串放入到数组中
(3)将定义好的数组赋值给4个lablel
label1.Text = arg[0];
label2.Text = arg[1];
label3.Text = arg[2];
label4.Text = arg[3];
因为for循环的是4个数,初始值从0开始i<4所以方括号中就应该填写0,1,2,3
这样就实现了随机验证码
2、截取字符串
(1)那么该如何截取字符串呢?
①要先定义一个string类型的变量
②使用Substring();这个方法并赋值为定义的String类型的变量
Substring();表示 从此实例检索子字符串,子字符串从指定的字符位置开始具有指定的长度。
简单来说就是将将这4个字符分别截取出来,但是他们有指定的长度
它的值是(从字符串的其实位置0开始,子字符串的字符数)。
那么,括号中的第一个值就是你4个随机数的序号0,1,2,3,第二个值是1,因为你截取的是一个字符
string str1 = sum.Substring(0,1);
string str2 = sum.Substring(1, 1);
string str3 = sum.Substring(2, 1);
string str4 = sum.Substring(3, 1);
③将定义的string变量分别赋值为lable1-4
label1.Text = str1;
label2.Text = str2;
label3.Text = str3;
label4.Text = str4;
这样就实现了随机验证码
3、通过索引获取字符串数据
①直接sum[0]就可以取得字符串中第一个字符,第二个就是1
②然后将索引获取的字符串赋值给lablel1-4就可以了
label1.Text=sum[0].ToString();//将char类型转转换为字符串类型
label2.Text = sum[1].ToString();
label3.Text = sum[2].ToString();
label4.Text = sum[3].ToString();
这个就跟分割字符串为数组的方法有异曲同工之妙,但是它不用添加任何方法。同样for循环的4个字符串为别0,1,2,3,就直接赋值就可以了
四、随机lablel文本中的字体,大小,颜色
1、随机字体的话就要用到第一种方法的数组
同样,也是先定义一个字体数组,实则就是string类型的变量,来装这些字体,但是不同的是它是由花括号括起来的,括号里边就直接写字体。因为是string类型所以必须加双引号。
string[] ziti = { "楷体", "宋体","Arial","Verdand","黑体","Impact","等线","微软雅黑","新宋体" };
label1.Font = new Font(ziti[ra.Next(9)],ra.Next(10, 25),FontStyle.Italic);//设置lablel1中的字体、大小随机,字体为倾斜
label2.Font = new Font(ziti[ra.Next(9)], ra.Next(10, 25), FontStyle.Italic);
label3.Font = new Font(ziti[ra.Next(9)], ra.Next(10, 25), FontStyle.Italic);
label4.Font = new Font(ziti[ra.Next(9)], ra.Next(10, 25), FontStyle.Italic);
同样,也是一样在数组名+[],括号里边就直接调用随机函数随机
Font 表示使用指定的大小和样式初始化文本
ra.Next(10, 25) 就表示随机字体大小10-24之间
FontStyle.Italic 就表示字体倾斜