我敢肯定有人已经创建了一个伟大的,简洁的,有效的Scala函数,用于生成短的非连续键,适合在web链接中使用。我希望密钥是很难按顺序猜测的。我不希望有人只是“浏览”通过链接的- but,随机点击一个不是什么大问题。
有一些相关的帖子(this one和this other one),但它们并没有真正解决这个问题(而且它们使用的是错误的语言)。这个想法是为了让URL键看起来像是随机的,相当短。像Vimeo或Youtube这样的短链接就可以了,但不要太短(http://watever.com/abc太容易猜/浏览了),也不要太长(http://watever.com/de305d54-75b4-431b-adb2-eb6b9e546014太长了)。一个令人满意的媒介将是最理想的:http://watever.com/de8f43a3。
它们的键最终将存储在关系数据库中,因此我可以选择检查唯一性,然后重试,直到“走运”为止。
有什么想法吗?或者希望是一个圆滑的小算法?
发布于 2015-06-29 07:45:07
最终得到了下面的结果,看起来效果很好。它可能会生成重复项,所以我必须仔细检查预先存在的键- but,我认为获得重复项的几率很低,因此它将是罕见的(并且足够容易重试):
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变得相当困难。
https://stackoverflow.com/questions/31104492
复制相似问题