经常碰到生成唯一编码的需求,每个人有不同的解决方法。今天,在浏览同事的代码的时候,发现他写的生成唯一编码的代码,不是太严谨。我在想怎么把它完善.....
源码如下
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的自动递增,那么重新设计方法了。
相关推荐
/** * 获得序列号,同时更新持久化存储中的序列 * @param current 当前的日期 * @param start 初始化的序号 * @return 所获得新的序列号 */ protected abstract int getOrUpdateNumber(Date current, int start);
适用于Java分布式高并发的全局唯一ID生成器;结合Springboot和SpringCloud
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密码时,忘记密码时,这个工具就有用了,帮你生成密码,用了很长时间了,绝对主流。
唯一编号生成器.java
该java文件是生成全球唯一的32位编码的工具类 RandomGUIDUtil.java
主要为大家详细介绍了python实现字符串加密,生成唯一固定长度字符串,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文档主要讲述的是java生成UUID通用唯一识别码;UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算...
生成32位的唯一标识
分布式架构系统生成全局唯一序列号的一些思路对比分析 分布式架构系统生成全局唯一序列号的一些思路对比分析
NULL 博文链接:https://zhaoshijie.iteye.com/blog/986297
这是自动生成不重复主键的代码包,直接导包进入程序即可使用,帮助生成由字母数字组成的16位id号,可以用于数据库主键存储(使用数据库自增主键始终有问题,不适合大型程序的使用),该代码包运用于很多大型企业级...
我们假定某俱乐部发放一批10位的会员卡号,会员卡号由3位城市编号+5位卡号编码+2位校验码组成,城市编号用区号表示,如755代表深圳,5位卡编号则由36进制的卡编号组成,后面两位校验码则是通过一定的算法生成的,...
编码生成:程序能够根据企业需求自动生成唯一的编码,适用于产品、文档、资产等多种分类。 规则定制:支持自定义编码规则,包括编码长度、字符集、前缀后缀等,以适应不同企业的管理标准。 数据校验:集成校验功能,...
生成唯一的不可预测的分布式标识符。 它是由 ,随机字节和两个部分HMAC组合而成的。 它使用编码。 安装 npm install @ theroyalwhee0 / ident 或者 纱线添加@ theroyalwhee0 / ident 文献资料 identGenerator()...
企业编码管理系统是一种帮助企业管理和生成唯一标识符(如产品编码、员工ID、文件编号等)的工具。该系统可以确保编码的一致性和唯一性,便于跟踪和管理企业资源。 功能模块 编码规则设置:允许管理员设置编码规则...
主要介绍了PHP实现生成唯一编号,文中使用10进制转换36进制得到不重复的6000多万个唯一编号,编号位数为10位,需要的朋友可以参考下
在开发过程中,会遇到生成XX编号之类的数据,而且这编号不能重复,所以根据当前时间,生成8位不重复的数.
本工具得益于SQLITE的优点,可以生成永不重复的编号,保证产生编号的正确性和唯一性,且SQLITE有非常高的可靠性,可以让让你的数据文件免受断电或者其他意外情况带来的损失。 理论上而言,本工具的源代码可以通过...
1.获取字符串唯一ID 2.获取数字唯一ID 直接使用 IdUtils.simpleUUID(); IdUtils.nextIdText();