-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
  • を保存する場所にはいつでも、その横にnDateTimeを保存します。dt
  • をインクリメントするたびに、等しいnかどうかを確認しますdtDatetime.Today
    • その場合は、以前のように渡しnます。
    • そうでない場合は、nゼロ (または場合によっては 1) に設定dtし、 に設定しDateTime.Todayます。

(日付が の 2 つの使用方法の間で変更された場合に備えて、関数内で使用dtするのGetPersonalIdではなく、に渡します。)DateTime.TodayDateTime.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)、DataBase から取得します。主な状態 - 最新であり、今日ではありません
  2. 現在の ID と手順 1) の ID との差として "n" を渡します。
于 2012-10-22T12:14:15.267 に答える