1. package test1;
  2.  
  3. import java.util.Random;
  4. import java.util.UUID;
  5. public class ShareCodeUtil {
  6. private static final char[] r=new char[]{'q', 'w', 'e', '8', 'a', 's', '2', 'd', 'z',
  7. 'x', '9', 'c', '7', 'p', '5', 'i', 'k', '3', 'm', 'j', 'u', 'f', 'r', '4', 'v',
  8. 'y', 'l', 't', 'n', '6', 'b', 'g', 'h'};
  9. private static final char b='o';
  10. private static final int binLen=r.length;
  11. private static final int s=6;
  12. public static String toSerialCode(long id) {
  13. char[] buf=new char[32];
  14. int charPos=32;
  15. while((id / binLen) > 0) {
  16. int ind=(int)(id % binLen);
  17. // System.out.println(num + "-->" + ind);
  18. buf[--charPos]=r[ind];
  19. id /= binLen;
  20. }
  21. buf[--charPos]=r[(int)(id % binLen)];
  22. // System.out.println(num + "-->" + num % binLen);
  23. String str=new String(buf, charPos, (32 - charPos));
  24. // 不够长度的自动随机补全
  25. if(str.length() < s) {
  26. StringBuilder sb=new StringBuilder();
  27. sb.append(b);
  28. Random rnd=new Random();
  29. for(int i=1; i < s - str.length(); i++) {
  30. sb.append(r[rnd.nextInt(binLen)]);
  31. }
  32. str+=sb.toString();
  33. }
  34. return str;
  35. }
  36.  
  37. public static long codeToId(String code) {
  38. char chs[]=code.toCharArray();
  39. long res=0L;
  40. for(int i=0; i < chs.length; i++) {
  41. int ind=0;
  42. for(int j=0; j < binLen; j++) {
  43. if(chs[i] == r[j]) {
  44. ind=j;
  45. break;
  46. }
  47. }
  48. if(chs[i] == b) {
  49. break;
  50. }
  51. if(i > 0) {
  52. res=res * binLen + ind;
  53. } else {
  54. res=ind;
  55. }
  56. // System.out.println(ind + "-->" + res);
  57. }
  58. return res;
  59. }
  60. public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f",
  61. "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
  62. "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
  63. "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",
  64. "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
  65. "W", "X", "Y", "Z" };
  66. public static String generateShortUuid() {
  67. StringBuffer shortBuffer = new StringBuffer();
  68. String uuid = UUID.randomUUID().toString().replace("-", "");
  69. for (int i = 0; i < 8; i++) {
  70. String str = uuid.substring(i * 4, i * 4 + 4);
  71. int x = Integer.parseInt(str, 16);
  72. shortBuffer.append(chars[x % 0x3E]);
  73. }
  74. return shortBuffer.toString();
  75.  
  76. }
  77.  
  78. public static void main(String[] args) {
  79.  
  80. System.out.println(generateShortUuid());
  81. }
  82. }

  

生成短的uuid的更多相关文章

  1. 基于UUID生成短ID

    为什么需要短ID 数据库操作过程最常用到: 自增ID UUID 前者多数依赖Mysql的auto_increment,但数据移植麻烦. 如果是主从或主主,不同库里自增ID还可能不一致. 后者长度是个问 ...

  2. Python生成短uuid的方法

    python的uuid都是32位的,比较长,处理起来效率比较低, 本算法利用62个可打印字符,通过随机生成32位UUID,由于UUID都为十六进制,所以将UUID分成8组,每4个为一组,然后通过模62 ...

  3. java生成随机字符串uuid

    GUID是一个128位长的数字,一般用16进制表示.算法的核心思想是结合机器的网卡.当地时间.一个随即数来生成GUID.从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义 ...

  4. php生成短网址的思路与方法

    生成短网址的思路以及使用php生成短网址的实现方法. 生成短网址的思路:如果把短网址还原了,你知道是个什么样子的吗?比如:http://www.jbxue.com/sitejs-17300-1.htm ...

  5. Excel生成guid、uuid

    1.Excel生成guid,uuid  格式:600d65bc-948a-1260-2217-fd8dfeebb1cd =LOWER(CONCATENATE(DEC2HEX(RANDBETWEEN(, ...

  6. Java生成短链接

    为什么要生成短链接 微博之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少. 那么使用短链接的作用有哪些呢?1.字数,2.统计,3.监控,4.过滤 ...

  7. [py]Python使用UUID库生成唯一ID(uuid模块)

    https://www.cnblogs.com/dkblog/archive/2011/10/10/2205200.html uuid介绍 UUID是128位的全局唯一标识符,通常由32字节的字符串表 ...

  8. java 生成GUID与UUID

      java 生成GUID与UUID CreateTime--2018年5月31日16点29分 Author:Marydon import java.util.UUID; public static ...

  9. [转载]virtual&nbsp;box如何生成新的UUID

    原文地址:virtual box如何生成新的UUID作者:阿昭 问题描述:在为Virtual Box加载多台虚拟机器(显然这些虚拟机器都来自一个模板)的时候,出现如下错误: "Cannot ...

随机推荐

  1. MATROSKA 文件格式

    MATROSKA 文件格式 1.EBML (Extensible Binary Meta Language): EBML语言使用不定长整数,这种方式相对于固定长度的32位/64位字长的整数值更节约空间 ...

  2. (转)MapReduce Design Patterns(chapter 7 (part 1))(十三)

    CHAPTER 7.Input and Output Patterns 本章关注一个最经常忽略的问题,来改进MapReduce 的value:自定义输入和输出.我们并不会总使用Mapreduce本身的 ...

  3. Hibernate Validator参数校验

    日常开发中经常会遇到需要参数校验的情况,比如某个字段不能为空.长度不能超过5等都属于参数校验的范围.对于简单的参数校验通过写几个if-else判断语句就搞定,但是对于复杂的多个参数校验的情况,就不是那 ...

  4. Asp.Net MVC webAPI Token based authentication

    1. 需要安装的nuget <package id="Microsoft.AspNet.Identity.Core" version="2.2.1" ta ...

  5. Buildroot 指定内核版本

    /******************************************************************************** * Buildroot 指定内核版本 ...

  6. Linux 查看版本號

    前言 剛剛升級了Fedora27,想要一查究竟.無奈竟不知如何查看linux版本,依稀記得uname好像可以,輸入之後就尷尬了. $ uname Linux 查看網上各種教程,看到一個不錯的博文,爲[ ...

  7. js效果之回到顶部

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. Java中有两种实现多线程的方式以及两种方式之间的区别

    看到一个面试题.问两种实现多线程的方法.没事去网上找了找答案. 网上流传很广的是一个网上售票系统讲解.转发过来.已经不知道原文到底是出自哪里了. Java中有两种实现多线程的方式.一是直接继承Thre ...

  9. springboot项目启动之后初始化自定义配置类

    前言 今天在写项目的时候,需要再springboot项目启动之后,加载我自定义的配置类的一些方法,百度了之后特此记录下. 正文 方法有两种: 1. 创建自定义类实现 CommandLineRunner ...

  10. 获取web.config 内的值

    获取 System.Configuration.ConfigurationManager.AppSettings[DrugPackageRegistrationName]//获取web.config ...