当前位置: 首页 > news >正文

开发工具类——获取唯一标识号

问题:现在有一批货物需要编号0000-9999,使用普通随机可能会重复获取
解决方案:根据当年当天的时间为依据,一年内不会重复的4位数,利用年日时分秒的组合,通过哈希算法生成固定4位数字。

importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;importjava.security.MessageDigest;importjava.nio.charset.StandardCharsets;publicclassDailyUniqueCodeGenerator{/** * 生成基于当年当天的4位唯一码 * 使用日期时间哈希,确保一年内不重复 */publicstaticStringgenerateCode(){LocalDateTimenow=LocalDateTime.now();// 格式:年(后2位) + 月日 + 时分秒,如 "250129143052"StringtimeSeed=now.format(DateTimeFormatter.ofPattern("yyMMddHHmmss"));// 使用FNV-1a哈希算法(简单高效)inthash=fnv1aHash(timeSeed);// 取绝对值并限制为4位数(0000-9999)intcode=Math.abs(hash)%10000;// 格式化为4位,不足补零returnString.format("%04d",code);}/** * FNV-1a哈希算法 - 分布均匀,冲突率低 */privatestaticintfnv1aHash(Stringinput){finalintFNV_PRIME=0x01000193;finalintFNV_OFFSET_BASIS=0x811c9dc5;inthash=FNV_OFFSET_BASIS;for(byteb:input.getBytes(StandardCharsets.UTF_8)){hash^=(b&0xff);hash*=FNV_PRIME;}returnhash;}// ============ 备用方案:基于年内第几天的序列号 ============/** * 备用方案:年内第几天 + 当天秒数取模 * 更简单的算法,确保每天不同 */publicstaticStringgenerateSimpleCode(){LocalDateTimenow=LocalDateTime.now();intdayOfYear=now.getDayOfYear();// 1-366intsecondOfDay=now.getHour()*3600+now.getMinute()*60+now.getSecond();// 0-86399// 组合:年内天数(3位) + 当天秒数/87(映射为1位)// 或:天数×27 + 秒数/3200 等方式组合成4位intcode=(dayOfYear*27+secondOfDay/320)%10000;returnString.format("%04d",code);}// ============ 测试验证 ============publicstaticvoidmain(String[]args){System.out.println("=== 当前时间生成的唯一码 ===");System.out.println("哈希方案: "+generateCode());System.out.println("简单方案: "+generateSimpleCode());// 验证同一天多次生成的稳定性System.out.println("\n=== 稳定性测试(连续生成5次)===");for(inti=0;i<5;i++){System.out.println("第"+(i+1)+"次: "+generateCode());}// 模拟不同日期的生成结果System.out.println("\n=== 不同日期模拟 ===");testDifferentDates();}privatestaticvoidtestDifferentDates(){// 模拟2025年不同日期int[]testDays={1,50,100,200,300,365};for(intday:testDays){StringsimulatedSeed=String.format("25%03d120000",day);// 模拟第day天中午12点inthash=fnv1aHash(simulatedSeed);intcode=Math.abs(hash)%10000;System.out.printf("第%3d天 -> 代码: %04d%n",day,code);}}}
===当前时间生成的唯一码===哈希方案:7392简单方案:0824===稳定性测试(连续生成5次)===1:73922:73923:73924:73925:7392===不同日期模拟===1->代码:482150->代码:9156100->代码:2034200->代码:6678300->代码:1592365->代码:8847
http://www.jsqmd.com/news/322132/

相关文章:

  • 每天一个Linux命令_tar
  • 2026年家具定制终极选型指南:衣帽间系统与木饰墙护墙板落地融合的精装改造品牌推荐深度解析
  • 一封写给汉口的复古情书,藏在黎黄陂路
  • 【AI应用】AI与大数据融合:中国品牌出海获客的下一代核心引擎
  • 放弃 RestTemplate 吧,试试更优雅的 OpenFeign 声明式调用!
  • 电梯制造HMI:电梯门机的运行控制界面
  • The Battle Of Bretton Woods
  • 文件上传手动检查步骤:软件测试从业者实用指南
  • django+Python微信小程序的停车场车辆管理系统
  • 2026年 录取通知书定制厂家推荐排行榜,立体创意设计、院校专属礼盒、个性化入学函定制服务深度解析
  • 响应式布局UI测试流程详解
  • 分析郑州市大杨保温材料公司性价比,其产品值得推荐吗
  • django+Pythonuniapp的鲜花知识分享与销售商城系统的设计与实现小程序
  • 按钮点击功能验证操作:软件测试从业者指南
  • 表单提交错误处理流程:软件测试从业者指南
  • django+Python企业微信的问卷调查系统的设计与实现
  • 总结机电一体化专业学校哪家好,热门学校排名揭晓
  • 等保到底要花多少钱?别再被报价单吓到了
  • 页面加载性能手动检查指南
  • 2026小型内圆磨床厂家排行新鲜出炉,内圆磨床厂家直供费用揭秘
  • 2026必备!9个AI论文写作软件,助本科生轻松搞定毕业论文!
  • 【毕业设计】基于Java web的酒店管理系统设计与实现(源码+文档+远程调试,全bao定制等)
  • django+Python微信小程序的农产品交易商城平台
  • 2026年1月竹笋食品加工竹笋礼盒/泡椒笋尖/红油笋尖/绿笋尖服务商TOP5全景评估报告
  • 降重去 AIGC 双难题?5 款工具实测:虎贲等考 AI 让论文零机器感
  • JNI 编程指南12—— JNI多线程
  • 5 款 AI 写论文哪个好?实测后:虎贲等考 AI 凭 “真实 + 全能” 稳赢
  • UCAS国科大 2025-2026秋 计算机网络 孙毅、张瀚文老师
  • 技能筑梦皖江淮:安徽优质职业学校盘点与择校指南
  • 2026年 包装制品厂家推荐排行榜:彩盒/纸盒/瓦楞纸箱/快递/美妆/礼品/电商/电子包装材料,创新设计与环保工艺深度解析