Ruby 确保识别某物的唯一编号

Ruby 确保识别某物的唯一编号,ruby,uniqueidentifier,Ruby,Uniqueidentifier,我造了一辆购物车。其中之一是paypal标准,它需要唯一的发票整数。从购物车中,我只使用当前购物车的id。但是,用户可以从web应用程序本身(独立于购物车站点)重新激活服务。这意味着我需要一个唯一的号码,不能依赖购物车id,因为应用程序本身没有购物车。所以我想用ruby获取当前日期时间并将其转换为整数: DateTime.now.to_i => 1370617672 DateTime.now.to_i => 1370617700 这将保证总是一个唯一的数字(因为datetime

我造了一辆购物车。其中之一是paypal标准,它需要唯一的发票整数。从购物车中,我只使用当前购物车的id。但是,用户可以从web应用程序本身(独立于购物车站点)重新激活服务。这意味着我需要一个唯一的号码,不能依赖购物车id,因为应用程序本身没有购物车。所以我想用ruby获取当前日期时间并将其转换为整数:

DateTime.now.to_i 
=> 1370617672

DateTime.now.to_i
=> 1370617700

这将保证总是一个唯一的数字(因为datetime总是在变化)。如果没有,我还有什么其他选择?

如果您需要唯一标识符,您应该这样做。例如:


(我假设PayPal接受任意字符串,不需要实际整数)

这个整数能有多大?@SergioTulentsev PayPal允许他们的发票整数,我在Google上很难找到,我也不知道。它必须是整数还是可以使用任意字符串?也许字符串可以工作。我以前只是使用购物车id,它是一个整数。使用DateTime来保证唯一性不是一个保证。两个用户可以在同一个实例上单击,或者应用程序的两个实例可以同时启动。这是一个渺茫的机会,但您是否想向客户解释为什么他们刚刚收到了其他人购物车中的物品的账单?随大流。如果你不打算用数字做数学运算,那么存储数字是没有意义的。这几乎保证是唯一的。当前时间不提供此类保证。它的分辨率高达一秒,因此同一秒的两张发票将具有相同的ID。除去对i的人工使用,时间具有
。usec
精度,DateTime具有
%N
内部
strftime
,因此分辨率远远超过一秒,但仍然存在冲突的可能性。UUID绝对是一条路。@theTinMan:是的,这是一个具有第二精度的动作脚本。我需要多休息。:)休息总是好的。你的观点是完全正确的,UUID保证了独特性(尽管我仍然不明白我们如何才能代表宇宙的其他部分……我认为这是人类的自我)。
p SecureRandom.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"