《每日工作總結》隨機兌換碼的生成——15.09.14

weixin_34279579發表於2015-09-14

隨機兌換碼的生成

  由於專案中需要生成兌換碼發放給使用者來兌換VIP功能,所以需要一個能夠生成重複率低的隨機演算法,然而才疏學淺,只能想到下面這種簡單的方式,但是也還能保證重複率比較低,基本在M<sup>n</sup>次中才會出現一次,M表示選用的字元的數量,n表示兌換碼的長度,所以個人認為這種方式還是可行的。下面是簡單的流程和程式碼實現。
  1. 確定兌換碼包含的字符集合
  2. 確定是否新增分隔符,若需要新增,則選用什麼符號
  3. 迴圈生成滿足長度的字串,根據位置判斷是否需要插入分隔符。
private static final String CHARARTERS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/** 
* 隨機產生length位長度的字串,每4位以空格分隔 
* 
* @param length 兌換碼長度
* @return 
*/
public static String getCode(int length) {    
    StringBuilder stringBuilder = new StringBuilder();    
    for (int i = 0; i < length; i++) {        
        Random random = new Random();        
        int index = random.nextInt(36);
        if (i % 4 == 0)            
            stringBuilder.append(" " + CHARARTERS.charAt(index));
        else
            stringBuilder.append(CHARARTERS.charAt(index));
    }
    return stringBuilder.toString().trim();
}
  如果還是覺得這樣生成的兌換碼不是很保險,可以在每次生成後與已生成的兌換碼列表做個比較,如果有重複的則重新生成一遍。

相關文章