2017-04-13 55 views
-2
uuid = Digest::SHA256.digest(SecureRandom.uuid) 
id = Base62.encode(uuid) 

字符串的隱式轉換成整數字符串的隱式轉換成整數base62編碼軌

線= id = Base62.encode(uuid)

+0

歡迎堆棧溢出。請閱讀「[問]」和「[mcve]」以及他們的鏈接頁面。你的問題不清楚。 –

+0

你的問題是什麼? – sawa

+0

感謝您的詢問,人們關心的更多,因爲它應該寫在這裏,不僅僅是問題!我想通過uuid base62,但是,已經解決Thankns –

回答

0

出於傳遞字符串base62

uuid = SecureRandom.uuid.gsub("-", "").hex 
@id = uuid.base62_encode 
0

我不認爲你的代碼是去工作。原因如下:

Base62.encode(num)取一個base10數字並將其轉換爲base62字符串。這對你來說是個問題:

Digest::SHA256.digest(SecureRandom.uuid) 
# => "\e\x1F\xD6yby\x02o\f)\xA2\x91\xD4\xFB\x85jd\xE0\xF7\xECtd\x8E\xA6\x9Ez\x99\xD8>\x04\nT" 

返回一個字符串。

如果你看一下在base62-rb寶石的代碼,上述方法的評論,你可以看到它比較字符串爲整數,這是我的錯誤,當我試圖複製這個:

ArgumentError: comparison of String with 0 failed 

下面是從寶石的方法:

# From base62-rb.rb line 8-20: 

    # Encodes base10 (decimal) number to base62 string. 
    def self.encode(num) 
    return "0" if num == 0 
    return nil if num < 0 

    str = "" 
    while num > 0 
     # prepend base62 charaters 
     str = KEYS[num % BASE] + str 
     num = num/BASE 
    end 
    str 
    end 

所有這一切當然是基於這樣的事實,你正在使用的base62-rb寶石。所以,也許你可以給我們一些背景,讓我們知道你已經嘗試了什麼?

+1

你正在混合評論和答案。如果你不確定這個問題,那麼最好的方法是投下問題並投票結束,然後在評論中解釋爲什麼問題有問題。 https://meta.stackoverflow.com/questions/256328/vote-to-close-unclear-questions-immediately-after-commenting and https://meta.stackoverflow.com/questions/260263/how-long-should-我們等待海報來澄清一個問題之前結束解釋這一點。 –