繁体   English   中英

生成长度为6的唯一非连续字母数字字符串

[英]Generate unique non-sequential alphanumeric string of length 6

我需要生成唯一长度为6(不小于,不大于)的唯一非顺序字母数字字符串。 对于非序列,我的意思是它应该看起来乍一看是随机的,而不是来自某个序列(无论经过几天的学习后能否找到该序列都没关系,它应该只是乍一看就显得随机)。 请记住,它必须是唯一的。 查找所有已经使用过的数字也是不可行的。

我当时正在考虑让数据库生成一个唯一的数字,然后应用一些函数将该数字转换为长度恰好为6的唯一的非顺序字母数字字符串。类似于哈希算法的工作原理,但不会发生冲突。

我发现了这一点: http : //blog.maxant.co.uk/pebble/2010/02/02/1265138340000.html但是该序列在视觉上不是随机的。

您是否可以将生成的String序列注册到某个数据库/文件/某处? 然后,一种方法是针对每个位置(从1到6),随机选择一个字符并形成6个字符串。 并查看它是否是注册序列之一。 如果已经注册,则生成另一个序列。 如果未注册,则注册并使用生成的证书供您使用。

通过字母数字,您的目标是[A-Z0-9][a-zA-Z0-9]还是可以接受[a-zA-Z0-9\\+\\\\] 在后一种情况下,您可以作弊,将您的唯一ID与适当大的值进行XOR,然后将其全部通过Base64算法丢弃,从而节省了工作量。

对于另外两个,请从简单的伪随机数生成器的书中摘取一张叶子; 执行类似x = ((id + salt)*multiplier) mod pow(alphabet_size,6) ,然后将整数x解码为字母数字字符。 当然,选择一个好的saltmultiplier很重要。 后者将理想的大素,或者至少可以互质的alphabet_size salt甚至可以为零,但是如果您愿意,可以将其用于更美观的输出。

只要初始id永远不会超过pow(alphabet_size,6) ,哈希将是唯一可逆的。 您将需要将哈希转换回整数,然后使用模块化除法算法重新获取(id + salt) ,从而重新获取原始id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM