首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据库列中生成唯一的随机整数

在数据库列中生成唯一的随机整数
EN

Stack Overflow用户
提问于 2011-03-17 06:24:09
回答 2查看 4.1K关注 0票数 5

我的应用程序创建优惠券,每个优惠券都需要一个唯一的条形码号码。此数字必须为正整数,并且必须介于6- 12位之间。此号码代表唯一优惠券,因此此号码必须唯一。我不能简单地将条形码数字加1,因为这将使黑客很容易猜测其他优惠券条形码。

如果我有一个优惠券数据库表,我如何生成这个随机的条形码号码并保证唯一性?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-17 06:32:55

这将给你一个最多12位的随机数,几乎没有冲突。

代码语言:javascript
复制
select -convert(bigint, convert(varbinary(max), newid())) % 1000000000000

您需要测试和忽略冲突,以及丢弃少于6位的数字。

编辑

要首先使用最短的长度,您将无法使用真正的随机数生成器。这是因为一旦你到达了6位数范围的95%,冲突就会如此之高,以至于程序会花费所有的时间来尝试并重新尝试获取一个尚未使用的唯一数字。一旦你只剩下一个数字,程序就会永远等待,永远不会“生成”那个数字。因此,为了实现“最低长度优先”,您实际上必须将所有数字生成到一个表中,然后随机生成行号(order by len(num), newid()),然后按顺序将它们提取出来。

若要将0填充到12位,请使用

代码语言:javascript
复制
select right('000000000000'
      +right(-convert(bigint, convert(varbinary(max), newid())),12),12)
票数 5
EN

Stack Overflow用户

发布于 2011-03-17 06:29:47

这听起来可能很差劲,但是根据你需要的值的数量,你可以在列上设置一个唯一的约束,然后用一个随机数( 6-12位)来更新每一行,然后循环直到它不会失败。12位数太多了,所以你可能不会有太多的冲突。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5332582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档