2010-11-09 41 views
1

我正在尋找生成不可猜測的ID(即長字符串的隨機字符)。我目前使用https://github.com/sporkmonger/uuidtoolsRails - 保存的uuid的長度短於32個字符

應用程序/傭工/ uuidhelper.rb

require 'rubygems' 
require 'uuidtools' 
module UuidHelper 
    def before_create() 
    self.id = UUIDTools::UUID.random_create().to_s 
    end 
end 

應用程序/模型/ mymodel.rb

include UuidHelper 

然而,這不是給我所需的效果,即長度總是太短。

有沒有辦法使用這個來強制更大的值?我應該使用另一種方法嗎?

我目前正在爲我的開發數據庫使用SQLite。這會有一些效果嗎?

我還假設我應該檢查ID是否已經存在,然後將它分配給一個新的實例?

+0

它多久了?根據示例,它應該如下所示:984265dc-4200-4f02-ae70-fe4f48964159 – DGM 2010-11-09 15:05:46

+0

請問爲什麼要使用非順序ID? – meagar 2010-11-09 15:06:39

+0

難道你不能只追加多個UUID在一起,直到你得到你想要的長度? – ryeguy 2010-11-09 15:07:11

回答

0

這是導致問題的SQLite數據庫 - 遷移到MySQL數據庫,並按預期工作。

1

您可以使用:

require 'digest/sha1' 
#to check if generated id is unique 
self.id = Digest::SHA1.hexdigest(DateTime.now.to_s)[0..length-1] while (ModelName.find(self.id)) 

其中長度 - 輸出UUID的需要的長度,還必須檢查它是唯一的(這可能是假的,如果長度過小)和MODELNAME - 的名字你模型

+0

我在這裏也得到了類似的輸出74819,0,64,2,4672,1和碰撞。 – amaseuk 2010-11-09 15:14:08