【发布时间】:2013-07-12 16:43:28
【问题描述】:
我需要创建具有一定长度的唯一且随机的字母数字 ID。理想情况下,我会在我的数据库中存储一个计数器,从 0 开始,每次我需要一个唯一的 ID 时,我都会得到计数器值 (0),通过这个散列函数运行它,给它一个设定的长度(可能是 4-6 个字符)[ ID = Hash(Counter, 4);],它会返回我的新 ID(例如 7HU9),然后我会增加我的计数器(0++ = 1)。
我需要保持 ID 的简短,以便可以轻松记住或共享它们。安全性不是大问题,所以我不担心人们尝试随机 ID,但我不希望 ID 是可预测的,因此用户没有机会注意到 ID 的增量3 每次都允许他们通过 ID 反向工作并逐个下载 ID 数据(例如 A5F9、A5F6、A5F3、A5F0 == BAD)。
我不想只循环检查唯一性的随机字符串,因为随着时间的推移,随着密钥被用完,这会增加数据库负载。其目的是散列一个唯一的递增计数器将保证 ID 唯一性直到某个计数器值,此时生成的 ID 的长度将增加 1 并且计数器重置,并永远继续这种模式。
是否有人知道任何适合此需求的散列函数,或者有任何其他想法?
编辑:我不需要能够反转函数来取回计数器值。
【问题讨论】:
标签: hash