我有一種情況,我們打印出「折扣卡」的運行,其中在卡上打印唯一代碼,用戶可以在網上商店兌換折扣。根據算法創建一組「優惠券代碼」;不需要存儲代碼
我們創建了很多這樣的卡片,其中實際使用的數量很少,我希望使用某種方式來使用某種方法來識別有效的代碼,而不是將每個單獨的代碼存儲在數據庫中。我們一次創建5,000個這樣的代碼。大概每年5次左右。
理想情況下,我想能夠像:
$coupons->generate(5000, 'unique_salt', 'prefix_');
這將產生像5000「隨機」碼:
prefix-23-3424-4324-3344 or
prefix-4H-34RE-22K3-PE3W
的unique salt
和prefix_
將被保存到數據庫。這些代碼然後可以通過使用prefix_
查找salt
並將代碼標識爲有效來驗證。
我有一個這種工作的形式,通過使用一個數字作爲鹽,找到鹽可以整除的數字,然後重新排列數字,使它看起來是隨機的。用足夠長的代碼,需要一些工作來確定模式。但我想認爲還有更好的辦法......因爲只有那麼多的數字纔會產生可被salt
整除的大量代碼。
(例如,2的鹽將產生5000碼1和10000之間(並且將是易見的圖案)...但14000鹽將產生1和10000之間的零碼)
這樣做的另一個好處是我可以根據需要生成優惠券(例如,當我們給予個人一個基礎的折扣時),並且能夠跟蹤什麼樣的優惠券使用時等,基於prefix_
...和可能會看到卡片何時/何時傳出,獲得最佳回報。
我只是在旋轉我的車輪時,我應該將每個代碼存儲在數據庫中? (或者只是開心?):)
我會投票將代碼存儲在數據庫中。 5000 x 5次/年仍然只有25000碼/年。每個代碼可能有20-30個字節,你甚至沒有存儲完整的兆字節值的數據。它也避免了某人破解代碼的問題。 – dlev 2011-05-10 21:25:57
您可以使用一些隨機數字和字母,並在特定索引處選擇字符以生成某種形式的校驗位,並附加到代碼的末尾。然後,在輸入代碼時,您只需選擇字符,運行算法並查看是否結束了最後一個字符。 – 2011-05-10 21:26:06
@ duncan-howe是的,我現在用我目前的方法實際做到了。我添加了一些特定的數字來獲得一個總和,作爲校驗和添加到生成的代碼中。 – drewjoh 2011-05-10 21:34:02