Kum*_*mar 72 .net database identity
每天需要处理> 1000但<10000条新记录
无法使用GUID/UUID,自动递增数字等.
理想情况下应该是5或6个字符长,当然可以是alpha
想重用现有的,众所周知的算法(如果有的话)
还有什么吗?
Pau*_*sik 101
baseur用于base 62,bit.ly用于缩写的URL.这是一种易于理解的方法,用于创建"独特的"人类可读ID.当然,您必须存储创建的ID并在创建时检查重复项以确保唯一性.(见答案底部的代码)
基本62个唯一性指标
基地62中的5个字符将为您提供62 ^ 5个唯一ID = 916,132,832(~1亿)每天10k ID,您可以获得91k +天
基地62的6个字符将为您提供62 ^ 6个唯一身份证= 56,800,235,584(56亿以上)每天10k身份证,您可以获得超过500万天
基本36个唯一性指标
6个字符将为您提供36 ^ 6个唯一ID = 2,176,782,336(2亿多)
7个字符将为您提供36 ^ 7个唯一ID = 78,364,164,096(780亿)
码:
public void TestRandomIdGenerator()
{
// create five IDs of six, base 62 characters
for (int i=0; i<5; i++) Console.WriteLine(RandomIdGenerator.GetBase62(6));
// create five IDs of eight base 36 characters
for (int i=0; i<5; i++) Console.WriteLine(RandomIdGenerator.GetBase36(8));
}
public static class RandomIdGenerator
{
private static char[] _base62chars =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
.ToCharArray();
private static Random _random = new Random();
public static string GetBase62(int length)
{
var sb = new StringBuilder(length);
for (int i=0; i<length; i++)
sb.Append(_base62chars[_random.Next(62)]);
return sb.ToString();
}
public static string GetBase36(int length)
{
var sb = new StringBuilder(length);
for (int i=0; i<length; i++)
sb.Append(_base62chars[_random.Next(36)]);
return sb.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
z5KyMg wd4SUp uSzQtH UPrGAT UIf2IS QCF9GNM5 0UV3TFSS 3MG91VKP 7NTRF10T AJK3AJU7
Sla*_*awa 15
我推荐http://hashids.org/将任何数字(例如DB ID)转换为字符串(使用salt).
它允许将此字符串解码回数字.因此您无需将其存储在数据库中.
拥有JavaScript,Ruby,Python,Java,Scala,PHP,Perl,Swift,Clojure,Objective-C,C,C++ 11,Go,Erlang,Lua,Elixir,ColdFusion,Groovy,Kotlin,Nim,VBA的库, CoffeeScript和Node.js和.NET.
我有与OP相似的要求.我查看了可用的库,但大多数是基于随机性的,我不想这样.我真的找不到任何基于随机而且仍然很短的东西...所以我最终根据Flickr使用的技术滚动我自己,但修改为需要较少的协调并允许更长时间离线.
简而言之:
缺点:
好处
我已经为客户端发布了一个Javascript库,以及一个Java EE服务器实现.用其他语言实现服务器也应该很容易.
以下是项目:
suid - 分布式服务 - 短而甜的唯一ID
suid-server-java - Java EE技术堆栈的Suid服务器实现.
这两个库都是在自由的Creative Commons开源许可下提供的.希望这可以帮助其他人寻找简短的唯一ID.
| 归档时间: |
|
| 查看次数: |
33761 次 |
| 最近记录: |