【发布时间】:2011-06-13 09:43:10
【问题描述】:
我在数据库中有一个带有自动递增 32 位整数主键的表,它将产生范围为 1-4294967295 的数字。
我想保持自动生成主键的便利性,同时让我在应用程序前端的数字看起来像是随机生成的。
是否有一个数学函数可以在一个整数和另一个整数之间进行双向一对一转换?
例如,一个函数将接受一个数字,并将其转换为另一个:
1 => 1538645623
2 => 2043145593
3 => 393439399
还有另一个功能:
1538645623 => 1
2043145593 => 2
393439399 => 3
我不一定要在这里寻找一个实现,而是我认为的一个提示,一定是某个地方的一个众所周知的数学问题:)
【问题讨论】:
-
@Tomalak:避免人们试图猜测下一个数字是什么。不如随机一个,但目前正在考虑几种可能性!
-
@Benjamin:你为什么要避免人们猜测下一个数字是什么?混淆在很大程度上是一种浪费。
-
如果你真的想走这条路,那么你可以乘以一个大数字。这解决了问题(没有随机元素,但谁会知道)。我没有把它作为答案,因为我认为这是一个糟糕的解决方案。
-
也许问题中并不清楚,但数字必须保持在相同的 32 位范围内。此外,给定两个连续的数字,乘法将很容易猜出这些东西是如何工作的!
-
@Tomalak,这不是白费力气。这是为了保护系统免受试图欺骗它的人的侵害。每个数字都会被人工面对面核对,所以不会有太多作弊尝试,除非数字顺序对用户来说是显而易见的。