验证码中随机汉字的产生方法

来源:互联网 发布:sql sever添加约束 编辑:程序博客网 时间:2024/05/14 20:28

1.问题描述

    随着网络的发展,网络攻击技术也断发展,为了提高登录安全性,采用了验证码机制;验证码从最初的0-9个数字组成,后来加入了26个字母,再后来加入了汉字。本文就随机汉字的产生方法做一些描述。

2.关于汉字编码

汉字采用的编码标准是国标码,所谓国标码,是指国家标准汉字编码。一般是指国家标准局1981年发布的《信息交换用汉字编码字符集(基本集)》,简称GB-2312。在这个集中收进汉字6763个,其中一级汉字3755个,二级汉字3008个。一级汉字为常用字,按拼音顺序排列,二级汉字为次常用字,按部首排列。

GB-2312中,把汉字分为94个区,每个区94个位。实际上类似于一个94*94的矩阵,区对应行,位对应列,比如“卢”位于第34行(区)12列(列),那么它的区位码就是3412而内码是保存在计算机中或文件中的汉字编码。它是十六进制的(当然在机器中是二进制了)。要计算机中,汉字不能直接用区位码来表示。例如“65”,在ASCII中,它表示“A”,在GB-2312中表示第65区。如果在计算机中用一个“65”用来表示65区的话,就不知是“A”,还是“65了。因此提出了内码,也就是汉字在计算机内使用的编码方式。内码的基础还是区位码。一般用一个汉字的区位码加上十六进制的“A0A0”“2020”就是该字的内码了。因为ASCII的基本集只有128个,编号为0-127;而十六进投影的“A0”,换算为十进制,就是“160”了,这样就不会和ASCII的基本集相冲突了。

有很多区位码和内码的转换工具(比如汉字区位码内码转换伴侣,如下图),可以用来了解他们关系。

 

3.产生随机汉字

       在产生汉字之前还有个很重要的问题需要说明。因为第15区也就是AF区以前都没有汉字,只有少量符号,汉字都从第16B0开始,并且从区位D7开始以后的汉字都是和很难见到的繁杂汉字,所以这些都要排出掉。所以随机生成的汉字十六进制区位码第1位范围在BCD之间,如果第1位是D的话,第2位区位码就不能是7以后的十六进制数。在来看看区位码表发现每区的第一个位置和最后一个位置都是空的,没有汉字,因此随机生成的区位码第3位如果是A的话,第4位就不能是0;第3位如果是F的话,第4位就不能是F

      产生汉字的原理就是在上述规则下生成四个十六进制的随机数,按位组合起来就行了。

4.源代码

   下面就是产生随机汉字的源代码:

 

原创粉丝点击