本算法首先随机生成一个32位字符的UUID;接着,由于UUID都为十六进制,所以将UUID分成8组,每4个为一组;然后,通过分别将他们进行模91操作,通过模运算的结果,去字典数组中索引得到相应的字符。

而字典数组,则是62+29个可打印字符,大小写字母、数字、不包括单双引号的符号,相比网上能找到62个字符的版本,进一步降低了重复概率。

经测试,62个字符的方案在我这里测试的时候,生成三百万条数据时出现了一个重复;目前我正在测试91个字符的方案,准备生成10个小目标的数据量,看看会不会发生重复。

网上都是JAVA版,这里按语法简单调整成C#的版本,代码贴出来供大家参考。

//***************************

//测试结果:

//62个字符时,一百多万的时候就已经有一个重复项了,不过直到1个小目标也没再出现第二个重复项;

//91个字符时,直到1个小目标的量,一直没有出现重复项。

//结论:短UUID在一定业务场景下可以用,但其重复的可能性依然存在,所以要给字段加聚集索引,且判断Insert是否失败,若失败则重新生成一个,理论上不可能失败3次。

//***************************

C#版:

        public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f", // 6"g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",  // 13"t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",  // 13"6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",  // 13"J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",  // 13"W", "X", "Y", "Z","!", "#", "$", "%", "&", "(", ")", "*", "+", ",", "-", ".", "/",   // 13":", ";", "<", "=", ">", "?", "@", "[", @"\", "]", "^", "_", "{", // 13"|", "}", "~"};                                                    // 3/// <summary>/// 生成8位的短UUID/// </summary>public string ShortUuid(){StringBuilder shortBuffer = new StringBuilder();// 生成32位UUIDvar uuidN = Guid.NewGuid().ToString("N");  for (int i = 0; i < 8; i++){// 4个一组string strSub = uuidN.Substring(i * 4, 4);int x = Int32.Parse(strSub, System.Globalization.NumberStyles.HexNumber);// 模91(62+29=91=0x5B),取chars[]对应的字符string strTmp = chars[x % 0x5B];  // 风险点shortBuffer.Append(strTmp);}return shortBuffer.ToString();}

JAVA版:

// 62+29个字符
public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f","g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s","t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5","6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I","J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V","W", "X", "Y", "Z","!", "#", "$", "%", "&", "(", ")", "*", "+", ",", "-", ".", "/",   // 13":", ";", "<", "=", ">", "?", "@", "[", @"\", "]", "^", "_", "{",  // 13"|", "}", "~"};                                                    // 3public static String generateShortUuid() {StringBuffer shortBuffer = new StringBuffer();// 生成32位UUIDString uuid = UUID.randomUUID().toString().replace("-", "");for (int i = 0; i < 8; i++) {// 4个一组String str = uuid.substring(i * 4, i * 4 + 4);int x = Integer.parseInt(str, 16);// 模91(62+29=91=0x5B),取chars[]对应的字符shortBuffer.append(chars[x % 0x5B]);}return shortBuffer.toString();
}

生成短的8位UUID(C#+JAVA)相关推荐

  1. php 短网址 算法,php生成短网址的思路以及实现方法

    短网址流行的已经有一段时间了,以前做新浪微博应用的时候就有接触,但没有搞清楚,最近再次接触到这个东东,仔细研究了下,发现短网址其实也挺容易的.下面就将本次对于生成短网址的思路以及使用php生成短网址的 ...

  2. java uuid 第三方_JAVA生成短8位UUID

    java 原创,转载需注明. 短8位UUID思想其实借鉴微博短域名的生成方式,但是其重复概率过高,而且每次生成4个,需要随即选取一个. 本算法利用62个可打印字符,通过随机生成32位UUID,由于UU ...

  3. UUID原理,以及JAVA生成短8位UUID

    最近需要生成短uuid,网上查了查资料,这里整理记录一下,供大家参考 1 前言 UUID,全名叫做 Universally Unique Identifier,也就是通用唯一标识符的意思.有时候,也叫 ...

  4. java 8位 uuid_JAVA生成短8位UUID详解

    短8位UUID思想其实借鉴微博短域名的生成方式,但是其重复概率过高,而且每次生成4个,需要随即选取一个. 本算法利用62个可打印字符,通过随机生成32位UUID,由于UUID都为十六进制,所以将UUI ...

  5. JAVA生成短8位UUID

    看到这篇文章对UUID原理作了比较好的说明,很有帮助 https://blog.csdn.net/zzhongcy/article/details/114284696 里面的java实现,感觉还有优化 ...

  6. mysql 生成8位uuid_JAVA生成短8位UUID

    java 原创,转载需注明. 短8位UUID思想其实借鉴微博短域名的生成方式,但是其重复概率过高,而且每次生成4个,需要随即选取一个. 本算法利用62个可打印字符,通过随机生成32位UUID,由于UU ...

  7. java将uuid转换成大写,python生成大写32位uuid代码

    我就废话不多说了,还是直接看代码吧,希望对你有帮助! import uuid def getUUID(): return "".join(str(uuid.uuid4()).spl ...

  8. 根据uuid生成短编码

    根据uuid生成短编码 import java.util.HashSet; import java.util.Set; import java.util.UUID;/*** 编码生成器* * @aut ...

  9. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串...

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 1 package com.zdz.test; ...

最新文章

  1. 2014-3-6 星期四 [第一天执行分析]
  2. 通过PHP前端后台交互/通过ajax前端后台交互/php基础传输数据应用/简单的留言版/简单的注册账户/简单的登录页/...
  3. android handler的机制和原理_一文搞懂handler:彻底明白Android消息机制的原理及源码
  4. 笔记本的处理器型号怎么区别好坏
  5. SpringBoot2.x整合quartz定时任务 快速入门
  6. 基于VMware vSphere的虚拟化平台,内存分配是如何实现的?
  7. 大数据_Hbase-Filter 索引(优化)_根据column查询---Hbase工作笔记0020
  8. XP中一些不常用的宝贝
  9. 【Cloud Foundry 应用开发大赛】“相助”专业问答系统
  10. 西门子PLC学习笔记七-(位逻辑指令)
  11. oracle设置口令期限,[20180316]改变oracle用户口令时限.txt
  12. day8--socket回顾
  13. JAVA相关基础知识
  14. C语言流输入和输出函数
  15. wps office word 插入图片显示异常 只显示一个长条
  16. 山东大学软件学院2022项目实训——(四)SQL注入的学习
  17. Python软件编程等级考试三级——20210905
  18. 程序阅读_全面详解LTE_MATLAB建模仿真与实现_自学笔记(2)OFDM_程序阅读
  19. 5G尚未完全覆盖,运营商开始采取措施降低5G投资
  20. P30测距声呐测试程序——STM32版

热门文章

  1. 一文读懂什么是反卷积
  2. 我国古代的度量衡解析
  3. 基于Rplidar二维雷达使用Hector_SLAM算法在ROS中建图
  4. Numerical analysis 数值分析编程问题 Matlab 实现--二分法计算希尔伯特矩阵问题
  5. 游戏开发unity杂项知识系列:合理使用Unity的AssetStore
  6. 动易CMS - 设为首页代码和加入收藏代码(兼容各种浏览器)
  7. 【问题记录】关于百度网盘客户端打不开
  8. 分享一款序列号查询神器:Serial Box mac版
  9. 最新B端产品经理面试问题大全及答案合集(151题全部有答案)【11年大厂面试官呕心制作】
  10. css----层叠样式表详细知识点大全