如何制作包含字母和数字的增量动态代码

本文关键字:动态 代码 数字 何制作 包含字 | 更新日期: 2023-09-27 17:50:40

我的初始代码是'A0AA',我需要一个c#代码/函数来增加它,直到它达到'Z9ZZ'。

例如

。第一个代码是'D9ZZ'下一个代码应该是'E0AA'

对不起,也许我的例子很令人困惑…这是另一个例子……谢谢。第一个代码是'D9AZ'下一个代码应该是'D9BA'

如何制作包含字母和数字的增量动态代码

 string start = "A9ZZ";
 int add = 1;
 string next = String.Concat(start.Reverse().Select((x,i) =>
 {
      char first = i == 2 ? '0' : 'A';
      char last  = i == 2 ? '9' : 'Z';
      if ((x += (char)add) > last)
      {
          return first;
      }
      else
      {
          add = 0;
          return x;
      }
 })
 .Reverse());

这应该可以修复它。

private static IEnumerable<string> Increment(string value)
{
    if (value.Length != 4)
        throw new ArgumentException();
    char[] next = value.ToCharArray();
    while (new string(next) != "Z9ZZ")
    {
        next[3]++;
        if (next[3] > 'Z')
        {
            next[3] = 'A';
            next[2]++;
        }
        if (next[2] > 'Z')
        {
            next[2] = 'A';
            next[1]++;
        }
        if (next[1] > '9')
        {
            next[1] = '0';
            next[0]++;
        }
        yield return new string(next);
    }
}

调用该代码的示例:

IList<string> values = Increment("A0AA").Take(100).ToList();
foreach (var value in values)
{
    Console.Write(value + " ");
}

这里有一个非常干净的解决方案,检查从末尾开始的每个字符:

public SomeMethod()
{
    var next = Increment("A2CZ"); // A2DZ
}
public string Increment(string code)
{
    var arr = code.ToCharArray();
    for (var i = arr.Length - 1; i >= 0; i--)
    {
        var c = arr[i];
        if (c == 90 || c == 57)
            continue;
        arr[i]++;
        return new string(arr);
    }
    return code;
}