My Tags

星期五, 六月 05, 2009

序號產生器

這兩三天幫朋友寫了一個序號產生器,一組序號包含有(自己輸入的)前M碼,後N碼由亂數產生(由字母A-Z和數字0-9的亂數組合),用程式去產稱K組的序號,條件是全部序號不能重複。(輸入自己制定的M碼,比如說輸入當天日期時間,每產生一次K組,這樣就可以產生更多不重複的序號。)

表面上,聽起來很簡單,當下想法就是產生K組亂數的序號,然後再去找重複,在針對有重複的序號做處理。

如果是針對數字某範圍比如說1-100去亂數,用陣列去存,然後亂數取兩個位置的數字對調,就不需要一一去比對,因為1到100存在陣列,本來就不會重複。

可是,事實上,當真正去實做序號產生器,有很多問題要解決:

1.找到重複序號後的處理(這裡是重點)
2.每處理變更過一組序號就牽涉到要與整組(K組)的序號做比對
3.實作過後,發覺重複的組數很多(這裡是重點)

找到重複的序號做處理,這裡就是有學問了,它不像是很明性的邏輯問題,若只是簡單變更它(變更與之前那個重複的序號不一樣),還是會導致與其他組又重複到,所以這部份處理是減少變更序號後與其他組序號又再重複的機率,而每次產生的K組序號,重複的組數有點過多,第1、3個問題處理就有點小trick,此處有點像大學時有一門課叫演算法,裡面的Dynamic Programming,把它分割處理,然後每一部份自己規劃,每一部份都可以減少重覆機會。然後讓程式去RUN迴圈,程式本身有一個檢查有無重複的邏輯,直到全部都不重複為止。

像線上遊戲有很多儲值卡,卡號不能重複非常重要,那種商業化的序號,通常還包含有不可逆的編碼(防止被解碼),我這個序號產生器,只是產生不重複的序號而已,以後編碼這個領域,還需要去接觸到,到時再來研究。

2 意見:

yunda tsai 提到...

各位鄉親,我肥來啦~~~

MooMoo 提到...

吐 配菜

有沒有帶二奶肥來@@a