RandomStringUtils 是否创建确定性或可重现的序列?

Does RandomStringUtils create a deterministic or reproducible sequence?

在 Java 应用程序服务器上,我们使用 RandomStringUtils.randomAlphabetic() 以迭代方式为重复出现的相似段落顺序创建 HTML-ID。

通过这些生成的 ID,我们允许进行页面内锚导航(点击时不会触发页面加载)。

现在的问题是,我能否将这些生成的 ID 也用于从外部页面链接到该目标的 URL? 根据我的观察,对同一页面的后续请求会创建相同的 ID 序列。如果 randomAlphabetic 的生成序列确实是可预测的(在多个页面加载时也是如此),我们不仅可以将这些链接用于页面内导航,还可以用于从外部引用的链接,因为第一,第二,第三, ...生成的 ID 将始终相同。

如果段落的给定文本字符串的“随机”ID 始终相同(即,ID 只是段落文本的函数),那么您应该考虑散列函数,而不是伪随机数生成器,例如 randomAlphabetic。 (我假设对于识别页面部分的用例,为不同的文本字符串生成重复 ID 的风险可以忽略不计。但是,如果您不能容忍这种风险,.) There are many kinds of hash functions for this purpose; even java.lang.String.hashCode() will work here since the Java documentation for this method 指定了它使用的确切算法.

此外,randomAlphabetic 不是您想要的“确定性”,原因有两个:

  • 您无法设置该方法使用的底层生成器的种子(RandomStringUtils 存储使用未定义种子初始化的静态 PRNG 变量,即 new Random())。
  • RandomStringUtils.randomAlphabetic(以及其他 RandomStringUtils 方法)的文档没有指定它用于生成随机字符串的确切算法。