如何在Scala中生成简短,合理的非顺序键(唯一的Web链接)

时间:2015-06-28 20:36:07

标签: scala url random

我确信有人创建了一个优秀,简洁且有效的Scala函数,用于生成适用于Web链接的简短非顺序密钥。我希望按键难以按顺序猜测...我不希望有人只是“浏览”链接 - 但是,随机点击一个并不是什么大问题。

有一些相关的帖子(this onethis other one),但它们并没有真正解决问题(而且它们的语言错误)。这个想法是制作看似随机,相当短的URL密钥。 Vimeo或Youtube短链接之类的东西可以很好,但不能太短(http://watever.com/abc太容易猜测/浏览)而且不会太长(http://watever.com/de305d54-75b4-431b-adb2-eb6b9e546014太长)。一个幸福的媒介是最可取的:http://watever.com/de8f43a3

它们的密钥最终将存储在关系数据库中,因此我可以选择检查唯一性,然后重试,直到“幸运”。

有什么想法吗?或者希望是一个灵巧的小算法?

1 个答案:

答案 0 :(得分:0)

结束以下,看起来效果很好。它可能会产生重复,所以我必须仔细检查预先存在的密钥 - 但是,我认为获得重复的可能性很低,所以它很少(并且很容易重试):

def shortCode(id: Int): String = {
    val size = (log10(id) + 4).toInt
    Random.alphanumeric.take(Random.nextInt(size) + 1).mkString
}

在这种情况下,我使用主键作为id,因此小键(1)将获得一个4位串行密钥。较大的密钥(1,000,000)将获得一个11位数的密钥。使用更大的密钥大小和字母数字库会使“浏览”URL变得非常困难。