怎么样预防生成同样的订单号?
用户创建订单的时候,我的程序会自动创建一个订单号,根据时间来的
比如 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)
%>