在我们的 DB 中,每个 Person
都有一个 ID,它是 DB 生成的、自动递增的整数。现在,我们想要生成一个更加用户友好的字母数字 ID,它可以公开显示。类似护照号码的东西。我们显然不想向用户公开数据库 ID。出于这个问题的目的,我将我们需要生成的内容称为 UID
。
注意 :UID 并不意味着要替换 DB ID。您可以将 UID 视为 DB ID 的更漂亮版本,我们可以将其提供给用户。
我认为解决这个问题的方法是:
第 1 步:散列。
我已经阅读了以下哈希函数:
散列返回一个长字符串。我在 here 上读到了一种叫做 XOR 折叠的东西,可以将字符串缩短到更短的长度。但我找不到太多相关信息。
第 2 步:编码。
我阅读了以下编码方法:
我猜编码的输出将是我正在寻找的 UID 字符串。
第 3 步:解决冲突。
我很想得到一些专家的建议,以了解我是否沿着正确的路线前进,以及我如何实际实现这一点。
我将在 Ruby On Rails 应用程序中实现它。因此,请在您的建议中考虑到这一点。
谢谢。
更新
评论和回答让我重新思考和质疑我的要求之一:我们需要能够在分配一次后为用户重新生成 UID。我想我只是想确保安全,在我们丢失用户 UID 的情况下,如果它是用户现有属性的函数,我们将能够取回它。但我想我们可以通过使用备份来解决这个问题。
因此,如果我取消该要求,则 UID 基本上会变成一个完全随机的 10 个字符的字母数字字符串。我正在添加一个包含我提议的实现计划的答案。如果其他人提出了更好的计划,我会将其标记为答案。
最佳答案
正如我在问题更新中提到的,我认为我们要做的是:
关于ruby-on-rails-3 - ROR - 为 DB ID 生成字母数字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9600816/