2009-08-18 16 views
0

這將會有點長,會發生,但我想確保一切都在正確的上下文中。創建儘可能短的不區分大小寫的驗證碼

回到2004年,我用傳統的ASP和VBScript編寫了一個在線學習管理系統。我現在正在進行一些升級(並且定期詢問我自己在編寫各個代碼段時我正在考慮的WTF),並且我想借此機會解決我得到的一個常見抱怨 - 驗證碼。

當您在線完成一項測試時,會顯示驗證碼,因此如果您需要重新創建完成證書(它是一家醫院,並試圖讓他們擺脫他們的論文就像要求Linus給予他可以輸入數字等等等等。

當時我寫了它(並且遺憾的是至今)還沒有唯一的標識符我可以用來創建一個成績單頁 - 所以請不要'爲此發佈建議。還有更多的事情比我想要的更進一步,我想要提出一些我無法使用的有效建議。 )

驗證號碼是各種信息的級聯(主要是因爲當我第一次寫它我是白癡福利局和SO沒有周圍),雖​​然它是一個更讚賞的特徵有一個很多關於這個數字有多長的投訴。在這一點上返回原始ID不會更好,因爲我們在6位數範圍內。

我最初的想法是使用我從其他地方得到的Base64編碼算法,但考慮到我只用數字得到的問題,我在考慮將它改爲區分大小寫的值只需要一個不同的類的問題......這使我想到的問題:

我可以使用什麼來創建儘可能短的不區分大小寫的驗證數字,因爲十六進制不會明顯縮短長度?

而且正如標籤所示,我需要能夠在ASP Classic/VBScript中實現它 - 此時遷移不是一種選擇。

編輯:基礎上的答案,我找到了一個鏈接到Crockfor的實現Base32的,它看起來像什麼,我正在尋找 - http://www.crockford.com/wrmg/base32.html

回答

3

Base36

編輯:幸運在評論中提到,使用Base36可能不會在這種情況下給予任何真正的優勢Base32

+0

+1。但也要考慮基數33,它通過不使用字母I,L和O(但* *接受它們作爲輸入,O = 0,L = I = 1)來避免另一個可能的錯誤來源。 – 2009-08-18 23:22:50

+0

@Todd:我的原始答案建議使用Base32,但後來我重新閱讀了這個問題,並注意到OP請求「儘可能短」的編碼。 – LukeH 2009-08-18 23:32:42

+1

4個字符的基數-32可以代表任何6位數字,3位數基數-36不能,因此在這個問題空間中可能的「最短」是相同的。 – Lucky 2009-08-18 23:54:04

0

不區分大小寫的字母和數字?你需要一個基地(26 + 10)轉換器,我認爲...

0

如何使用Huffman Coding在證書中的信息連接的二進制表示?然後將結果作爲十進制數字返回。

+0

我很喜歡這個答案。我不會這樣做,我也不會推薦它,但它有一定的天賦。 – Lucky 2009-08-18 23:47:05

相關問題