下午突然想到要做一个生成基于62进制的短ID,网上找了一些资料,
说到用到辗除法,于是实现了一下。不知道正不正确,
数字和字符串能够相互转换。
贴在这里留做以后备用。
public class ShortId {
private final char[] str = { '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', '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' };
private final String _str=new String(str);
int len = str.length;
public String toStr(long num) {
if(num<len){
return ""+str[(int)num];
}
int a = (int)num%len;
int b = (int)num/len;
char e=str[a];
if(b>=len){
return ""+toStr(b)+e;
}else{
return ""+str[b]+e;
}
}
public long toNum(String s) {
int a = s.length()-1;
long val=0;
for(int i=a;i>=0;i--){
char c = s.charAt(i);
val += (_str.indexOf(c)*Math.pow(len, a-i));
}
return val;
}
public static void main(String[] args) {
ShortId s64 = new ShortId();
long num=45236;
String enCode=s64.toStr(num);
long deCode = s64.toNum(enCode);
System.out.println("短Id是:"+enCode);
System.out.println("Id是:"+deCode);
}
}
输出:
短Id是:bLC
Id是:45236
分享到:
相关推荐
java根据时间生成唯一ID,普通的根据时间生成的ID放在循环内很容易重复。
这是一种基于Twitter开源的ID生成算法。它通过将ID分成多个部分(如时间戳、机器ID、序列号等),从而保证了ID的全局唯一性。此算法广泛应用于高并发场景下的分布式系统中。 - **优点**:支持高并发,性能优越;...
这里使用SQL查询语句来获取存储在`DataDict_Resources`表中id为'1'的记录,其`resources`字段包含Word文档的二进制数据。通过`DataTable`对象`dt2`存储查询结果,然后提取第一行的`resources`数据,将其类型转换为`...
Vesta-ID-Generator这个文件名可能是特定的ID生成库,它可能提供了更高级的功能,比如定制化的ID生成策略,或者优化的性能以满足高并发环境的需求。在实际项目中,开发者可能会选择这样的库来代替标准的Java UUID...
生成的8位十六进制字符串在大多数情况下已经足够独特,但考虑到时间戳的精度,如果系统在同一秒内需要生成多个不重复的8位数字,可能需要结合其他策略,如添加进程ID、随机数或者序列号,以确保在极短时间内生成的ID...
假设我们要开发一个基于PHP的短网址生成系统,具体步骤如下: 1. **需求分析**:明确项目目标、功能需求及性能指标。 2. **架构设计**:确定系统整体架构和技术选型,比如前端框架、后端框架、数据库类型等。 3. **...
使用时,你需要创建一个`SnowflakeIdWorker`实例,它会根据系统时间和工作节点ID生成ID。例如: ```java import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; ...
标题中的“基于PHP的二进制在线转换php版源码.zip”表明这是一个使用PHP编程语言实现的二进制数据转换工具的源代码包。这个工具可能允许用户在Web上上传二进制文件,并将其转换为其他格式或者进行特定的二进制操作。...
Twitter Snowflake算法是一种广泛使用的ID生成方案,其设计思路巧妙,能有效地解决高并发环境下的ID生成问题。这个项目将Twitter Snowflake算法集成到了Redis模块中,使得ID生成服务更加高效和便捷。 **Twitter ...
总的来说,这个项目是一个基于MFC的进制转换应用实例,它涵盖了C++编程、MFC框架的应用、用户界面设计和交互逻辑实现等多个方面,对于提升开发者在Windows应用程序开发中的技能具有一定的价值。尽管存在UI设计上的...
本实例将探讨如何基于硬件ID和程序ID高效地生成注册码,确保软件的独特性和安全性。 硬件ID通常指的是计算机的唯一标识,如主板的BIOS序列号、硬盘ID或网卡MAC地址。这些信息可以用来限制注册码只能在特定的硬件...
我今天要做的就是做一个不重复ID的生成器 /** * 生成一个用不重复的ID */ function GenNonDuplicateID():String{ } 先看看下面的几个方法 1.生成[0,1)的随机数的Math.random,例如 //我这次运行生成的是:0....
Guid号的生成机制是基于时间戳、机器地址、进程ID等多种因素,通过特定算法混合计算得出,这使得在理论上,即使在全局范围内,Guid的重复概率也极其微小。由于其独特性和随机性,Guid通常用于生成数据库中的主键,...
雪花算法(Snowflake)是Twitter开源的一种分布式ID生成算法,它能有效地生成全局唯一的64位ID,这在很多场景下可以替代传统的UUID。 雪花算法的核心思想是将ID分为多个部分,分别是时间戳、工作节点ID和序列号,...
其中,时间戳部分确保了ID的全局唯一性,工作节点ID则避免了同一毫秒内不同节点生成相同的ID,序列号则解决了同一节点在同一毫秒内的ID生成。在Java环境中,可以通过实现Snowflake算法的类来生成这样的ID,这通常比...
标题中的“一个很小的124字节安全url友好的唯一字符串ID生成器的JavaScript”指的是一种在JavaScript环境中实现的高效且具有特定特性的唯一标识符生成算法。这种生成器设计的目标是创建短小、安全并且适用于URL的...
MySQL全局ID生成方法是数据库设计中的一个重要议题,特别是在大规模分布式系统中,确保ID的全局唯一性和高并发下的高效生成是数据库架构的关键要素。以下是一些常见的全局ID生成策略: 1. **基于CAS(Check and Set...
在分布式环境中,为了确保每个实体的标识都是唯一的,全局唯一ID生成器扮演着至关重要的角色。Vesta的设计目标是高效、可扩展且无冲突,使得在大规模并发场景下也能稳定工作。 Vesta的工作原理基于Snowflake算法的...
ID生成器的设计和实现涉及到多个知识点,包括数据类型、随机数生成、哈希函数以及编码转换等。以下是对这些关键点的详细阐述: 1. **数据类型**:在Delphi中,16位ID通常表示为`Word`类型,它能够存储0到65535之间...