【发布时间】:2017-09-10 15:02:13
【问题描述】:
我想在 java 中生成唯一的 15 个字符。请求来自多个服务器,它应该支持 3-4 年的时间范围。 另外,我们可以考虑最大 15 tps。
请指点我正确的方向。
【问题讨论】:
-
你的代码在哪里?
-
请指点我正确的方向。...是的,看看this
我想在 java 中生成唯一的 15 个字符。请求来自多个服务器,它应该支持 3-4 年的时间范围。 另外,我们可以考虑最大 15 tps。
请指点我正确的方向。
【问题讨论】:
考虑使用 UUID。它的长度比您指定的要长得多,但是在不同的运行中为您提供相同值的概率非常低(就像非常低)。它很常用。
【讨论】:
您没有说明您的安全要求。对于非安全解决方案,请使用 15 位以 36 为基数的数字。数字是 A..Z、0..9 并以通常的方式递增数字。使用变量的普通增量并在最后转换为基数 36 可能更容易。
对于一个安全的解决方案,加密基础数字并将加密数字转换为基数 36。只要输入是唯一的:1、2、3 ... K、L、M、... 1H2J、1H2K、 1H2L ...那么加密的输出将是唯一的。
您可能希望省略 I、O 和 Z 等可能混淆的字母(与 1、0 和 2 混淆)并减少到 base 33 输出。
以 36 为基数的 15 位数字给出 2.18e42 个唯一数字,这应该足够了。
【讨论】:
我想生成唯一 ID ...
我认为你必须考虑UUIDs (Universal Unique IDs)。
标准 Java 库包括 many options to generate UUIDs。例如,您可以使用 Java 1.5 中引入的java.util.UUID。此外,您还可以使用UUID library 的Java UUID Generator 等其他开源库。约翰·布卡德compares some of them.
我想在 java 中生成唯一的 15 个字符
15 个字符?
通常,UUID 由 32 个十六进制(以 16 为基数)数字表示。如果您需要一个只有 15 个字符的 ID,您可以查看 JDK 或 JUG 的源代码并创建自己的代码。
通常,UUID 将来自设备的信息(例如 Apple UUID 或网络接口的 MAC 地址)与时间戳结合起来。
【讨论】: