如何在Javascript中创建字母数字序列号?
我试图在Javascript中创建字母数字序列号,序列号受以下规则控制:如何在Javascript中创建字母数字序列号?,javascript,Javascript,我试图在Javascript中创建字母数字序列号,序列号受以下规则控制: 三位字母数字系列 允许值1-9(不包括零)和A-Z(不包括I和O的所有大写字母) 代码应该能够在获得输入号码后给出下一个号码 最后一部分很棘手,基本上代码将获取序列号的现有值,然后将输出作为下一个数字 例如:如果输入编号为11D,则输出编号应为11E。请让我知道这个描述是否足以解释我的要求 该表的excel表格附在后 脚本获取起始值11D的代码部分也来自以下代码: cur_frm.add_fetch('item_group
cur_frm.add_fetch('item_group','serial_number','serial_number');
这应该做到:
var nextSerialNumber = function(serialNumber) {
return (parseInt(serialNumber, 36) + 1).toString(36).replace(
/i/g,'j').replace(/o/g, 'p').replace(/0/g, '1').toUpperCase();
}
nextSerialNumber("99Z") //=> "9A1"
nextSerialNumber("11D") //=> "11E"
function getNext(num) {
var alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZ";
var digits = num.toUpperCase().split(""),
len = digits.length,
increase = true;
if (len != 3)
throw new Error("Invalid serial number length in getNext: "+num);
for (var i=len-1; increase && i>=0; i--) {
var val = alphabet.indexOf(digits[i]);
if (val == -1)
throw new Error("Invalid serial number digit in getNext: "+num);
val++;
if (val < alphabet.length) {
digits[i] = alphabet[val];
increase = false;
} else { // overflow
digits[i] = alphabet[0];
}
}
if (increase) // is still true
throw new Error("Serial number overflow in getNext");
num = digits.join("");
return num;
}
我不确定你想在ZZZ
之后发生什么。它跳到1111
,但这是可以改变的
如果您输入了一个无效的序列号(例如11I
),它将为您提供下一个有效的序列号(例如11J
)。这应该可以做到:
var nextSerialNumber = function(serialNumber) {
return (parseInt(serialNumber, 36) + 1).toString(36).replace(
/i/g,'j').replace(/o/g, 'p').replace(/0/g, '1').toUpperCase();
}
nextSerialNumber("99Z") //=> "9A1"
nextSerialNumber("11D") //=> "11E"
function getNext(num) {
var alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZ";
var digits = num.toUpperCase().split(""),
len = digits.length,
increase = true;
if (len != 3)
throw new Error("Invalid serial number length in getNext: "+num);
for (var i=len-1; increase && i>=0; i--) {
var val = alphabet.indexOf(digits[i]);
if (val == -1)
throw new Error("Invalid serial number digit in getNext: "+num);
val++;
if (val < alphabet.length) {
digits[i] = alphabet[val];
increase = false;
} else { // overflow
digits[i] = alphabet[0];
}
}
if (increase) // is still true
throw new Error("Serial number overflow in getNext");
num = digits.join("");
return num;
}
你为什么要用JavaScript做这件事?另外,您尝试过什么?当我输入99Z时会发生什么?您的要求似乎相对清晰,但您没有描述您的问题或问题。我们会帮助你(而且很高兴!),但是,我们不会为你做所有的工作。如果我真的要求别人做我的工作,我真的很抱歉。基本上,我不是一个编码员,这是一个应用程序中更大代码的一部分,该应用程序只接受javascript。我在excel工作表中添加了一个链接,其中我制作了我所需的系列。@Ricky 99Z之后的下一个数字是9A1,系列的最后一个数字是ZZZ。由于序列中有33个变量,因此我们将有35937个3位数的可能值感谢jeff的帮助,但下面提到的答案帮助我处理序列号达到ZZZ值的问题。您希望在ZZZ发生什么?