我是笑林新记,分享一下我使用C#的一些用法,希望对大家有帮助!欢迎关注:笑林新记
Visual Studio版本:Enterprise 2015
.net Framework版本:3.5
1
上节回顾
上篇文章主要讲述了字母+数字组成的验证码,然后可以根据实际需要设置字符集、颜色数组,字体数组,噪线、噪点等。增加验证码的复杂度。文章链接如下:
C# 英文字母和数字组合验证码
2
代码分析
本篇文章来讲一下中文验证码的生成。
首先中文汉字很多,采用字符集或者数据库的方式也行,但是比较麻烦,那么可以省去字符集和数据库吗,肯定是可以的,GB2312编码字符集。
GB2312采用双字节编码方式。编码范围:A1A1-FEFE,其中汉字编码范围:B0A1-F7FE。具体细节可以自行查阅,GB2312编码共收录汉字6763个,其中一级汉字3755个,二级汉字3008个。一级为常用汉字,二级为偏僻或不常见的汉字,所以我们验证码只需用一级汉字就可以。
一个汉字是由4位16进制数字组成,所以定义一个0-f的字符串数组,需要几个随机汉字,就做几次for循环。
第一位:用11到14的原因是:汉字编码范围是从B0A1开始的,所以从11开始,因为我们用的是一级汉字,一级汉字最后一个是D7F9,所以,第一位其实只有BCD三种情况。
第二位:D7之后就是二级汉字,所以当第一位是D时,第二位最多只能到7。
第三位:取值范围是A-F,为什么没有0-9,是因为GB2312采用的是双字节,第一个字节为“高字节”,对应94个区;第二个字节为“低字节”,对应94个位。所以它的区位码范围是:0101-9494。区号和位号分别加上0xA0就是GB2312编码。区号和位号分别加上0xA0就是GB2312编码。所以不会出现0-9,至于为什么这么定义,咱也不知道,不是我定义的。
第四位:这个就好解释了,第二个字节不会出现A0和FF的情况。
得出随机中文后,接下来就简单了,绘制噪点、噪线,昨天的那个没有绘制噪点,代码参考这个就行。
3
运行结果
运行结果: