今天群里一位朋友拋出一個問題,需要用26個字母和10個數字,組成一個不重復的4位字符,來作為邀請碼。既方便客戶記憶,又能適應大量的用戶。我就做了這個demo
package com.study.test; import java.util.Arrays; import java.util.List; public class mytest { public static void main(String[] args) { List<String> list = Arrays.asList("0", "1","2","3","4","5","6","7","8","9" , "a","b","c","d","e","f","g","h","i" , "j","k","l","m","n","o","p","q","r" , "s","t","u","v","w","x","y","z"); int begin = 0;
while (begin<10000){ String s = getString(list, begin); System.out.println("邀請碼:"+s); begin++; } } private static String getString(List<String> list, int begin) { String a1; String a2; String a3; String a4; int i4 = (begin) % 36; int i3 = (begin/(36)) % 36; int i2 = (begin/(36*36)) % 36; int i1 = (begin/(36*36*36)) % 36; System.out.println(i1); System.out.println(i2); System.out.println(i3); System.out.println(i4); a1 = list.get(i1); a2 = list.get(i2); a3 = list.get(i3); a4 = list.get(i4); return a1+a2+a3+a4; } }
用Redis把begin存儲起來,每次用的時候放入方法,拿到邀請碼,再自增1,設置回Redis。
如此生成的邀請碼最多是36*36*36*36=1679616個,一百六十萬個用戶,滿足小型應用的需求。