博客
关于我
用C#生成随机中文汉字验证码的基本原理
阅读量:345 次
发布时间:2019-03-04

本文共 4675 字,大约阅读时间需要 15 分钟。

???????????????????

???????????????????????????????????????????????????????????????????????????????????????????????????????

1980??????????????????????GB2312-80?????????????????????GB18030-2000????????????????????????GB2312-1980?GB13000-1993?????????????????????????????GB18030?????Windows?????????????????????????????GB2312?????????????????????????????????????????????GB2312?????????????????????????????????????????????????????

??????????????????????????????????????????????????GB2312???????????????????ba c3???ba?????c3?????????????????????15??AF??????????????????????16??B0???????GB2312?????????

?.NET??????????????System.Text??????Encoding???????????????????????????????Encoding.GetBytes()????????????????Encoding.GetString()??????????????????????GB2312?????????????????????

using System;using System.Text;namespace ConsoleApplication{    class ChineseCode    {        public static object[] CreateRegionCode(int strlength)        {            string[] rBase = new string[16];            Random rnd = new Random((DateTime.Now.Ticks) + i);                        object[] bytes = new object[strlength];                        for (int i = 0; i < strlength; i++)            {                int r1 = rnd.Next(11, 14);                string str_r1 = rBase[r1].Trim();                int r2 = rnd.Next(0, 7);                if (r1 == 13)                {                    r2 = rnd.Next(0, 16);                }                else if (r1 == 15)                {                    r2 = rnd.Next(0, 16);                }                else                {                    r2 = rnd.Next(0, 16);                }                string str_r2 = rBase[r2].Trim();                                byte byte1 = Convert.ToByte(str_r1 + str_r2, 16);                byte byte2 = Convert.ToByte(str_r3 + str_r4, 16);                                byte[] str_r = new byte[] { byte1, byte2 };                bytes.SetValue(str_r, i);            }            return bytes;        }                public static void Main()        {            Encoding gb = Encoding.GetEncoding("gb2312");            object[] bytes = CreateRegionCode(4);                        string str1 = gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[])));            string str2 = gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[])));            string str3 = gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[])));            string str4 = gb.GetString((byte[])Convert.ChangeType(bytes[3], typeof(byte[])));                        Console.WriteLine(str1 + str2 + str3 + str4);        }    }}

??????????????????????????????GetString()???????????????????????????????????????????

?????????C#????????

using System;using System.Text;namespace ConsoleApplication{    class ChineseCode    {        public static object[] CreateRegionCode(int strlength)        {            string[] rBase = new string[16];            Random rnd = new Random((DateTime.Now.Ticks) + i);                        object[] bytes = new object[strlength];                        for (int i = 0; i < strlength; i++)            {                int r1 = rnd.Next(11, 14);                string str_r1 = rBase[r1].Trim();                int r2 = rnd.Next(0, 7);                if (r1 == 13)                {                    r2 = rnd.Next(0, 16);                }                else if (r1 == 15)                {                    r2 = rnd.Next(0, 16);                }                else                {                    r2 = rnd.Next(0, 16);                }                string str_r2 = rBase[r2].Trim();                                byte byte1 = Convert.ToByte(str_r1 + str_r2, 16);                byte byte2 = Convert.ToByte(str_r3 + str_r4, 16);                                byte[] str_r = new byte[] { byte1, byte2 };                bytes.SetValue(str_r, i);            }            return bytes;        }                public static void Main()        {            Encoding gb = Encoding.GetEncoding("gb2312");            object[] bytes = CreateRegionCode(4);                        string str1 = gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[])));            string str2 = gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[])));            string str3 = gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[])));            string str4 = gb.GetString((byte[])Convert.ChangeType(bytes[3], typeof(byte[])));                        Console.WriteLine(str1 + str2 + str3 + str4);        }    }}

????????????????????????????????????????????????GB2312?????????????????????????B?C?D???????????????????

????????????????????????????????????????????????

转载地址:http://wfje.baihongyu.com/

你可能感兴趣的文章
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
查看>>
NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
查看>>
NIH发布包含10600张CT图像数据库 为AI算法测试铺路
查看>>
Nim教程【十二】
查看>>
Nim游戏
查看>>
NIO ByteBuffer实现原理
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>
NIO基于UDP协议的网络编程
查看>>
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NI笔试——大数加法
查看>>