菜鸟笔记—随机字符串的验证码图片(上) 静态&生成0~9与大小写A~Z的随机字符串

验证码的作用有防止电脑自动登录的,也有验证是否是本人登录的,验证的方式有许多种比如常见的字符串图片验证,近几年兴起的类拼图验证(其实我也不知道这个应该叫啥)以及短信验证等等,今天在这我要写的是用来防止电脑自动登录的字符串图片验证码。另外我是将这个字符串验证码图片分成两步来写的,在这之前先要说明这个方法属于静态类,那什么是静态:

如果类的方法前加了static关键字,则该方法称为静态方法,反之为实例方法。静态方法为类所有,可以通过对象来使用,也可以通过类来使用。但一般提倡通过类名来使用,因为静态方法只要定义了类,不必建立类的实例就可使用。静态方法只能调用静态变量。——引用于百度百科

首先当然是声明一个公共的静态类来存放两个静态方法(成员)两个静态方法分别是用来生成随机字符串的静态方法GetRandomCode与根据获取的字符串来创建验证码图片的静态方法CreateImage(两个静态方法的名称可以自己命名,这里只写了静态方法GetRandomCode的代码),那么静态类的声明与非静态类的声明有什么区别呢?我只找出了两点区别,第一点:静态类在public后面有一个static,而非静态类在public没有static,第二点:静态类中不能创建实例方法 (成员),但是可以使用类的实例(总感觉这句话哪有问题,就是找不到),非静态类中可以声明静态方法(PS:就是不知道会不会出现什么问题)。

那么我们来完成第一步,生成19与大小写AZ随机组合的字符串。那么在这个静态类中先声明一个变量用于存放字符串,利用关键字string声明这个变量并将string的属性Empty(这个应该是属性吧)赋值给这个变量,然后实例化Random(表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备——Visual
Studio 2015对Random的摘要)这个对象。

在for循环中声明一个char类型的对象用于存放数据,声明一个int变量并利用实例化的Random对象中的方法Next(方法Next()可以产生一个随机的非负整数)赋值,

再利用分支语句if…else if中将得到的随机非整数除以三取余,那么当余数等于零时,将生成的随机非负整数除以10取余,再将生成的余数加上十六进制的30(也就是十进制的48)之后强制转换成ASCII值存入之前声明为char类型的对象中。

若是余数等于1,将生成的随机非负整数除以十六进制的1a(十进制的26)取余,再将生成的余数加上十六进制的41(十进制的65)之后强制转换成ASCII值存入之前声明为char类型的对象中。

如果余数等于2,则是将生成的随机非负整数除以十六进制的1a(十进制的26)取余,再将生成的余数加上十六进制的61(十进制的97)之后强制转换成ASCII值存入之前声明为char类型的对象中。

其实在这个if…else if的分支语句中只要能够保证获取到的ASCII值是在48-57、65-90、97-122当中,是用十进制也好八进制也罢,只要在这个范围当中if…else if的分支语句怎么写都行。

在这个for循环中利用方法ToString将获取到的ASCII值转换为等效的字符串表现形式再进行拼接,拼接字符串的长度由这个静态方法的参数决定(ASCII值中的48-57转换为数字0-9,65-90转换为大写字母A-Z,97-22转换为小写字母a-z)。将拼接好的字符串返回控制器。

以下复制过来的代码:

public static class ValidCodeUtils //公共静态
{
  ///<summary>
  /// 获得随机字符串
  /// </summary>
  /// <param name="intLength">随机字符串的长度</param>
  /// <returns>随机数字符串</returns>
  public static string GetRandomCode(int intLength)//intLength指定随机字符串的长度
  {
	string strReturn = string.Empty;
	Random random = new Random();//随机数
	for (int i = 0; i < intLength; i++)
	{
            char cRerult;
            int intRandom = random.Next(); 
            if (intRandom % 3 == 0) //根据当前随机数来确定字符串,intRandom % 3 获取的是intRandom/3 得到的余数
            {  //产生数字
               //位数来产生数字
                cRerult = (char)(0x30 + (intRandom % 10));
            }
            else if (intRandom % 3 == 1)
            {   //位数产生大写字母:大写字符 65-97 A 65
                //68D  25 Z
                cRerult = (char)(0x41 + (intRandom % 0x1a));
            }
            else
            {
            	//余数为2    //产生小写字母 98 -116
                cRerult = (char)(0x61 + (intRandom % 0x1a));
            }
            strReturn += cRerult.ToString();//拼接字符串
	}
       return strReturn;
     }
  }

至于如何根据获取到的字符串来创建验证码图片,那就在下篇文献当中了。

发布了26 篇原创文章 · 获赞 4 · 访问量 3608

猜你喜欢

转载自blog.csdn.net/weixin_44545673/article/details/90288695