【问题标题】:Efficient way to map numbers 1 to 1 in a pseudorandom manner?以伪随机方式将数字 1 映射到 1 的有效方法?
【发布时间】:2020-03-10 23:26:48
【问题描述】:

我不想将原始用户 ID 返回到前端。很多人通过生成随机 ID 并检查它们是否已经在数据库中来解决这个问题。我想找到一种方法来映射已知范围 1 到 1 中的数字。这样,我仍然可以在内部使用自动递增的 ID,但将伪随机映射的 ID 返回到前端。

我可以确定性地将所有数字从 1 改组到 N,但我想知道是否有更有效的方法。

【问题讨论】:

  • UUID 是我所描述的,你生成一个随机数并检查它是否已经在数据库中,我更喜欢更简洁的数学方法
  • 最简单的方法是通过一些分组密码来输入数字。分组密码本质上是键控洗牌功能。

标签: algorithm math api-design


【解决方案1】:

您可以选择一个随机数并使用按位异或运算在前端和数据库 ID 之间切换。

逆向工程可能很容易,但非常容易使用。

这是一个 JavaScript 示例:

const seed = 123;
const internalIds = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(internalIds.join(','));
const frontIds = internalIds.map(id => id ^ seed);
console.log(frontIds.join(','));
const recoveredIds = frontIds.map(id => id ^ seed);
console.log(recoveredIds.join(','));

【讨论】:

  • 我可以了解一下为什么这个答案被否决了吗?我错过了什么吗?
猜你喜欢
  • 2021-07-12
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
  • 2013-05-05
  • 2012-07-20
  • 1970-01-01
  • 2015-02-14
  • 2011-10-21
相关资源
最近更新 更多