InvitationCodeUtils.java 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package com.goafanti.common.utils;
  2. import java.util.Date;
  3. import java.util.Random;
  4. public class InvitationCodeUtils {
  5. /** 自定义进制(选择你想要的进制数,不能重复且最好不要0、1这些容易混淆的字符) */
  6. private static final char[] r=new char[]{'Q', 'W', 'E', '8', 'S', '2', 'D', 'Z', 'X', '9', 'C', '7', 'P', '5', 'K', '3', 'M', 'J', 'U', 'F', 'R', '4', 'V', 'Y', 'T', 'N', '6', 'B', 'G', 'H'};
  7. /** 进制长度 */
  8. private static final int binLen=r.length;
  9. /** 邀请码长度 */
  10. private static final int s=12;
  11. /**
  12. * 根据ID生成随机码
  13. * @param id ID
  14. * @return 随机码
  15. */
  16. public static String toSerialCode(long id) {
  17. char[] buf=new char[32];
  18. int charPos=32;
  19. while((id / binLen) > 0) {
  20. int ind=(int)(id % binLen);
  21. buf[--charPos]=r[ind];
  22. id /= binLen;
  23. }
  24. buf[--charPos]=r[(int)(id % binLen)];
  25. String str=new String(buf, charPos, (32 - charPos));
  26. // 不够长度的自动随机补全
  27. if(str.length() < s) {
  28. StringBuilder sb=new StringBuilder();
  29. Random rnd=new Random();
  30. for(int i=1; i <= s - str.length(); i++) {
  31. sb.append(r[rnd.nextInt(binLen)]);
  32. }
  33. str+=sb.toString();
  34. }
  35. return str;
  36. }
  37. /**
  38. * 根据ID生成随机码
  39. * @param id ID
  40. * @return 随机码
  41. */
  42. public static String randomCode(long id,Integer size) {
  43. char[] buf=new char[32];
  44. int charPos=32;
  45. while((id / binLen) > 0) {
  46. int ind=(int)(id % binLen);
  47. buf[--charPos]=r[ind];
  48. id /= binLen;
  49. }
  50. buf[--charPos]=r[(int)(id % binLen)];
  51. String str=new String(buf, charPos, (32 - charPos));
  52. // 不够长度的自动随机补全
  53. if(str.length() < size) {
  54. StringBuilder sb=new StringBuilder();
  55. Random rnd=new Random();
  56. for(int i=1; i <= size - str.length(); i++) {
  57. sb.append(r[rnd.nextInt(binLen)]);
  58. }
  59. str+=sb.toString();
  60. }else if(str.length() > size){
  61. System.out.println(str.length()-size);
  62. System.out.println(str.length());
  63. str=str.substring(str.length()-size,str.length());
  64. }
  65. return str;
  66. }
  67. /*public static void main(String[] args) {
  68. System.out.println(randomCode(new Date().getTime(),6));
  69. System.out.println(toSerialCode(new Date().getTime()));
  70. }*/
  71. }