今天来分享一个比较有意思的递增规则,开始也研究了一会,把高中学的等比等差都用上了,小喝了一杯茶,游荡一圈回来恍然大悟,所以说劳逸结合还是蛮重要的。下面进入正题:

我的规则是第一位作为头,后面所为流水号,当然头也是可变的,从1到Z,只是在流水号从XXX001用到XXX999,z最后用到XXXZZZ的时候,头才会加一个,先贴代码:

public static void main(String[] args) throws Exception {String customDotNum = customDotNum("10ZZZ", 4);System.out.println(customDotNum);
}/*** 生成当前头+流水序号* * @param nowNetwork 当前头+流水序号* @param serialLength 流水序号长度* @return 返回下一个头+流水序号* @throws Exception*/
private static String customDotNum(String nowNetwork, int serialLength) throws Exception {// 如果是什么都没有StringBuilder stringBuilder = new StringBuilder();if (nowNetwork == null || nowNetwork.length() == 0 || "null".equals(nowNetwork)) {stringBuilder.append("A");for (int i = 0; i < serialLength; i++) {stringBuilder.append("0");}} else {stringBuilder.append(nowNetwork);}if (stringBuilder.length() != serialLength + 1) {throw new Exception("参数长度与传入长度不符:network:" + stringBuilder.toString() + " serialLength:" + serialLength);}if (serialLength < 1 || serialLength > 12) {throw new Exception("长度格式有误,长度必需在1-12之间");}String header = stringBuilder.substring(0, 1);String driver = "";try {driver = driver(stringBuilder.substring(1));} catch (Exception e) {char charAt = stringBuilder.charAt(0);if (charAt == 'Z') {throw new Exception("数据头已溢出");}if (charAt == '9') {charAt = '@';}AtomicInteger atomic = new AtomicInteger(charAt);header = String.valueOf((char) atomic.incrementAndGet());StringBuilder stringBuilder1 = new StringBuilder();for (int i = 0; i < serialLength; i++) {stringBuilder1.append("0");}try {driver = driver(stringBuilder1.toString());} catch (Exception e0) {e0.printStackTrace();}}return header + driver;
}/*** 生成流水序号* * @param driver 当前头+流水序号* @return 返回下一个流水序号* @throws Exception*/
public static String driver(String driver) throws Exception {driver = driver.toUpperCase();char[] charArray = driver.toCharArray();AtomicInteger z = new AtomicInteger(0);for (int i = charArray.length - 1; i >= 0; i--) {char c = charArray[i];// 先判断满Z进1的情况if (c == 'Z') {if (i == 0) {throw new Exception("数据已溢出");}charArray[i] = 'A';z.set(1);continue;}if (c == '9') {// 如果到了第一位还是9if (i == 0) {charArray[i] = 'A';break;}charArray[i] = '0';z.set(1);continue;}// 如果等于1则需要进位1if (z.intValue() == 1 || i == charArray.length - 1) {AtomicInteger atomic = new AtomicInteger(c);charArray[i] = (char) atomic.incrementAndGet();z.set(0);break;}}return String.valueOf(charArray);
}

可以先看,太晚了先睡了,后续给代码做下说明,各位看官也可以拷贝下来自行跑跑看

java流水号生成规则(固定位数,先通过数字生成,数字用完字母生成)相关推荐

  1. 雪花算法及运用PHP,雪花算法生成全局唯一ID,参考了下网上雪花算法生成规则,机器ID和序列号自动获取 理论上毫秒可生成 1024*4096个唯一ID

    任务要求毫秒生成10000个唯一ID 研究了下twitter/snowflake的算法思想: 参考了下网上雪花算法生成规则,把数据中心和机器编号整合一起,变成10位机器ID, 机器ID和序列号自动获取 ...

  2. (JAVA练习)输入一个四位数,各个位的数字相加

    题目: 输入一个四位数,各个位的数字相加 解法1: import java.util.Scanner;public class While1117 {public static void main(S ...

  3. 【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )

    文章目录 I . 数据绑定 简介 II . 数据绑定 使用前提 ( 环境支持 ) III . 数据绑定 使用流程 一 : 启用数据绑定 IV . 数据绑定 使用流程 二 : 定义数据类 V . 数据绑 ...

  4. 【JetPack】ViewBinding 视图绑定组件 ( 启用模块 | 视图绑定定制 | 绑定类名称生成规则 | 绑定类字段生成规则 | 绑定类获取根视图 | 绑定类获取布局组件 )

    文章目录 I . 视图绑定组件简介 II . 视图绑定 ViewBinding 使用前提 ( Android Studio 3.6 ) III . 视图绑定组件启用 IV . 定制视图绑定 ( 启用视 ...

  5. 根据编号规则生成规则编号

    /*** 根据编号规则生成规则编号* @param rule 前缀* @param num 数字位数* @param orderField 排序字段* @param table 表名* @param ...

  6. vs2017 自定义生成规则 错误 MSB3721 命令 ”已退出,返回代码为 1。

    错误 MSB3721 命令 "已退出,返回代码为 1. 解决办法:去掉yasm复选框,改为masm vs2017 自定义生成规则-编译汇编代码 VC++调用yasm编译汇编代码有三种方法:C ...

  7. 方维团购系统,代金券序列号的生成规则

    方维团购系统,代金券序列号的生成规则 方维团购系统,代金券序列号的生成规则如下: $tempsn = unpack('H8',str_shuffle(sha1(uniqid()))); $data[' ...

  8. python的for语句打印金字塔图形_python实现输入任意一个大写字母生成金字塔的示例...

    本文将要为您介绍的是python实现输入任意一个大写字母生成金字塔的示例,具体完成步骤: 输入任意一个大写字母,生成金字塔图形 def GoldTa(input): L = [chr(i) for i ...

  9. java 数字 字母 递增_JAVA流水号生成规则(按默认规则递增,数字不够添加字母递增,位数不够自动加1)...

    写道 在某些应用场景中,因业务需要,一般的流水号(前缀+日期或时间+流水号)规则无法满足业务需要,以下是因业务需要拓展出来的流水号生成规则 业务要求: 1.默认限定位数的数字递增 2.在限定位数数字达 ...

最新文章

  1. Spring Cloud Alibaba基础教程版本升级:0.2.1-gt;0.2.2
  2. 互联网日报 | 6月27日 星期日 | B站举办十二周年演讲;特斯拉在华召回285520辆汽车;小鹏汽车将于7月7日在港上市...
  3. oracle在archivelog模式进行rman备份和恢复
  4. (20)Xilinx FPGA型号(FPGA不积跬步101)
  5. 全国计算机二级基础知识ppt,有关全国计算机二级基础知识.ppt
  6. “const char *“ 类型的实参与 “char *“ 类型的形参不兼容错误的解决方法
  7. 【精选】Java高频面试题278道附答案,通关中大型互联网企业工程师必备
  8. 【python】获取http响应
  9. 常见的资源记录类型及应用示例
  10. 《大话数据结构》第一章 数据结构绪论
  11. 百度网盘永久分享链接-注册电气工程师(注电)历年考试真题PDF, Word版资料(含答案), 相关视频资料
  12. matlab仿真中直流电压,直流升压变换器的MATLAB仿真.doc
  13. onenote 无法正常使用的解决办法
  14. matlab测量直流母线上的电压,基于模糊控制的有源滤波器直流母线电压控制
  15. 网易AI入选2018年杭州案例
  16. 数据上链——区块链相关概念
  17. 实现文章的展开与收起
  18. 2015年P2P理财必看的10大常识
  19. 人邮计算机第三版PPTu12,高一英语U12词句、词组讲解.ppt
  20. Python-OpenCV(一)

热门文章

  1. 大数据分析案例-基于LightGBM算法构建航空公司满意度预测模型
  2. C++Qt开发——操作MySQL数据库
  3. 测试spring容器
  4. Flutter 下拉刷新之RefreshIndicator
  5. 记录Git 提交报错 fatal: Exiting because of unfinished merge
  6. jquery appendTo用法
  7. 农产品调度数据可视化应用解决方案分享 | 数字农业
  8. ubuntu上gem安装sinatra报错解决办法
  9. dd if=/dev/zero of=的含义是什么?Linux 下的dd命令使用详解
  10. 跨平台APP和web APP到底有什么区别?