• 装贴: 随机中文汉字验证码的生成及应用


    http://wulei8899.cnblogs.com/archive/2005/06/29/183200.html

    2 Net程序处理汉字编码原理分析 
       
      在.Net中可以使用System.Text来处理所有语言的编码。在System.Text命名空间中包含众多编码的类,可供进行操作及转换。其中的Encoding类就是重点处理汉字编码的类。通过在.NET文档中查询Encoding类的方法可以发现所有和文字编码有关的都是字节数组,其中有两个很好用的方法: 
      Encoding.GetBytes ()方法将指定的 String 或字符数组的全部或部分内容编码为字节数组 , Encoding.GetString ()方法将指定字节数组解码为字符串。 
      首先可以通过这两个方法将汉字字符编码为字节数组,同样知道了汉字GB2312的字节数组编码也就可以将字节数组解码为汉字字符。通过对“好”字进行编码为字节数组后 
      Encoding gb=System.Text.Encoding.GetEncoding("gb2312"); 
      object[] bytes=gb.Encoding.GetBytes ("好"); 
      发现得到了一个长度为2的字节数组bytes,使用 string lowCode = System.Convert.ToString(bytes[0], 16) 取出元素1编码内容(两位16进制)。而用string hightCode = System.Convert.ToString(bytes[1], 16)取出元素2编码内容(两位16进制)。之后发现字节数组bytes16进制变码后内容竟然是{ba,c3},刚好是“好”字的十六进制区位码(详情可查区位码表)。 
      因此就可以随机生成一个长度为2的十六进制字节数组,使用GetString ()方法对其进行解码就可以得到汉字字符了。不过对于生成中文汉字验证码来说,因为第15区也就是AF区以前都没有汉字,只有少量符号,汉字都从第16区B0开始,并且从区位D7开始以后的汉字都是和很难见到的繁杂汉字,所以这些都要排出掉。所以随机生成的汉字十六进制区位码第1位范围在B、C、D之间,如果第1位是D的话,第2位区位码就不能是7以后的十六进制数。在来看看区位码表发现每区的第一个位置和最后一个位置都是空的,没有汉字,因此随机生成的区位码第3位如果是A的话,第4位就不能是0;第3位如果是F的话,第4位就不能是F。这样就可以生成随机汉字了。 
      实现了随机生成汉字后,就可以使用.NET GDI来绘制自己需要的验证码图形了。 

  • 相关阅读:
    一些你不知道的js特性【一】
    webpack打包优化实践
    prerender-spa-plugin预渲染踩坑
    前端学习中你必须了解的几张图
    fis3打包中的一些注意事项
    js中的运算符优先级
    Vivado安装教程
    ISE14.7使用教程(一个完整工程的建立)
    如何高效的编写Verilog HDL——进阶版
    Vivado 2017封装自定义IP Core
  • 原文地址:https://www.cnblogs.com/ksport/p/2518007.html
Copyright © 2020-2023  润新知