@TOC

需求:

1、要求生成的编码格式为YYYYMMA00001。例如:202209A00001
2、序号 00001递增,当序号大于99999时,字母A递增。例如:A99999 时递增为B00001

如图所示:

在这里插入图片描述

实现:

年月就不说了。获取一下补个零就行了。

字母递增:

 // 获取字母(A大写 a小写)
 // index 从0开始
 let letter = String.fromCharCode("A".charCodeAt(0) + index);

判断一下,当序号大于99999时,index+1,在给end从1开始计数(end为序号)

        // 满99999 字母递增 序号重置为1
        let index = 0;
        if (end > 99999) {
          end = total - 99999 + 1;
          index++;
        }

        end = "00000" + end;
        end = end.substr(end.length - 5, 5);
        // 获取字母(A大写 a小写)
        let letter = String.fromCharCode("A".charCodeAt(0) + index);

在这里插入图片描述
在这里插入图片描述

序号递增:

        // total 数据现有总长度 新增+1
        let end = total + 1;
        
        end = "00000" + end;
        end = end.substr(end.length - 5, 5);

核心代码:

// total 后台查回来的数据总数
function code(total) {
        // total 数据现有总长度 新增+1
        let end = total + 1;
        //获取当月时间 YYYYMM
        let date = new Date();
        let year = date.getFullYear();
        let month = date.getMonth() + 1;
        if (month >= 1 && month <= 9) {
          month = "0" + month; //自动补零
        }
        let currentdate = year + month;

        // 满99999 字母递增 序号重置为1
        let index = 0;
        if (end > 99999) {
          end = total - 99999 + 1;
          index++;
        }

        end = "00000" + end;
        end = end.substr(end.length - 5, 5);
        // 获取字母(A大写 a小写)
        let letter = String.fromCharCode("A".charCodeAt(0) + index);

        return currentdate + letter + end; //年月+字母+5位序号
}

pass:给后人留个坑吧:

在这里插入图片描述

这块儿的逻辑有问题,只能算到B。C就不行了。也就是说AB两个字母都可以算满,99999x2 大概20w的数据,嗯,短时间内肯定是发现不了,本来想用取余算的。算了,早就不想干了,20w的数据,不得添加好几年??我早就走了,给后人留个坑吧,奈斯!!拜拜!!!

把字母递增和序号递增单独拧出来还是可以用的。。。

Q.E.D.


悟已往之不谏,知来者之可追

江子辰,读书人,爱文学,软件工程理工男,IP浙江在职,从业五年。主攻前端方向技术研发,副攻Unity 3D、IOS客户端、Python人工智能等。2021年被评为华为云享专家,阿里云专家博主,前端领域优质创作者等,都是虚名。

新网站链接:https://jiangsihan.cn/frontend