如何在Javascript中创建字母数字序列号?

如何在Javascript中创建字母数字序列号?,javascript,Javascript,我试图在Javascript中创建字母数字序列号,序列号受以下规则控制: 三位字母数字系列 允许值1-9(不包括零)和A-Z(不包括I和O的所有大写字母) 代码应该能够在获得输入号码后给出下一个号码 最后一部分很棘手,基本上代码将获取序列号的现有值,然后将输出作为下一个数字 例如:如果输入编号为11D,则输出编号应为11E。请让我知道这个描述是否足以解释我的要求 该表的excel表格附在后 脚本获取起始值11D的代码部分也来自以下代码: cur_frm.add_fetch('item_group

我试图在Javascript中创建字母数字序列号,序列号受以下规则控制:

  • 三位字母数字系列
  • 允许值1-9(不包括零)和A-Z(不包括I和O的所有大写字母)
  • 代码应该能够在获得输入号码后给出下一个号码
  • 最后一部分很棘手,基本上代码将获取序列号的现有值,然后将输出作为下一个数字

    例如:如果输入编号为11D,则输出编号应为11E。请让我知道这个描述是否足以解释我的要求

    该表的excel表格附在后

    脚本获取起始值11D的代码部分也来自以下代码:

    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发生什么?