`
nicegege
  • 浏览: 579888 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

生成唯一编码

 
阅读更多

经常碰到生成唯一编码的需求,每个人有不同的解决方法。今天,在浏览同事的代码的时候,发现他写的生成唯一编码的代码,不是太严谨。我在想怎么把它完善.....

源码如下

public String generateCode(Rights currentRight) {
		List<Rights> rights=rightsDaoImpl.findAll(Rights.class);
		Random random=new Random();
		boolean repeat=false;
		String rcode=String.valueOf(random.nextInt(10000));
		for (int i = 0; i < rights.size(); i++) {
			Rights right=rights.get(i);
			 if(right.getCode()==currentRight.getCode()){
				 repeat=true;
			 }
		}
		if(repeat){
			rcode=String.valueOf(random.nextInt(10000));
		}
		return rcode;		
}

 抽出5分钟小小的研究一下,这段代码有哪些毛病?

1、首先明白生成的编码在0到10000的范围,这段代码有效的前提是right不会超过10001.随机生成rcode,无法体现包含rcode对象之间的先后创建顺序。

2、很难保证一个rcode的唯一性。遍历一次发现rcode存在则重新生成。最好是从10000中移除目前rights包含的所有数字。剩下的数字中选择一个。

3、目前每次生成rcode的时候要重新遍历,会造成性能消耗。

解决的办法:

1、如果把数据库存入mysql,则字段设置为自动递增。

2、不使用mysql的自动递增,那么重新设计方法了。

 

 

分享到:
评论

相关推荐

    JAVA版本的生成唯一编号

    /** * 获得序列号,同时更新持久化存储中的序列 * @param current 当前的日期 * @param start 初始化的序号 * @return 所获得新的序列号 */ protected abstract int getOrUpdateNumber(Date current, int start);

    Springboot唯一编号整合,vesta全局唯一id生成器

    适用于Java分布式高并发的全局唯一ID生成器;结合Springboot和SpringCloud

    用PB生成全球唯一码(GUID)源码

    string ls_guid IF cbx_1.checked THEN is_flag = '1' ELSE is_flag = '0' END IF ls_guid = f_get_guid('',is_flag) CHOOSE CASE ls_guid CASE '0'

    MD5加密字符串生成密码

    本人写的字符串加密成MD5工具,比如在你想生成MD5密码时,忘记密码时,这个工具就有用了,帮你生成密码,用了很长时间了,绝对主流。

    唯一编号生成器.java

    唯一编号生成器.java

    生成全球唯一的32位编码

    该java文件是生成全球唯一的32位编码的工具类 RandomGUIDUtil.java

    python实现字符串加密 生成唯一固定长度字符串

    主要为大家详细介绍了python实现字符串加密,生成唯一固定长度字符串,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    java生成UUID通用唯一识别码.docx

    本文档主要讲述的是java生成UUID通用唯一识别码;UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算...

    java生成32位的唯一标识

    生成32位的唯一标识

    分布式架构系统生成全局唯一序列号的一些思路对比分析

    分布式架构系统生成全局唯一序列号的一些思路对比分析 分布式架构系统生成全局唯一序列号的一些思路对比分析

    全球唯一码生成器(GUID)

    NULL 博文链接:https://zhaoshijie.iteye.com/blog/986297

    自动生成不重复无序化id

    这是自动生成不重复主键的代码包,直接导包进入程序即可使用,帮助生成由字母数字组成的16位id号,可以用于数据库主键存储(使用数据库自增主键始终有问题,不适合大型程序的使用),该代码包运用于很多大型企业级...

    PHP生成唯一会员卡号

    我们假定某俱乐部发放一批10位的会员卡号,会员卡号由3位城市编号+5位卡号编码+2位校验码组成,城市编号用区号表示,如755代表深圳,5位卡编号则由36进制的卡编号组成,后面两位校验码则是通过一定的算法生成的,...

    企业编码管理系统python版

    编码生成:程序能够根据企业需求自动生成唯一的编码,适用于产品、文档、资产等多种分类。 规则定制:支持自定义编码规则,包括编码长度、字符集、前缀后缀等,以适应不同企业的管理标准。 数据校验:集成校验功能,...

    ident:唯一身份生成器

    生成唯一的不可预测的分布式标识符。 它是由 ,随机字节和两个部分HMAC组合而成的。 它使用编码。 安装 npm install @ theroyalwhee0 / ident 或者 纱线添加@ theroyalwhee0 / ident 文献资料 identGenerator()...

    基于Python毕业设计企业编码管理的程序(源码+使用说明)

    企业编码管理系统是一种帮助企业管理和生成唯一标识符(如产品编码、员工ID、文件编号等)的工具。该系统可以确保编码的一致性和唯一性,便于跟踪和管理企业资源。 功能模块 编码规则设置:允许管理员设置编码规则...

    PHP实现生成唯一编号(36进制的不重复编号)

    主要介绍了PHP实现生成唯一编号,文中使用10进制转换36进制得到不重复的6000多万个唯一编号,编号位数为10位,需要的朋友可以参考下

    利用时间生成8位不重复数

    在开发过程中,会遇到生成XX编号之类的数据,而且这编号不能重复,所以根据当前时间,生成8位不重复的数.

    fltk+sqlite设计的编码生成器

    本工具得益于SQLITE的优点,可以生成永不重复的编号,保证产生编号的正确性和唯一性,且SQLITE有非常高的可靠性,可以让让你的数据文件免受断电或者其他意外情况带来的损失。 理论上而言,本工具的源代码可以通过...

    java 获取分布式唯一ID.雪花ID

    1.获取字符串唯一ID 2.获取数字唯一ID 直接使用 IdUtils.simpleUUID(); IdUtils.nextIdText();

Global site tag (gtag.js) - Google Analytics