当前位置:  编程技术>.net/c#/asp.net

c# 生成随机字符串的代码

    来源: 互联网  发布时间:2014-08-30

    本文导语:  代码如下:   代码示例: using System; using System.Text; /// 可以随机生成一个长度为2的十六进制字节数组, /// 使用GetString ()方法对其进行解码就可以得到汉字字符了。 /// 不过对于生成中文汉字验证码来说,因为第15区也就是AF...

代码如下:
 

代码示例:

using System;
using System.Text;

/// 可以随机生成一个长度为2的十六进制字节数组,
/// 使用GetString ()方法对其进行解码就可以得到汉字字符了。
/// 不过对于生成中文汉字验证码来说,因为第15区也就是AF区以前都没有汉字,
/// 只有少量符号,汉字都从第16区B0开始,并且从区位D7开始以后的汉字都是和很难见到的繁杂汉字,
/// 所以这些都要排出掉。所以随机生成的汉字十六进制区位码第1位范围在B、C、D之间,
/// 如果第1位是D的话,第2位区位码就不能是7以后的十六进制数。
/// 在来看看区位码表发现每区的第一个位置和最后一个位置都是空的,没有汉字,
/// 因此随机生成的区位码第3位如果是A的话,第4位就不能是0;第3位如果是F的话,
/// 第4位就不能是F。
/// 以下代码可以生成长度为N的随机汉字。
public class RandomChinese
{
    public RandomChinese()
    {
    }

    public string GetRandomChinese(int strlength)
    {
        // 获取GB2312编码页(表)
        Encoding gb = Encoding.GetEncoding("gb2312");

        object[] bytes = this.CreateRegionCode(strlength);

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < strlength; i++)
        {
            string temp = gb.GetString((byte[])Convert.ChangeType(bytes[i], typeof(byte[])));
            sb.Append(temp);
        }

        return sb.ToString();
    }

    /**
    此函数在汉字编码范围内随机创建含两个元素的十六进制字节数组,每个字节数组代表一个汉字,并将
    四个字节数组存储在object数组中。
    参数:strlength,代表需要产生的汉字个数
    **/  
    private object[] CreateRegionCode(int strlength)
    {
        //定义一个字符串数组储存汉字编码的组成元素
        string[] rBase = new String[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

        Random rnd = new Random();

        //定义一个object数组用来
        object[] bytes = new object[strlength];

        /**
         每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bytes数组中
         每个汉字有四个区位码组成
         区位码第1位和区位码第2位作为字节数组第一个元素
         区位码第3位和区位码第4位作为字节数组第二个元素
        **/
        for (int i = 0; i < strlength; i++)
        {
            //区位码第1位
            int r1 = rnd.Next(11, 14);
            string str_r1 = rBase[r1].Trim();

            //区位码第2位
            rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i); // 更换随机数发生器的 种子避免产生重复值
            int r2;
            if (r1 == 13)
            {
                r2 = rnd.Next(0, 7);
            }
            else
            {
                r2 = rnd.Next(0, 16);
            }
            string str_r2 = rBase[r2].Trim();

            //区位码第3位
            rnd = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i);
            int r3 = rnd.Next(10, 16);
            string str_r3 = rBase[r3].Trim();

            //区位码第4位
            rnd = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i);
            int r4;
            if (r3 == 10)
            {
                r4 = rnd.Next(1, 16);
            }
            else if (r3 == 15)
            {
                r4 = rnd.Next(0, 15);
            }
            else
            {
                r4 = rnd.Next(0, 16);
            }
            string str_r4 = rBase[r4].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 };

            // 将产生的一个汉字的字节数组放入object数组中
            bytes.SetValue(str_r, i);
        }
        return bytes;
    }
}


    
 
 

您可能感兴趣的文章:

  • c#如何生成Excel(.xls和.xlsx)文件
  • C# Guid.NewGuid生成随机数的例子
  • C#生成随机字符串的实例
  • C#随机生成Unicode类型字符串
  • c#生成随机数示例分享
  • C#实现在两个数字之间生成随机数的方法
  • c# 生成随机时间的小例子
  • 生成不重复随机数列表的c#代码
  • C#生成注册码的小例子
  • C#生成MD5的函数代码
  • C#实现动态生成表格的方法
  • C#生成不重复随机数列表实例
  • C#生成设置范围内的Double类型随机数的方法
  • C#生成单页静态页简单实例
  • C#生成加密的16位随机数的代码
  • 一段C#生成随机验证码的代码
  • 基于C#生成随机数示例
  • c#生成缩略图的实现方法
  • c#生成缩略图不失真的简单示例
  • asp.net(c#) 使用Rex正则来生成字符串数组的代码
  • C#随机生成不重复字符串的两个不错方法
  • linux c下利用srand和rand函数生成随机字符串
  • java随机生成字符串(字符随机生成类 生成随机字符组合)
  • linux下利用(cat,strings,head,sed)命令生成随机字符串
  • 随机字符串生成器 Chance
  • UTF-8字符串生成工具 utfout
  • PHP生成自定义长度随机字符串的函数分享
  • php生成指定位数(长度)的随机字符串
  • php生成随机字符串(可指定纯数字、纯字母)
  • php生成随机字符串(自定义纯数字、纯字母或数字字母混合)
  • MySQL中随机生成固定长度字符串的方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 字符型设备驱动生成的块设备
  • 从零学python系列之教你如何根据图片生成字符画
  • 段错误____书上的最简单字符驱动,生成了模块.另一个测试程序(写1操作).
  • Linux下c基于openssl生成MD5的函数
  • 用JBuilder能将java程序生成exe可执行文件吗?如何生成?
  • php中session_id()函数详细介绍,会话id生成过程及session id长度
  • 我想问一下,java生成的.class文件能不能通过某种工具生成.exe文件?
  • linux c 生成随机数srand函数和rand函数介绍及代码示例
  • 高分求jsp中动态生成图片的相关资料、生成svg格式和pdf格式的资料,不够再加分
  • ORACLE中DBMS_RANDOM随机数生成包
  • 我想问一下,java生成的.class文件能不能通过某种工具生成.exe文件? iis7站长之家
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • 如何指定用javac编译生成类的存放路径。(最好不要告诉我再生成之后再把文件流重新到出这种)
  • QT Designer生成的代码不能生成可执行程序
  • 需要从数据库中动态生成的页面是该在SERVLET输出生成,还是应该在JSP编码实现?
  • java生成字母数字组合的随机数示例 java生成随机数
  • 请问我用程序如何编辑Adobe Acrobat 5.0的pdf文件(生成报表)啊?或者如何才能将已生成的execl报表转换成pdf格式?
  • 请问用POI生成Excel文件时,怎么能生成边框线条等?
  • php生成短网址 仿微博短网址生成代码
  • 在JB自己生成的EJB客户端的测试代码中都会自动生成,象String url = "t3://localhost:7001";这样的,请问:
  • 我在SRC目录下写好的源程序,我怎样能写个脚本把写好的源程序放在BIN下呢?另外我想把该程序的输出结果(生成了几个文件),生成到out目录下,
  • php生成订单号的类 php订单号生成代码
  • php实现在线生成条形码示例分享(条形码生成器)
  • 动态xml生成可行性?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3