首页 > 编程语言 >C# 生成不重复的短字符串

C# 生成不重复的短字符串

时间:2024-10-23 10:59:13浏览次数:1  
标签:C# len sc Length num static 字符串 重复

最近,因工作需要生成一个不重复的随机字符串,园子里查了没有找到合适的。找了其他的作为参考并修改了下,记录一下。

/// <summary>
/// 可用字符
/// </summary>
static char[] sc;
/// <summary>
/// 起始时间
/// </summary>
static DateTime startTime;

/// <summary>
/// 字符串前缀
/// </summary>
static long prve = 0;
/// <summary>
/// 位数设置
/// </summary>
static int len = 0;

/// <summary>
/// 锁
/// </summary>
static readonly object _lock = new object();

/// <summary> /// 创建一个在本地唯一的短字符串生成对象 /// </summary> public MyConsoleDemoModule() { if (sc == null) { //根据需求可加入小写abcdefghijklmnopqrstuvwxyz sc = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray(); //起始时间越大,时间戳就越小,字符串才能越短 startTime = new DateTime(2024, 10, 12, 0, 0, 0, 0); //位数设置 len = 8; } }

 

 生成方法:

    /// <summary>
    /// 生成一个唯一的短字符串
    /// </summary>
    public string Create()
    {
        lock (_lock)
        {
            //使用时间戳确保不会重复
            TimeSpan ts = DateTime.UtcNow - startTime;
            //毫秒1000*10,每秒自增(0-9999)
            long tempSeconds = Convert.ToInt64(ts.TotalMilliseconds * 10);
            //防重复冗余设置(前缀自增,未超过当前时间戳就用)
            prve = tempSeconds > prve ? tempSeconds : prve++;
            //获取字符串
            return GetShortString(prve, len);
        }
    }

字符串处理:

    /// <summary>
    /// 使用进制生成短字符串
    /// </summary>
    /// <param name="num">毫秒自增时间戳</param>
    /// <param name="len">位数设置</param>
    /// <returns></returns>
    private string GetShortString(long num, int len)
    {
        var str = "";
        while (num >= sc.Length)
        {
            //取余赋值
            str = sc[num % sc.Length] + str;
            num = num / sc.Length;
        }
        var ret = sc[num] + str;

        if (ret.Length > len)
        {
            return ret.Substring(0, len);
        }
        else
        {
            var pre = string.Empty;
            for (int x = 0; x < len - ret.Length; x++)
            {
                Random random = new Random();
                //随机取字符串数组字符
                var index = random.Next(0, (sc.Length - 1));
                //累加字符串
                pre += sc[index];
            }
            //拼接
            return pre + ret;
        }
    }

调用,查看结果

 

标签:C#,len,sc,Length,num,static,字符串,重复
From: https://www.cnblogs.com/youyoufei/p/18469486

相关文章

  • 代码随想录算法训练营第八天|leetcode344.反转字符串、leetcode541. 反转字符串II、卡
    1leetcode344.反转字符串题目链接:344.反转字符串-力扣(LeetCode)文章链接:代码随想录视频链接:字符串基础操作!|LeetCode:344.反转字符串_哔哩哔哩_bilibili自己的思路:直接使用python的内置函数reverse进行一个操作1.1自己的代码1.1.1python的内置函数classSolution:......
  • c语言基础程序——经典100道实例。
    c语言基础程序——经典100道实例001,组无重复数字的数002,企业发放的奖金根据利润提成003,完全平方数004,判断当天是这一年的第几天005,三个数由小到大输出006,输出字母C图案007,特殊图案008,9*9乘法表009,国际象棋棋盘010,打印笑脸011,兔子生崽012,101到200的素数013,水仙花数014,分......
  • 跨站脚本攻击XSS以及Cookie如何实现用户管理
            跨站脚本攻击(Cross-SiteScripting,简称XSS)是一种常见的网络安全漏洞,通常发生在Web应用中。攻击者通过在网页中注入恶意脚本,这些脚本会自动执行,从而达到攻击的目的。XSS攻击可以导致数据泄露、会话劫持、篡改页面内容等多种危害。XSS攻击的类型反射型XSS(Refl......
  • HCI_LE_Read_Local_Supported_Features(0x0003)命令全面解析
    目录一、命令概述 二、命令格式2.1.HCI_LE_Read_Local_Supported_Features命令格式2.1.HCICommandComplete响应命令格式三、返回命令 HCICommandComplete参数说明3.1. Status3.2.LE_Features3.3.示例3.4.LE_Features字段中的特性位四、命令执行流程4.1.......
  • 为什么并发明明只是多个指令在单个CPU上交替执行,但是却可以优化程序执行效率呢?
    并发虽然只是多个指令在单个CPU上交替执行,但它可以显著优化程序效率,这主要归因于以下几个方面的原因:一、CPU与I/O操作的效率差异CPU的高效性:CPU是计算机中的核心处理单元,其执行速度非常快,能够在极短的时间内完成大量的计算任务。I/O操作的耗时性:相比CPU,I/O操作(如读写磁盘、网......
  • 用malloc申请空间的开辟和free空间的释放
    malloc的头文件是#include<stdlib.h>malloc开辟的空间虽然和数组一样可以调用,并且都是连续存放的,但是他们所在的位置不一样malloc开辟的空间位置在堆区;局部数组是把数据存在栈区;动态内存空间的大小可以调整;如果申请成功,会返回开辟好的空间的起始地址;如果开辟失败,会返回NU......
  • 【JVM神秘大门】Java虚拟机原理保姆式教学,零基础速成GC机制(下篇)
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • jenkins中使用Config File Provider Plugin(Config File Provider)插件灵活配置maven
    比之前的https://www.cnblogs.com/dannylinux/p/12622237.html更灵活,不需要改服务器配置文件ConfigFileProviderPlugin插件,新版本jenkins中插件名也叫:ConfigFileProvider安装:1、如果Jenkins服务器有连公网,就直接在线安装。2、如果jenkins服务器没有连公网,可以先在有公网......
  • modsecurity:规则例子:匹配url
    一,拦截包含一个字符串的访问:1,例子:如下:11.89.39.11--[23/Oct/2024:04:47:22+0800]"GET/.git/configHTTP/1.1"404548"-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/70.0.3538.102Safari/537.36&qu......
  • Future和CompletableFuture的理解
    使用CompletableFuture的方法直接使用CompletableFuture提交任务使用CompletableFuture.runAsync()或CompletableFuture.supplyAsync(),这些方法会使用默认线程池来执行异步任务。适合快速启动简单的异步操作,不需要额外的线程池管理。使用CompletableFuture并指......