-1

我有一个函数可以给我 12 位字符串。

例如。

AA 01 201 210 22
AA 02 201 210 22
.
.
AA 99 201 210 22
AB 01 201 210 22
& so on. . .

public string GetPersonalId(int n)
{
    char letter1 = (char)('A' + ((n / 10 / 26 / 26) % 26));
    char letter2 = (char)('A' + ((n / 10 / 10 ) % 26));
    char digit1 = (char)('0' + ((n / 10) % 10));
    char digit2 = (char)('0' + ((n) % 10));

    string dateString = string.Format("{0:yyyyMMdd}", DateTime.Today)
        .Insert(6, " ")
        .Insert(3, " ");

    return string.Format("{0}{1} {2}{3} {4}",
        letter1, letter2, digit1, digit2, dateString);
}

现在的问题是,第二天这个序列应该从 AA 01 201 210 23 重新开始。

谁能帮我。

4

2 回答 2

2
  • 无论你在哪里存储,在它旁边n存储一个 DateTime 。dt
  • 每次递增n时,检查是否dt等于Datetime.Today
    • n如果是这样,请像以前一样传递。
    • 如果不是,则设置n为零(或可能为一)并设置dtDateTime.Today.

(我也会传入dtGetPersonalId不是DateTime.Today在函数内部使用,以防万一 . 的两种用法之间的日期变化DateTime.today。)

例如,如果你有

int currentN = 0;

...

string GetNextPersonalId()
{
    currentN += 1;
    return GetPersonalId(currentN);
}

更改为类似

int currentN = 0;
DateTime currentDay = DateTime.Today;

...

string GetNextPersonalId()
{
    if (DateTime.Today == currentDay)
    {
        currentN += 1;
    }
    else
    {
        currentN = 0; // or 1
        currentDay = DateTime.Today;
    }
    return GetPersonalId(currentN);
}
于 2012-10-22T12:09:20.183 回答
0

想法是:每天您需要将“n”值重置为 1。

使此功能按预期工作的最简单方法:

  1. 保留前一天生成的最后一个ID(-s)或从数据库中获取它;主要条件 - 最新而非今天
  2. 将“n”作为当前 ID 与步骤 1) 中的 ID 之间的差值传递;
于 2012-10-22T12:14:15.267 回答