`
snoopy7713
  • 浏览: 1151877 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

利用 Base64 缩短 UUID 至22位

    博客分类:
  • java
阅读更多

UUID还是比较常用的,尤其在web应用里。

有时在URL中传播,感觉比较长,于是想对其进行缩短,查询了一些资料,发现目前最短是到 22 位(使用URL传播非转义字符,结合Base64)

 

废话少说,代码奉上:

Java代码  收藏代码
  1. public   class  UuidBase64ShortMap  implements  StringShortMap{  
  2.     /**  
  3.      *  
  4.      *把UUID 转为 22位长字符串  
  5.      */   
  6.     public  String shorter(String s) {  
  7.         char [] res = Base64.encode(asBytes(s));  
  8.         return   new  String(res, 0 ,res.length- 2 );  
  9.     }  
  10.   
  11.    /**  
  12.      *  
  13.      *把22位长字符串转为 UUID  
  14.      */   
  15.     public  String recover(String s) {  
  16.         int  len = s.length();  
  17.         char [] chars =  new   char [len+ 2 ];  
  18.         chars[len]=chars[len+1 ]= '_' ;  
  19.         for ( int  i= 0 ;i<len;i++){  
  20.             chars[i]=s.charAt(i);  
  21.         }  
  22.         return  toUUID(Base64.decode(chars)).toString();  
  23.     }  
  24.     public   static   byte [] asBytes(String id) {  
  25.         UUID uuid=UUID.fromString(id);  
  26.         long  msb = uuid.getMostSignificantBits();  
  27.         long  lsb = uuid.getLeastSignificantBits();  
  28.         byte [] buffer =  new   byte [ 16 ];  
  29.   
  30.         for  ( int  i =  0 ; i <  8 ; i++) {  
  31.                 buffer[i] = (byte ) (msb >>>  8  * ( 7  - i));  
  32.         }  
  33.         for  ( int  i =  8 ; i <  16 ; i++) {  
  34.                 buffer[i] = (byte ) (lsb >>>  8  * ( 7  - i));  
  35.         }  
  36.         return  buffer;  
  37.   
  38.     }  
  39.   
  40.     public   static  UUID toUUID( byte [] byteArray) {  
  41.         long  msb =  0 ;  
  42.         long  lsb =  0 ;  
  43.         for  ( int  i =  0 ; i <  8 ; i++)  
  44.                 msb = (msb << 8 ) | (byteArray[i] &  0xff );  
  45.         for  ( int  i =  8 ; i <  16 ; i++)  
  46.                 lsb = (lsb << 8 ) | (byteArray[i] &  0xff );  
  47.         UUID result = new  UUID(msb, lsb);  
  48.   
  49.         return  result;  
  50.     }  
  51.       
  52.     public   static   void  main(String[] args) {  
  53.                 StringShortMap shortm = new  UuidBase64ShortMap();  
  54. //        String uuid = "3b01174f-3139-4a5b-a949-bb7e80b55f91";   
  55. //        System.out.println(Base64.encode(uuid));   
  56. //        String shorter= shortm.shorter(uuid);   
  57. //        System.out.println(shorter);   
  58. //        System.out.println(shortm.recover(shorter) +"\t" + uuid);   
  59.           
  60. //        for(int i=0;i<100000;i++){   
  61. //            String Uuid = UUID.randomUUID().toString();   
  62. //            System.out.println(Uuid +"\t" + shortm.shorter(Uuid));   
  63. //        }   
  64.           
  65.         String[] uuids={"f6e0e040-be3d-4573-964c-88724a8fa7d3" , "c19b9de1-f33a-494b-afbe-f06817218d63" , "f08f0b2c-66fb-41a3-99c3-ac206089c3ad" };  
  66.         for (String s :uuids){  
  67.             System.out.println(shortm.shorter(s));  
  68.         }  
  69.     }  
  70. }  

运行结果

Java代码  收藏代码
  1. 9uDgQL49RXOWTIhySo*n0w  
  2. wZud4fM6SUuvvvBoFyGNYw  
  3. 8I8LLGb7QaOZw6wgYInDrQ  
 

有更好的方案,欢迎讨论!!

分享到:
评论

相关推荐

    Java 中将 UUID 存储为 Base64 字符串

    #### 二、Base64 编码与 UUID ##### 2.1 Base64 编码简介 Base64 编码是一种常用的二进制到文本的编码方式,它能将二进制数据转换为 ASCII 字符串,常用于电子邮件、网页和其他需要将二进制数据以文本形式传输或...

    UUIDBase64url:UUID转换为URL安全base64

    在 nodejs 上生成 UUID$ git clone https://github.com/lintide/UUIDBase64url.git$ cd UUIDBase64url$ npm install$ node index.js使用 UUID 库不过这个库只...将 uuid 转换为 base64 格式正常的 base64 格式包含 / +

    javabase64-1.3.1

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit...

    uuid64:短 UUID

    uuid64介绍这是一个生成 64 位 UUID 的简单脚本。 UUID 的正常类型(例如 uuid 模块中可用的那些)是 128 位,它提供了更大的能力来避免生成值之间的冲突。 但是,有时使用较小的 UUID 会很方便,例如,如果生成的值...

    利用雪花算法生成uuid

    雪花算法(Snowflake)是Twitter开源的一种分布式ID生成算法,它能有效地生成全局唯一的64位ID,这在很多场景下可以替代传统的UUID。 雪花算法的核心思想是将ID分为多个部分,分别是时间戳、工作节点ID和序列号,...

    java生成8位UUID

    java 生成8位UUID,解决UUID2太长的问题,欢迎下载。后续代码,陆续放出

    slugid:用于生成 22 个字符段的 URL 安全 base64 UUID 编码器

    一个 node.js 模块,用于生成 v4 UUID 并将它们编码为 22 个字符的 URL-safe base64 slug 表示(参见 )。 Slug 是 url-safe base64 编码的 v4 uuid,去掉了 base64 =填充。 它们是使用生成的,该小心地在提供可用...

    util-js-uuid:具有紧凑型Base64格式的UUID实用程序

    程序包的原始包装,用于使用Base64编码生成UUID v4。 原因是使用可打印字符获得通用且简短的UUID表示形式,无需特殊的UUID类型即可在JSON和数据库中有效使用它。 它仅产生22个字符,而不是带有分隔符的规范的36个...

    32位UUID生成工具,16进制

    尽管128位的UUID标准形式由32个十六进制数字组成,这里提到的"32位"可能是指显示或输入时使用的简化形式,即用户仅需要关注和输入生成UUID的一部分。这种工具简化了用户与UUID交互的过程,尤其是对于那些需要大量...

    java 生成32位UUID

    然而,32位的UUID实际上可能不满足全局唯一性的要求,因为128位UUID提供了足够的熵(随机性)来确保几乎不可能重复。32位的UUID在没有特定算法保证唯一性的情况下,可能会导致冲突。为了在32位范围内保持唯一性,...

    base64算法

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,...

    uuid.rar_C获得UUID_UUID C_c生成uuid_c语言生成uuid_uuid

    4. **转换和打印**:生成的UUID是二进制形式,需要通过`uuid_unparse()`函数将其转换为字符串形式,便于显示和使用。 标签中的“c获得uuid”、“uuid_c”、“c生成uuid”、“c语言生成uuid”都强调了这是关于C语言...

    UUIDs的紧凑型22位字符URL安全表示

    例如,可以先用Base64对UUID进行编码,然后将Base64编码后的结果替换掉URL不安全的字符,最后进一步缩短字符串长度至22位。这种方法可能涉及到位运算、字符串操作以及对编码规则的理解。 紧凑型22位字符的实现步骤...

    uuid生成16位的,唯一码

    uuid生成,可生成16个字符的唯一码。使用方法,见main函数

    16bit UUID一览表

    它是一个16位的二进制数字,通常用十六进制表示法表示。16位UUID是一种广泛使用的标识符,在蓝牙技术中扮演着重要角色。 蓝牙技术的出现,使得设备之间的通信变得更加便捷和高效。然而,在蓝牙技术中,设备之间的...

    uuid.zip_uuid

    在IT领域,UUID扮演着至关重要的角色,特别是在分布式系统和数据库设计中。UUID生成器是用来创建这些独特标识的工具,它确保生成的每个ID在全球范围内都是唯一的,避免了数据冲突。 在“uuid.zip_uuid”这个压缩包...

    自动生成32位UUID的函数

    直接通过 dbo.[FunGetUUID32](NEWID())即可获取到32位UUID,非常简单方便。

    短8位uuid 用于兑换码

    短8位uuid 用于兑换码,不重复,,本人用很好用,,分享给大家

    javaScript动态随即生成UUID

    在这个过程中,还需要遵循UUID的规范,比如在第14位固定为4,在第19位设置特定的数值范围等,以确保生成的UUID属于版本4(基于随机数的UUID)。 ### 三种生成方法详解 #### 1. 基于自定义长度和基数的生成 此方法...

    浅谈java获取UUID与UUID的校验

    UUID 的格式是一个 32 位十六进制数字,通常以 5 个部分的形式表示,中间用连接符 "-" 分隔。例如:e65deb4c-a110-49c8-a4ef-6e69447968d6。其中,第一个部分是时域,第二个部分是时钟序列,第三个部分是节点 ID,第...

Global site tag (gtag.js) - Google Analytics