C# 递增由字符串和字母组成的注册号

C# 递增由字符串和字母组成的注册号,c#,.net,C#,.net,我的问题类似于,但略有不同。我有一个注册号,其格式如下: 14AAA999:14是当前年份,每个A代表一个字符,每个9代表一个数字。 我知道如何从字符串中提取数字,但我也想增加字母的数量。以下是我想要实现的目标: 2014年注册的第一个家伙的注册号是:14AAA000,第二个是14AAA001,…,直到14AAA999,然后变成14AAB000,依此类推直到14ZZ999。我正在寻找一种好方法来增加每个溢出的字母数 谢谢你的帮助 伪代码: char[] minValues { "14AAA000

我的问题类似于,但略有不同。我有一个注册号,其格式如下:

14AAA999:14是当前年份,每个A代表一个字符,每个9代表一个数字。 我知道如何从字符串中提取数字,但我也想增加字母的数量。以下是我想要实现的目标:

2014年注册的第一个家伙的注册号是:14AAA000,第二个是14AAA001,…,直到14AAA999,然后变成14AAB000,依此类推直到14ZZ999。我正在寻找一种好方法来增加每个溢出的字母数

谢谢你的帮助

伪代码:

char[] minValues { "14AAA000" }
char[] maxValues { "99ZZZ999" }

int index = input.Length - 1;

do
{
  if (input[index] < maxValues[index])
  {
    input[index]++;
    for (int j = index + 1; j < input.Length)
      input[j] := minValues[j];
    break;
  }
  else
    index--;
} while (true);
char[]minValues{“14AAA000”}
char[]最大值{“99ZZZ999”}
int index=input.Length-1;
做
{
if(输入[index]
在您的情况下,数字是两个独立的基数。对于前3位数字,以10为基数,下一个基数为26,其中A=0。您只需创建一个数字转换,将您的表示转换为其他表示。这与ISE解决方案略有不同

class foo
{
    public static string ToRep(int Year,int Num)
    {
        StringBuilder SB = new StringBuilder(Year.ToString());
        SB.Append(":");
        int DecPart = Num % 1000;
        int Base26Part = Num / 1000;            
        for(int x = 0 ; x < 3 ; x++)
        {
            char NewChar =(char)( 'A'+ Base26Part % 26); 
            Base26Part /= 26;                
            SB.Insert(3,NewChar); 
        }
        SB.Append(DecPart.ToString("000"));
        return SB.ToString(); 
    }
}
class-foo
{
公共静态字符串ToRep(整年,整数)
{
StringBuilder SB=新的StringBuilder(Year.ToString());
某人加上(“:”);
int DecPart=Num%1000;
int Base26Part=Num/1000;
对于(int x=0;x<3;x++)
{
char NewChar=(char)('A'+base26部分%26);
base26部分/=26;
SB.插入(3,新字符);
}
某人追加(第10部分为“000”);
使某人返回字符串();
}
}

要在应用层还是数据层中使用该逻辑?当字符串等于
14AAZ999
时,下一个值将为
14ABA001
?@Steve我猜这将是
14ABA000
您的问题有两个部分:增加数字的实际逻辑和处理争用的方法(两个进程中的任何一个在保存到DB之前创建“新”注册)。@Stanley,我正在尝试在业务层实现它,是的,我们可以说是在数据层。非常感谢你的帮助,这是我一直在寻找的灵感。哇,这是一种非常聪明和干净的方法。有时我们会忘记我们在大学花了好几年的时间学习算术,而且它可能是有用的。我会走那条路。