2012-02-09 115 views
2

我需要生成正好长度为6(不少于,不多于)的唯一非顺序字母数字字符串。 非顺序我的意思是它应该看起来一目了然,而不是来自一个序列(如果你能在几天的研究之后找到序列并不重要,它应该在第一眼看起来是随机的) 。 并牢记它必须是独一无二的。 查找已经使用的所有数字也是不可行的。生成长度为6的唯一非顺序字母数字字符串

我正在考虑让数据库生成一个唯一的数字,然后应用一些函数将该数字转换为长度为6的唯一非顺序字母数字字符串。与哈希算法的工作原理类似,但没有可能的冲突。

我找到了这个:http://blog.maxant.co.uk/pebble/2010/02/02/1265138340000.html 但是这个序列并不是视觉上随机的。

回答

0

是否有可能将生成的字符串序列注册到某个数据库/文件/某处?然后,一种方法可以为每个位置(从1到6),随机挑选一个字符并形成6个字符的字符串。看看它是否是注册序列之一。如果已经注册,则生成另一个序列。如果没有注册,则注册&使用生成的用于您的目的。

+0

如果系统运行了一段时间,则需要进行大量的重试。 – user968698 2012-02-10 11:14:46

0

由字母数字你是瞄准[A-Z0-9],[a-zA-Z0-9][a-zA-Z0-9\+\\]是可以接受的吗?在后一种情况下,您可以作弊,XOR您的唯一ID以适当大的值,然后通过Base64算法抛出整个程序,节省工作量。

对于另外两个,从简单的伪随机数发生器的书中抽出一片叶子;执行类似x = ((id + salt)*multiplier) mod pow(alphabet_size,6)之类的操作,然后将整数x解码为字母数字字符。当然选择一个好的saltmultiplier很重要;后者理想情况下是一个大素数或至少与alphabet_size相矛盾。 salt甚至可能为零,但如果您愿意,可以用于输出更具审美价值的产品。

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

相关问题