2011-09-20 22 views
1

我會盡量簡單,清晰和直接。我的問題如下:我有一個項目,我需要 爲刮卡生成代碼。這些scrath卡打印就像你用來給你的手機充電。刮卡的代碼

該系統是人們購買卡片,獲取卡片上的代碼,然後調用TOIP服務器(Asterisk)並插入代碼以訪問服務。它有三次嘗試輸入正確的代碼。

我想做一個PHP程序來生成這些代碼,所以我當然需要通過一個PRNG(僞隨機數生成器)。我的約束是:

- 當人們打電話時,代碼不應該太長,但足夠長以確保安全。

- 當輸入代碼 與存儲在數據庫中的數據(用於統計目的)之間進行比較時,需要系統足夠快。

所以我的問題是:

- 是否正確使用PRNG?

- 如果是的話,你是否知道一個足夠強大的隨機數生成?

- 行業使用哪些標準?

- 如果在百萬個代碼上進行比較,如何使比較算法足夠快?

感謝您的時間和答案。

+0

「比較」是什麼意思?你只是檢查代碼是否存在/有效? – NullUserException

+0

另一種選擇是根據db +鹽中的數據生成散列。爲此,正確的鹽化散列輸出與正確的RNG輸出一樣難以破解。 –

+0

** @NullUserException **:確切。對不起,如果它不明確。實際上我希望檢查儘可能快。電話是在「實時」的領域,所以......; ** @ Marc B **:謝謝你的提示,我會以這種方式學習。 – RedLion

回答

3

是的,PRNG將調整一點後,將正常工作。

http://en.wikipedia.org/wiki/Random_password_generator

你可以參考密碼生成代碼在上面的鏈接。你必須確保第一個數字不是0並且只使用數字而不是字母。

一旦生成了一個數字,您必須在插入之前檢查它是否存在於數據庫中。

通常,行業使用16個字符/數字。您還可以生成20位數字,以加快整個過程。

要使匹配速度更快,您必須索引數據庫中的字段。最有可能的是char(16)或char(20)。

注意:因爲這裏不需要varchar,char是最好的選擇。

保留Mysql表引擎作爲MYISAM進行快速比較。

+1

謝謝,它很有啓發性;我想我有足夠的元素來編寫程序。無論如何,16位數字似乎太長,10對我來說會更好;客戶已經支付了通訊費,他/她輸入的數字不應該太多。 – RedLion