流水号生成规则 写道
1.设置默认流水号限定长度规则
2.流水号达到最大限度时,长度+1,流水号从1开始重新来过
3.流水号数字递增部分达到99...9的时候,如果没有超出流水号长度的最大范围,则增加字母加入流水号,直至字母都为ZZ..Z的时候,长度+1,流水号从1开始重新来过
4.流水号可以限定字母流水的长度
预计期望:
流水号规则:
流水号最大长度:5
字母限定长度:2
00001~99999
A0001~A9999
....
Z0001~Z9999
ZA001~ZA999
...
ZZ001~ZZ999
000001~999999
2.流水号达到最大限度时,长度+1,流水号从1开始重新来过
3.流水号数字递增部分达到99...9的时候,如果没有超出流水号长度的最大范围,则增加字母加入流水号,直至字母都为ZZ..Z的时候,长度+1,流水号从1开始重新来过
4.流水号可以限定字母流水的长度
预计期望:
流水号规则:
流水号最大长度:5
字母限定长度:2
00001~99999
A0001~A9999
....
Z0001~Z9999
ZA001~ZA999
...
ZZ001~ZZ999
000001~999999
/** * */ package com.mw.framework.util; import java.util.concurrent.atomic.AtomicInteger; /** * @Project MeWeb * @Copyright © 2008-2014 SPRO Technology Consulting Limited. All rights reserved. * @fileName com.mw.framework.util.SerialNumberUtils.java * @Version 1.0.0 * @author Allan Ai * @time 2014-7-22 * */ public class SerialNumberUtils { public static String[] sn(int len,Integer i,String driver,String prefix,int limited){ String[] result = new String[4]; AtomicInteger z = new AtomicInteger(i); AtomicInteger x = new AtomicInteger(i); driver = driver==null?"":driver; prefix = prefix==null||prefix.equals("null")?"":prefix; //1.判断流水号长度是否大于约定长度 if(z.toString().length()<=(len-driver.length())){ if(Integer.valueOf(x.incrementAndGet()).toString().length()>(len-driver.length())||(driver.length()>limited && limited!=-1)){ System.out.println("默认索引超出范围,需从字母A开始重新一轮的流水号"); //2.如果流水号+字母长度超过了最大限度修改新的长度 //len=String.valueOf(x.get()).length(); int temp = String.valueOf(x.get()).length(); AtomicInteger atomicInteger = new AtomicInteger(0); char[] charArray = driver.toCharArray(); for (char c : charArray) { if(c=='Z'){ atomicInteger.getAndIncrement(); } } if((temp+driver.length()>len && atomicInteger.intValue()==driver.length() && driver.length()>0) ||(driver.length()>limited && limited!=-1)){ System.out.println("如果流水号+字母长度超过了最大限度修改新的长度,并重新开始一轮+1的流水号"); len++; driver=""; }else{ driver = driverCheck(driver,len,limited); if(driver.equals(".N")){ driver = ""; } } z.set(0); } String current = String.format("%0"+(len-driver.length())+"d",z.incrementAndGet()); result[0]=prefix+driver+current; result[1]=driver; result[2]=String.valueOf(len); result[3]=String.valueOf(z.get()); System.out.println(prefix+driver+current); }else{ System.out.println("输入不合法!"); } return result; } /** * 字母有效检查 * 1.检查字母是否都为Z * 2.检查字母长度 * @param driver * @param len * @return */ public static String driverCheck(String driver,int len,int limited){ if(driver!=null && driver.length()>0){ AtomicInteger z = new AtomicInteger(0); char[] charArray = driver.toCharArray(); for (char c : charArray) { if(c=='Z'){ z.getAndIncrement(); } } if(z.intValue()==driver.length()){ String result = ""; if(z.intValue()==len && z.intValue()>limited){//如所有字母都为Z,并且长度达到限定长度,返回.N System.out.println("如所有字母都为Z,并且长度达到限定长度,返回.N"); result = ".N"; }else if(z.intValue()<len-1 && z.intValue()<=limited){ System.out.println("如果所有字母都为Z,但长度未达到限定长度,直接递增"); result = driver(driver+"@"); } return result; }else{ System.out.println("以上两个条件都不满足,则直接递增"); return driver(driver); } /*if(z.intValue()==driver.length() && z.intValue()==len){//如所有字母都为Z,并且长度达到限定长度,返回.N return ".N"; }else if(z.intValue()==driver.length() && z.intValue()<len){//如果所有字母都为Z,但长度未达到限定长度,则在调用字母递增方法之前加入@用以递增A System.out.println(z.intValue()); System.out.println(driver.length()); return driver2(driver); }else{//以上两个条件都不满足,则直接递增 return driver2(driver); }*/ }else{ return "A"; } } /** * 字母递增 * @param driver * @return */ public static String driver(String driver){ if(driver!=null && driver.length()>0){ char[] charArray = driver.toCharArray(); boolean bool = false; for(int i = charArray.length-1;i>-1;i--){ if(charArray[i]=='Z'){ if(i==charArray.length-1){ charArray[i]='A'; bool = true; }else{ if(bool==true){ AtomicInteger atomic = new AtomicInteger(charArray[i]); int val = atomic.incrementAndGet(); if(90>=val){ charArray[i]=(char) val; bool = false; }else{ charArray[i]='A'; bool = true; } } } }else{ if(bool==true || (i==charArray.length-1)){ AtomicInteger atomic = new AtomicInteger(charArray[i]); int val = atomic.incrementAndGet(); if(90>=val){ charArray[i]=(char) val; bool = false; }else{ charArray[i]='A'; bool = true; } } } } return String.valueOf(charArray); }else{ return "A"; } } public static void main(String[] args) { String[] s_= sn(5,9, "ZYAS","",-1); for (String string : s_) { System.out.println(string); } } }
相关推荐
本文将详细讲解如何使用Java按照日期加流水号的方式生成订单号,并确保其递增性。 首先,订单号通常由日期部分和流水号两部分组成。日期部分可以是年月日或年月日时分秒,用于体现订单创建的时间;流水号则是基于...
根据字母生成流水号,例如当前流水号为AA,则生成新的流水号为AB。若当前流水号为AZ,则生成新的流水号为BA。若当前流水号为ZZ,则生成新的流水号为AAA。若当前流水号为空,则根据传入的位数生成初始值,以此类推。
java开发用于给上传文件附上ID,此ID号为日期+xxx,生成形如20131210001 第二天自动从20131211001开发不会重复。有问题可联系我。
这段代码主要实现了在C#中自动生成带有日期的流水号的功能。流水号通常用于标识唯一性记录,例如订单编号、文档编号等。该代码通过结合当前日期与递增的序列号来生成唯一的流水号。 #### 二、关键代码分析 ##### 1...
java自动生成编号的实现(格式:yyMM+四位流水号) java自动生成编号的实现是指通过java语言生成一个唯一的编号,格式为yyMM+四位流水号。在实际应用中,自动生成编号可以应用于各种场景,如订单编号、用户编号、物流...
这个场景下,提到的工具类就是为了解决这个问题,它能生成以日期开头,后跟四位数字,并且每次递增1的序列号。这样的序列号在日志记录、订单编号、唯一ID生成等方面非常有用。 首先,`CodeUtil.java`可能是实现这个...
二维码生成和业务流水号生成是IT领域中常见的技术应用,特别是在移动支付、物联网以及数据跟踪等领域。二维码(Quick Response Code)是一种二维条形码,能够存储大量的信息,如网址、文本、图片等,并且可以通过...
本文将详细介绍如何在`GridView`中实现流水号的添加,并确保即使在开启分页的情况下,流水号仍然能够连续递增。 #### 二、实现原理 为了实现流水号的添加,我们需要利用`GridView`的一个特性——`TemplateField`。...
流水号(Sequential Number)通常是指按照特定顺序生成的一系列数字,它反映了数据的生成顺序,可以用来追踪记录,例如订单号、交易号等。流水号的设计通常不包含随机性,而是按照递增或递减的方式生成,确保每个新...
SQL Server 中按年月日生成日期型自增编码 本文档介绍了在 SQL Server 中生成日期型自增编码的...* 流水号生成 * 日期型自增编码生成 该方法提供了一种灵活的解决方案,能够满足不同业务需求的日期型自增编码需求。
增减量:设置流水的增减量,默认为1,即按照1 2 3 4 …规则生成,如果输入2即按照1 3 5 7 …规则生成,以此类推,且用户可设置递增或递减流水。 单条复制:设置单个IMEI\MEID码的生成数量。
例如,日期时间序号可以反映出创建的时间,递增数字则适用于流水号,而随机数和UUID在保证唯一性的同时增加了不确定性。 2. **自定义前缀与后缀**:用户可能希望在序号中加入特定标识,如产品类型、部门代号等。...
描述中提到的"生成位数可调的流水号,可以指定开始标志位"是一个具体的编程任务,通常涉及序列生成器或者ID生成器,这类工具在数据库操作、日志记录、订单系统等场景中非常常见。 在Java中,生成流水号或ID的一种...
流水线CPU设计是一种提高计算机处理器性能的技术,通过将指令执行过程划分为多个阶段,并行处理这些阶段,使得每个阶段在时钟周期内完成一部分工作,从而实现连续执行指令的效果。本设计文档主要涵盖五个核心模块:...
- **位数**:设置流水号的长度。 - **起始值**:喷码序列的起点。 - **步长方向**:设置计数方向(递增或递减)。 - **填充**:用特定字符填充不足位数的部分。 10. **文件编辑界面** - **文本框**:指定喷码...
根据题干描述,正确的队空条件为end1 == end2,队满条件为end2 == (end1 + 1) mod M。因此,正确答案为A。 **4. 二叉树的中序线索化** 题目提供了一个二叉树的结构图,并要求找出经过中序线索化后节点x的左右线索...