我正在尝试生成一个不重复的字母数字代码列表。它们将以批量和批量的方式生成,因此不可能显式地查看以前生成的内容-即,需要以某种方式保证唯一性,而不求助于当前批次之外的以前的代码。
代码长度应为8个字符,限制某些字符不能出现在代码中(例如l和L),因为用户将在以后重新输入这些字符。
我可能会用Java实现这一点,但我很感激任何人能想到的任何算法或技巧来解决这个问题……
致以敬意,
发布于 2010-12-09 23:16:20
只需将System.currentTimeMillis按字母数字进行编码,将每个数字映射到一个字母即可。跟踪最后一次发布(以防止在同一毫秒内生成多个世代),并进行相应的处理。
发布于 2010-12-09 23:20:35
您可以只对原子计数器进行编码,如下所示
AtomicInteger counter = new AtomicInteger();
public String generateId() {
return Integer.toHexString(counter.getAndIncrement());
}这将为您提供40亿个唯一ids。
如果您需要超过40亿个字符,您可以使用AtomicLong,并根据您希望允许的字符对该数字使用您自己的编码。
发布于 2010-12-09 23:19:54
如上所述的问题有一个显而易见的解决方案,那就是从零开始按顺序生成代码。将每个代码看作一个以34为基数的数字(除了I和L之外,其他数字都是0-9和A-Z )。如果这不是你想要的,你可能想要澄清这个问题(例如,你想要随机性吗?)
编辑:这当然需要您记住您生成的最后一段代码,并跨批处理携带这一段信息。
https://stackoverflow.com/questions/4399713
复制相似问题