實際上,我被以下商業案例所困,並且不知道如何解決它。Python - 創建數百萬個具有高性能的獨特字母數字代碼
我必須創建超過5.000.000個獨特的字母數字代碼。
爲代碼的規則是:
length: 12
format: every 4 digits "-"
some letters should be excluded like: O or l
的代碼應該是「安全的」(即完全隨機的),它應該是可能的多次運行腳本的情況下,代碼是不夠的,我們必須創建更多的代碼。
例如ab4D-406a-BCh7-TEs3
我在Python來解決這個3.
我的第一個想法是代碼保存到一個數據庫,並剛剛與隨機函數ASCII碼創建它們 - >信,但也許scirpt創建相同的代碼兩次,所以我必須每次檢查數據庫中是否存在該代碼,這將導致大量數據庫通信。
我的第二個想法是使用散列函數,但我認爲代碼不安全,並且沒有通過我的規則的散列函數。
我的第三個想法是使用Python這樣的隨機模塊來創建代碼並將代碼寫入文件,並在代碼已經在裏面時每次檢查文件。但是這對性能也不好,但我認爲比使用數據庫要好。
任何人的想法如何解決高性能的問題?
問候。
編輯:
我試過,但它需要時間來創建代碼。一些提示如何提高性能?
import random
sequence = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
seq = list(sequence)
codelist = []
counter = 0
while len(codelist) < 5000000:
code = ""
counter = counter +1
print(counter)
while len(code) < 12:
code = code + str(random.choice(seq))
try:
codelist.index(code)
except ValueError:
codelist.append(code)
file = open('codefile.txt','w')
for item in codelist:
file.write("%s\n" % item)
你說有些人物需要排除?比方說,剩餘50個字符。這使得244x10^18種可能性。什麼讓你回來立即隨機創建它們,轉儲它們並在之後檢查非唯一條目?雙打機會似乎很小......如果你找到雙打,刪除它們併爲刪除的那些生成一個新的。醜,也許,但一旦它在數據庫中一切都應該足夠快... – Kraay89
[在Python中隨機字符串生成與大寫字母和數字]可能重複(https://stackoverflow.com/questions/2257441/random -string-generation-with-upper-case-letters-and-digits-in-python) –
我不明白。 'ab4D-406a-BCh7-TEs3'有16位數字,不包括'-',但你說你想要的長度爲12。 –