RandomId生成随机字符串详解实例

时间:2023-02-19 10:12:47 


/*
 * 名称:RandomId
 * 功能:生成随机ID
 * 作者:冰麟轻武
 * 日期:2012年1月31日 03:36:28
 * 版本:1.0
 * 最后更新:2012年1月31日 03:36:28
 */

using System;
using System.Text;

namespace blqw
{
    public sealed class RandomId : IFormattable
    {

        /// <summary> 1234567890qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM
        /// </summary>
        public const string ALLWORDS = "1234567890qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM";
        /// <summary> 2345678wertyuiopasdfghjkzxcvbnm23456780QWERTYUPASDFGHJKLZXCVBNM
        /// </summary>
        public const string SIMPLEWORDS = "2345678wertyuipasdfghjkzxcvbnm2345678WERTYUPASDFGHJKLZXCVBNM";

        #region 私有对象
        const string ONE = "{0}";
        static RandomId _Rid = new RandomId(0);
        readonly static Random _Rand = new Random();
        static string ToFormat(int length)
        {
            StringBuilder sb = new StringBuilder(length * 3);
            for (int i = 0; i < length; i++)
            {
                sb.Append(ONE);
            }
            return sb.ToString();
        }

        readonly string _Dict;
        readonly int _RMax;
        readonly string _Format;
        #endregion

        /// <summary> 构造函数
        /// </summary>
        /// <param name="length">生成Id长度</param>
        /// <param name="dict">随机字符字典,默认字典为0-9a-zA-Z</param>
        public RandomId(int length, string dict = ALLWORDS)
            : this(RandomId.ToFormat(length), dict)
        { }
        /// <summary> 构造函数
        /// </summary>
        /// <param name="format">生成Id格式</param>
        /// <param name="dict">随机字符字典,默认字典为0-9a-zA-Z</param>
        public RandomId(string format, string dict = ALLWORDS)
        {
            _Dict = dict;
            _Format = format;
            _RMax = dict.Length;
        }

        /// <summary> 生成Id
        /// </summary>
        public string Create()
        {
            return string.Format(_Format, this);
        }
        /// <summary> 生成Id
        /// </summary>
        /// <param name="length">生成Id长度</param>
        /// <param name="dict">随机字符字典,默认字典为0-9a-zA-Z</param>
        public static string Create(int length, string dict = ALLWORDS)
        {
            return new RandomId(length, dict).Create();
        }
        /// <summary> 生成Id
        /// </summary>
        /// <param name="format">生成Id格式</param>
        /// <param name="dict">随机字符字典,默认字典为0-9a-zA-Z</param>
        public static string Create(string format, string dict = ALLWORDS)
        {
            return new RandomId(format, dict).Create();
        }

        #region IFormattable 成员

        string IFormattable.ToString(string format, IFormatProvider formatProvider)
        {
            return _Dict[_Rand.Next(0, _RMax)].ToString();
        }

        #endregion

       
    }
}


Console.WriteLine(RandomId.Create(4));//使用默认字典生成4位随机字符串,默认字典中不包含l,1,O,0,q,9等容易混淆字符
Console.WriteLine(RandomId.Create(4, RandomId.ALLWORDS));//使用完整字典(0-9a-zA-Z),生成4位随机字符
Console.WriteLine(RandomId.Create(10, "多少级开发和贷款撒了花费大量时间好快理发店撒娇哦就开放了的撒酒阿克里福德就是卡看了就分开的世界里分开家里的事"));//使用指定中文字典,生成4位随机字符
Console.WriteLine(RandomId.Create("SN:{0}{0}{0}{0}-{0}{0}{0}-{0}{0}{0}.{0}{0}", "123456abcdef"));//使用指定字典生成特定格式的随机字符



RandomId生成随机字符串详解实例

标签:RandomId,生成随机字符串
0
投稿

猜你喜欢

  • 详解Android封装一个全局的BaseActivity

    2022-09-16 07:05:23
  • C# IsDefined的问题

    2022-07-15 10:37:13
  • Android 仿京东、拼多多商品分类页的示例代码

    2023-05-02 13:55:30
  • Java 实战项目之精美物流管理系统的实现流程

    2023-10-30 19:53:46
  • 深入理解Java显式锁的相关知识

    2022-06-16 09:59:41
  • Unity3D 单例模式和静态类的使用详解

    2022-09-22 08:16:19
  • springboot bootstrap.yml nacos配置中心问题

    2022-07-07 08:25:01
  • 完全解析Android多线程中线程池ThreadPool的原理和使用

    2022-04-07 20:19:40
  • 用C#来解析PDF文件

    2023-11-02 08:07:07
  • Spring Bean生命周期之BeanDefinition的合并过程详解

    2023-11-29 02:50:35
  • Java中的复合数据类型

    2022-10-05 08:08:08
  • Springboot 使用maven release插件执行版本管理及打包操作

    2023-07-12 01:20:35
  • 关于idea更新到2020.2.3无法创建web项目原因 library is not specified

    2022-11-24 10:13:28
  • Android创建淡入淡出动画的详解

    2022-12-28 00:12:12
  • spring cloud gateway跨域全局CORS配置方式

    2021-11-02 01:09:00
  • Java class文件格式之方法_动力节点Java学院整理

    2021-07-15 04:14:23
  • JAVA的LIST接口的REMOVE重载方法调用原理解析

    2021-07-20 16:35:27
  • java向文件中追加内容与读写文件内容源码实例代码

    2021-11-15 11:45:13
  • C# 中string.split用法详解

    2023-04-09 13:58:34
  • Android studio开发实现计算器功能

    2022-02-12 19:43:05
  • asp之家 软件编程 m.aspxhome.com