日期:2014-05-17  浏览次数:20924 次

怎么样预防生成同样的订单号?
用户创建订单的时候,我的程序会自动创建一个订单号,根据时间来的

比如 orderid=20120513145823 意味着是2012年5月13号14:58:23创建的。
<%
function GetOrderId()
{
  return 年月日时分秒毫秒
}
%>

如果这个时间,恰好有另外一个用户也创建订单。也通过这个函数获取订单号。

那有没有可能重复?

怎么样比边 撞单?

------解决方案--------------------
已经用到毫秒数值了,出现重复值的可能性已经是微乎其微了,如果要确保id值完全的唯一性,需要在创建数据库表的时候将这个字段加上UNIQUE约束,这样就算产生了重复值也无法插入数据库。另外可以考虑一下在生成id值的时候再产生一个随机数加到id值后面进一步降低出现重复值的可能性,比如orderid=20120513145823_xxx(xxx为1000以内的随机整数),还可以在插入数据库前先查询一下新产生的id值是否已存在,如果已存在就重新生成id值。
------解决方案--------------------
在一句SQL语句中创建订单号,就相当于一个事务,有排他性,就不会重复了。
可先创建订单号,再创建订单。
------解决方案--------------------
订单号,取数据库中已有的订单号加1,这个号不要在一开始生成,在该订单写入数据库时生成,就可保证唯一性。
------解决方案--------------------
订单号写入数据库时生成,可保证唯一性
------解决方案--------------------
日期后再加随机数即可
即使时间有重复,随机数也不会重复!
<%
dim temprnd
Randomize
temprnd=cstr(Int((9999 - 1000 + 1) * Rnd() + 1000))

'你的时间生成订单字符串
orderid=你的订单字符串

orderid=orderid&temprnd
response.Write (orderid)
%>