@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的数据,不得添加好几年??我早就走了,给后人留个坑吧,奈斯!!拜拜!!!
把字母递增和序号递增单独拧出来还是可以用的。。。
评论区