1

我正在尝试在 Javascript 中创建一个字母数字序列号,该序列号受以下规则约束:

  1. 3位字母数字系列
  2. 允许值 1-9(不包括零)和 AZ(所有大写字母,不包括 I 和 O)
  3. 得到输入数字后,代码应该能够给出下一个数字。

最后一部分很棘手,基本上代码会获取序列号的现有值,然后将输出作为下一个数字。

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

此处附有相同的excel表

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

cur_frm.add_fetch('item_group','serial_number','serial_number');
4

3 回答 3

3

这应该这样做:

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"

我不确定你想在之后发生什么ZZZ。它跳到1111,但这可以改变。

如果您输入了无效的序列号(例如11I),它会为您提供下一个有效的编号(例如11J)。

于 2013-04-01T11:09:22.373 回答
0
    var alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZ";
    var alphabetLen = alphabet.length;

    function nextDigit(digit) {
        nextDigitPos = (alphabet.indexOf(digit)+1) % alphabetLen;
        return alphabet.charAt(nextDigitPos);
    }

    /**
     * Computes the next serial id.
     * @param id the id to compute the successor of,
     *        if null or empty String the first id
     *        "111" is returned.
     */
    function nextSerial(id) {
        if(id==null || id.length==0) return "111";
        var digits = id.split("");
        digits[2] = nextDigit(digits[2]);
        if(digits[2] == "1") /* overflow */ {
            digits[1] = nextDigit(digits[1]);
            if(digits[1] == "1") /* overflow */ {
                 digits[0] = nextDigit(digits[0])
            }
        }
        return digits.join("");
    }
于 2013-04-01T10:59:49.510 回答
0
于 2013-04-01T11:47:56.300 回答